Arduino och 4*7 segment display
Re: Arduino och 4*7 segment display
Hej!
Jag försöker förklara för er vad det är jag är ute efter...
Det närmaste kommer vi med detta som Jesse skrev - och det var det jag efterlyste i post 1
visa en siffra:
1) släck alla GND
2) tänd rätt segment
3) tänd rätt GND-bit (nu syns siffran)
4) gör paus en millisekund
visa ett helt tal:
1) visa siffra 1
2) visa siffra 2
3) visa siffra 3
4) visa siffra 4
5) loopa punkt 1-4 100 gånger. (visar talet ca 0.1 sekund) eller 1000 gånger (visar talet 1 sekund)
visa en siffra:
punkt 1-4 sker med showdigit
visa ett helt tal:
Sedan är det visningen jag vill ha hjälp med - att dela upp räknarens tal 0-9999 (det jag ville göra med modulo) och visa resp tal på displayen dvs anropa showdigit med den display och vilket tal som är aktuellt
Jag skall se om jag kan få Jesses kod att bryta upp talet att visa rätt utan loop till att börja med...så att jag vet om den funkar tillsammans med min kod (efter jobbet)
för som det är nu är det där det inte fungerar - så jag skall lägga till lite konsoll-text och se om jag kan läsa ut talen rätt - då vet jag om displayen inte hinner visa siffrorna eller om det går för snabbt så att ögat inte hinner med
Att det behövs en övergripande loop som snurrar och tänder/släcker displayerna är jag väl medveten om
/N
Jag försöker förklara för er vad det är jag är ute efter...
Det närmaste kommer vi med detta som Jesse skrev - och det var det jag efterlyste i post 1
visa en siffra:
1) släck alla GND
2) tänd rätt segment
3) tänd rätt GND-bit (nu syns siffran)
4) gör paus en millisekund
visa ett helt tal:
1) visa siffra 1
2) visa siffra 2
3) visa siffra 3
4) visa siffra 4
5) loopa punkt 1-4 100 gånger. (visar talet ca 0.1 sekund) eller 1000 gånger (visar talet 1 sekund)
visa en siffra:
punkt 1-4 sker med showdigit
visa ett helt tal:
Sedan är det visningen jag vill ha hjälp med - att dela upp räknarens tal 0-9999 (det jag ville göra med modulo) och visa resp tal på displayen dvs anropa showdigit med den display och vilket tal som är aktuellt
Jag skall se om jag kan få Jesses kod att bryta upp talet att visa rätt utan loop till att börja med...så att jag vet om den funkar tillsammans med min kod (efter jobbet)
för som det är nu är det där det inte fungerar - så jag skall lägga till lite konsoll-text och se om jag kan läsa ut talen rätt - då vet jag om displayen inte hinner visa siffrorna eller om det går för snabbt så att ögat inte hinner med
Att det behövs en övergripande loop som snurrar och tänder/släcker displayerna är jag väl medveten om
/N
Re: Arduino och 4*7 segment display
Det är viktigt att du delar upp problemen i delar så att du inte försöker göra allt på en gång - för då vet du inte vilken av delarna som inte fungerar.
Sedan, när du fått det att fungera har jag kommit med två förslag hur du ska få displayen att visa flera olika siffror "samtidigt":
1) en loop som visar talet på displayen (se exempel ovan). Det är en bra nybörjarövning för att få det att fungera utan att krångla med interrupt eller timers.
2) en "riktig" lösning med timer och interrupt, så som alla proffs skulle gjort. Lär du dig det så kommer du att kunna använda processorn mycket effektivare.
Börja med (1) och när det fungerar och du förstår varför det fungerar, så kan du börja läsa databladet för processorn och läsa på om timers och interrupt (och googla på AVR interrupt och timer exempel) så att du vet vad det är för något. Gör lite testprogram för att kolla att du kan använda timers, gör andra testprogram för att använda interrupt. När du vet hur du ska använda dessa, kan du ge dig på proffslösningen, PUNKT (2).
Men har du testat koden i mitt tredje inlägg? (jag har inte testat den så det kan vara slarvfel). Om den inte fungerar - vad blir fel?Sedan är det visningen jag vill ha hjälp med - att dela upp räknarens tal 0-9999 (det jag ville göra med modulo)
och det funkar ju, eller hur? För det har du ju testat.och visa resp tal på displayen dvs anropa showdigit med den display och vilket tal som är aktuellt
Sedan, när du fått det att fungera har jag kommit med två förslag hur du ska få displayen att visa flera olika siffror "samtidigt":
1) en loop som visar talet på displayen (se exempel ovan). Det är en bra nybörjarövning för att få det att fungera utan att krångla med interrupt eller timers.
2) en "riktig" lösning med timer och interrupt, så som alla proffs skulle gjort. Lär du dig det så kommer du att kunna använda processorn mycket effektivare.
Börja med (1) och när det fungerar och du förstår varför det fungerar, så kan du börja läsa databladet för processorn och läsa på om timers och interrupt (och googla på AVR interrupt och timer exempel) så att du vet vad det är för något. Gör lite testprogram för att kolla att du kan använda timers, gör andra testprogram för att använda interrupt. När du vet hur du ska använda dessa, kan du ge dig på proffslösningen, PUNKT (2).
Re: Arduino och 4*7 segment display
> Att det behövs en övergripande loop som snurrar och tänder/släcker displayerna är jag väl medveten om
Nej, inte "övergripande" utan "i bakgrunden"! Rutinen som sköter
multiplexningen av displayerna ska vara liten och effektiv och den har
ingeneting med t.ex uppdelningen av en integer i siffror (int->BCD) att göra.
Du försöker göra för mycket på en gång.
Se *först* till att du har en testad och tillförlitlig multiplex-rutin. Sannolikt
driven av ett timer-interrupt. Den körs sedan helt och hållet fristående
från övrig kod så du kan i princip glömma den i fortsättningen.
*Sedan* funderar du på omvandligen från int till BCD och all annan kod
som du eventuellt behöver.
> en "riktig" lösning med timer och interrupt, så som alla proffs skulle gjort.
Tja, det är den ända vettiga/fungerande/flexibla lösningen, oavsett "proffs" eller inte.
Nej, inte "övergripande" utan "i bakgrunden"! Rutinen som sköter
multiplexningen av displayerna ska vara liten och effektiv och den har
ingeneting med t.ex uppdelningen av en integer i siffror (int->BCD) att göra.
Du försöker göra för mycket på en gång.
Se *först* till att du har en testad och tillförlitlig multiplex-rutin. Sannolikt
driven av ett timer-interrupt. Den körs sedan helt och hållet fristående
från övrig kod så du kan i princip glömma den i fortsättningen.
*Sedan* funderar du på omvandligen från int till BCD och all annan kod
som du eventuellt behöver.
> en "riktig" lösning med timer och interrupt, så som alla proffs skulle gjort.
Tja, det är den ända vettiga/fungerande/flexibla lösningen, oavsett "proffs" eller inte.
Re: Arduino och 4*7 segment display
>Tja, det är den ända vettiga/fungerande/flexibla lösningen, oavsett "proffs" eller inte.
Visst, men det är nog bra att kunna multiplexa en display med fyra siffror först ( = veta vad man håller på med) innan man blandar in nya saker så som timers och interrupt. Därför tyckte jag en loop som kör t.ex. 100 eller 1000 varv för att visa talet på displayen var ett bra steg i programutveckligen. Det är busenkelt och lätt att begripa. Sedan tar man nästa steg. För jag tror att TS kommer att få det svårt om allt ska göras på en gång.
Visst, men det är nog bra att kunna multiplexa en display med fyra siffror först ( = veta vad man håller på med) innan man blandar in nya saker så som timers och interrupt. Därför tyckte jag en loop som kör t.ex. 100 eller 1000 varv för att visa talet på displayen var ett bra steg i programutveckligen. Det är busenkelt och lätt att begripa. Sedan tar man nästa steg. För jag tror att TS kommer att få det svårt om allt ska göras på en gång.
Re: Arduino och 4*7 segment display
Jag skall se vad jag kan åstadkomma under kvällen
Tack för hjälpen och för förslagen på lösningar.
Jag bryr mig inte så mycket om vilket som blir "finast" kod - bara det funkar för det är viktigast - eller hur.
Alla ligger vi på olika nivåer och då kör jag på en som jag tror är relativt lätt nivå för att lösa utmaningen.
/N
Tack för hjälpen och för förslagen på lösningar.
Jag bryr mig inte så mycket om vilket som blir "finast" kod - bara det funkar för det är viktigast - eller hur.
Alla ligger vi på olika nivåer och då kör jag på en som jag tror är relativt lätt nivå för att lösa utmaningen.
/N
Re: Arduino och 4*7 segment display
>Jag bryr mig inte så mycket om vilket som blir "finast" kod - bara det funkar för det är viktigast - eller hur.
Det är en bra inställning till en början, gör på ditt vis först, så du vet exakt vad som händer och varför.
Men många av förslagen är ju till för att förenkla en hel del och så ska den ju fungera också...
Men när programmet väl fungerar kan det vara en bra idé att försöka göra ett "smartare" program.
Oftast är det inte bara för att det ska se snyggare ut: När det gäller AVR mikroprocessorer så finns det begränsat minnesutrymme och ofta måste man försöka optimera koden för att den ska bli snabbare. Kan man inte "finesserna" då så blir det svårt att åstadkomma så mycket.
När du t.ex gör din rutin som visar ett fyrsiffrigt tal på displayen så visst fungerar det på ditt sätt att tänka. Men normalt så har ju processorn mycket annat att jobba med och kan inte vara totalt upptagen med en display-loop hela tiden. I ett normalt mikroprocessorprogram så är siffervisningen på en display bara en liten del i programmet. Om man från början fixat ett smart system där det tar 10µS att uppdatera siffrorna på displayen, så behöver man aldrig bekymra sig om det sedan.
Jag använder ungefär en liknande processor som du och den visar en displaybild med sex olika decimaltal + text som ständigt ändras samtidigt som den tar emot och skriver data från en PC (UART), tar emot och skickar data till ett tiotal andra kretsar med 250.000 bytes per sekund, utför ett stort antal matematiska beräkningar, kollar hela tiden om man tryckt på någon knapp, antingen direkt på en ingång eller via en enhet med SPI-kommunikation , och utför i så fall motsvarande kommando....
Det mesta av detta sker automatiskt i bakgrunden med hjälp av interrupt eller liknande funktioner. I huvudloopen i "main" har jag i princip ingenting. Allt som ska utföras utförs efter att en klocka visar att "nu är det dags". Då anropas rutinen. Klockan tickar 1000 "tick" per sekund. Däremellan ligger processorn och vilar.
Hade jag visat siffror på displayen med en "loop" i main hade min processor knappast kunnat göra något annat än det...
Det är en bra inställning till en början, gör på ditt vis först, så du vet exakt vad som händer och varför.
Men många av förslagen är ju till för att förenkla en hel del och så ska den ju fungera också...
Men när programmet väl fungerar kan det vara en bra idé att försöka göra ett "smartare" program.
Oftast är det inte bara för att det ska se snyggare ut: När det gäller AVR mikroprocessorer så finns det begränsat minnesutrymme och ofta måste man försöka optimera koden för att den ska bli snabbare. Kan man inte "finesserna" då så blir det svårt att åstadkomma så mycket.
När du t.ex gör din rutin som visar ett fyrsiffrigt tal på displayen så visst fungerar det på ditt sätt att tänka. Men normalt så har ju processorn mycket annat att jobba med och kan inte vara totalt upptagen med en display-loop hela tiden. I ett normalt mikroprocessorprogram så är siffervisningen på en display bara en liten del i programmet. Om man från början fixat ett smart system där det tar 10µS att uppdatera siffrorna på displayen, så behöver man aldrig bekymra sig om det sedan.
Jag använder ungefär en liknande processor som du och den visar en displaybild med sex olika decimaltal + text som ständigt ändras samtidigt som den tar emot och skriver data från en PC (UART), tar emot och skickar data till ett tiotal andra kretsar med 250.000 bytes per sekund, utför ett stort antal matematiska beräkningar, kollar hela tiden om man tryckt på någon knapp, antingen direkt på en ingång eller via en enhet med SPI-kommunikation , och utför i så fall motsvarande kommando....
Det mesta av detta sker automatiskt i bakgrunden med hjälp av interrupt eller liknande funktioner. I huvudloopen i "main" har jag i princip ingenting. Allt som ska utföras utförs efter att en klocka visar att "nu är det dags". Då anropas rutinen. Klockan tickar 1000 "tick" per sekund. Däremellan ligger processorn och vilar.
Hade jag visat siffror på displayen med en "loop" i main hade min processor knappast kunnat göra något annat än det...
Re: Arduino och 4*7 segment display
Den Arduino jag testar på är en Teensy++ och är lite mer kompetent än ett vanligt Arduino Pro Mini
I detta fallet är det bara en räknare - jag har inte som mål att kunna använda den till mer - men det är givetvis bra att kunna göra det någon gång
Jag ser det mest som en lek/övning - jag har ett Teensy++ över och kan lika gärna labba med det istället för att det bara ligger på hyllan.
mina andra arduinos använder jag i Tricoptrar och Quadcoptrar.
I detta fallet är det bara en räknare - jag har inte som mål att kunna använda den till mer - men det är givetvis bra att kunna göra det någon gång
Jag ser det mest som en lek/övning - jag har ett Teensy++ över och kan lika gärna labba med det istället för att det bara ligger på hyllan.
mina andra arduinos använder jag i Tricoptrar och Quadcoptrar.
Re: Arduino och 4*7 segment display
Arduino...
Sorry, det stog ju i rubriken men det hade jag helt missat...
Tja, ja, då är man ju "begränsad" till vad en Arduino klarar och innehåller.
Jag såg framför mig en vanlig "naken" AVR...
Sorry, det stog ju i rubriken men det hade jag helt missat...
Tja, ja, då är man ju "begränsad" till vad en Arduino klarar och innehåller.
Jag såg framför mig en vanlig "naken" AVR...
Re: Arduino och 4*7 segment display
Arduino är en naken AVR med en bootloader . sen kan man programera den som om den vore naken eller också blanda in Arduinos högnivå bibliotek samt spränga in lite asm funktioner emellan med .
så sojdan Arduino begränsar inte AVR'en ...
så sojdan Arduino begränsar inte AVR'en ...
Re: Arduino och 4*7 segment display
När jag testade igår med en ny kod så upptäckte jag en konstig sak...
Jag får störningar om jag för ner fingret i området till höger, utan att vidröra något)

