Arduino och 4*7 segment display

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
UndCon
Inlägg: 79
Blev medlem: 15 januari 2010, 00:07:10

Re: Arduino och 4*7 segment display

Inlägg av UndCon »

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
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Arduino och 4*7 segment display

Inlägg av jesse »

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 är det visningen jag vill ha hjälp med - att dela upp räknarens tal 0-9999 (det jag ville göra med modulo)
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?
och visa resp tal på displayen dvs anropa showdigit med den display och vilket tal som är aktuellt
och det funkar ju, eller hur? För det har du ju testat.

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).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino och 4*7 segment display

Inlägg av sodjan »

> 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.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Arduino och 4*7 segment display

Inlägg av jesse »

>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.
UndCon
Inlägg: 79
Blev medlem: 15 januari 2010, 00:07:10

Re: Arduino och 4*7 segment display

Inlägg av UndCon »

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
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Arduino och 4*7 segment display

Inlägg av jesse »

>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...
UndCon
Inlägg: 79
Blev medlem: 15 januari 2010, 00:07:10

Re: Arduino och 4*7 segment display

Inlägg av UndCon »

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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino och 4*7 segment display

Inlägg av sodjan »

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...
Användarvisningsbild
xraid
Inlägg: 1129
Blev medlem: 20 mars 2009, 04:12:14
Ort: Stockholm

Re: Arduino och 4*7 segment display

Inlägg av xraid »

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 ...
UndCon
Inlägg: 79
Blev medlem: 15 januari 2010, 00:07:10

Re: Arduino och 4*7 segment display

Inlägg av UndCon »

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)
Bild


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...
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Arduino och 4*7 segment display

Inlägg av jesse »

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.
UndCon
Inlägg: 79
Blev medlem: 15 januari 2010, 00:07:10

Re: Arduino och 4*7 segment display

Inlägg av UndCon »

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
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino och 4*7 segment display

Inlägg av sodjan »

> 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...
UndCon
Inlägg: 79
Blev medlem: 15 januari 2010, 00:07:10

Re: Arduino och 4*7 segment display

Inlägg av UndCon »

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
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Arduino och 4*7 segment display

Inlägg av vfr »

Ö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.
Skriv svar