Denna störning märks speciellt på min nya kod...
Jag skall se om jag kan montera prylarna lite längre isär och kanske slänga på någon ferritring
Trodde inte detta skulle vara så känsligt...
Jag får störningar om jag för ner fingret i området till höger, utan att vidröra något)

Denna störning märks speciellt på min nya kod...
Jag skall se om jag kan montera prylarna lite längre isär och kanske slänga på någon ferritring
Trodde inte detta skulle vara så känsligt...
Re: Arduino och 4*7 segment display
verkar som om någon ingång är öppen. Det brukar inte vara så känsligt annars med vanlig CMOS-logik med så korta trådar... kan bli så om man råkat programmera en utgång som ingång - då tycks det kanske fungera till en början eftersom man aktiverar pull-up motståndet som "etta" ut, men "nolla" blir en flytande pinne, men det brukar sällan fungera i längden.
Re: Arduino och 4*7 segment display
För säkerhets skull skall jag ta bort oranga kopplingar och flytta dem till över USBingången där jag plockar (+5V)
Jag använde de befintliga för att de är PWM och jag kan tona siffrorna lite snyggt istället för att bara tända/släcka
Jag använde de befintliga för att de är PWM och jag kan tona siffrorna lite snyggt istället för att bara tända/släcka
Re: Arduino och 4*7 segment display
> Jag får störningar om jag för ner fingret i området till höger, utan att vidröra något)
Det pekar ganska entydigt mot att du har öppna ingångar !
En absolut "NO NO" när de gäller CMOS kretsar.
Se till att du inte har några öppna ingångar, het enkelt.
All annan felsökning innan det är åtgärdat är totalt bortkastat,
både din egen tid och tiden för de på forumet som intresserar sig...
Det pekar ganska entydigt mot att du har öppna ingångar !
En absolut "NO NO" när de gäller CMOS kretsar.
Se till att du inte har några öppna ingångar, het enkelt.
All annan felsökning innan det är åtgärdat är totalt bortkastat,
både din egen tid och tiden för de på forumet som intresserar sig...
Re: Arduino och 4*7 segment display
Exakt vad menar ni med öppna ingångar?
Jag har inga ingångar i min kod
är
digitalWrite(segment_A, 1);
eller
digitalWrite(segment_B, 0);
en öppen ingång (vilket jag tror ni menar när den är 1 dvs HIGH)
isåfall har jag öppna ingångar ja - det är ju så jag tänder segmenten, hur skall man annars göra?
sodjan - du får ursäkta om alla inte kan lika mycket som du...
Jag har observerat ett mönster...du tycks vara en expert som kan väldigt mycket och älskar att klanka ner på folk som mig som inte kan elektronik lika bra som du själv.
På flera ställen ser jag samma mönster - glada amatörer kommer hit för att få hjälp med diverse problem, men alltför ofta blir de fullständigt nertrackade av experter som du...
Jag tror inte att det är din avsikt, men det tillför inte diskussionen något av mervärde.
Men vad vet jag? - jag är ju bara en amatör...och som amatör kommer jag hit för att be er experter om hjälp.
Moment 22..
Ett forum är till för att kunna föra diskussioner, ställa frågor och få svar, men det tycks du inte riktigt ha greppat då du rekommenderar mig att inte ta er värdefulla tid i anspråk.
Vet du vad - skit i att hjälpa mig fler gånger, jag söker hjälp på annat håll istället.
MVH - UndCon
Jag har inga ingångar i min kod
är
digitalWrite(segment_A, 1);
eller
digitalWrite(segment_B, 0);
en öppen ingång (vilket jag tror ni menar när den är 1 dvs HIGH)
isåfall har jag öppna ingångar ja - det är ju så jag tänder segmenten, hur skall man annars göra?
sodjan - du får ursäkta om alla inte kan lika mycket som du...
Jag har observerat ett mönster...du tycks vara en expert som kan väldigt mycket och älskar att klanka ner på folk som mig som inte kan elektronik lika bra som du själv.
På flera ställen ser jag samma mönster - glada amatörer kommer hit för att få hjälp med diverse problem, men alltför ofta blir de fullständigt nertrackade av experter som du...
Jag tror inte att det är din avsikt, men det tillför inte diskussionen något av mervärde.
Men vad vet jag? - jag är ju bara en amatör...och som amatör kommer jag hit för att be er experter om hjälp.
Moment 22..
Ett forum är till för att kunna föra diskussioner, ställa frågor och få svar, men det tycks du inte riktigt ha greppat då du rekommenderar mig att inte ta er värdefulla tid i anspråk.
Vet du vad - skit i att hjälpa mig fler gånger, jag söker hjälp på annat håll istället.
MVH - UndCon
Re: Arduino och 4*7 segment display
Öppen ingång = en ingång på en CMOS-krets som inte är ansluten
Eftersom en CMOS-ingång är väldigt högohmig så ligger den och slår mellan 0 och 1 helt okontrollerat om den inte är ansluten till någonting. Anslut till någonting, vad som helst som ger en stabil nivå, eller definera som utgång istället om det är en mikrokontroller.
Eftersom en CMOS-ingång är väldigt högohmig så ligger den och slår mellan 0 och 1 helt okontrollerat om den inte är ansluten till någonting. Anslut till någonting, vad som helst som ger en stabil nivå, eller definera som utgång istället om det är en mikrokontroller.