Stap 4: De numitrons
Numitrons zijn 7 segment displays, dus moeten we bouwen onze cijfers met deze segmenten. Er zijn veel IC´s te rijden 7 segment diplays zoals de HEF4511 (BCD naar 7 segment) maar om ruimte te besparen op de pcb, rijden we hen rechtstreeks met de microcontroller. Om dit te doen, zullen we portb aan station de 7 segmenten en op de eerste vier pinnen van portc gebruiken om te inbetween de vier numitrons multiplex.
Wanneer u multiplex numitrons gebruikt, moet u dioden gebruiken op alle pinnen, behalve de gemeenschappelijke. Dit om te voorkomen 'ghost cijfers' in andere numitrons. Ik gebruikte de veel voorkomende 1N4007 voor mijn klok.
Eerder heb ik gezegd dat de numitrons tussen 3, 5V en 4, 5V moet. Maar wanneer we hen multiplex, ziet u iets gebeuren niet. Zoals we elke numitron voor enige 5ms tegelijk inschakelen, moeten we een hogere spanning te maken van de fillaments gloed. Alle spanning tussen 7, 5V en 12V zal prima werken, maar ik kies 7, 5V, omdat ik niet wil dat ze zich helder.
Als we een hoger voltage voor de numitrons dan voor onze microcontroller gebruiken, moeten we ook enkele transistoren. Ik gebruikte de gemeenschappelijke 2N3906 PNP-transistor te rijden van de segmenten en de BD137 NPN-transistor bij de multiplexing.
Nu voor sommige code:
Allereerst: als we weergeven van de tijd op vier numitrons wilt, we moeten opsplitsen in 4 cijfers. Er zijn talloze manieren om dit te doen, maar ik doe het met deze code:
Deze code moet u dim tube(4) als byte en temp als byte. De cijfers zijn genummerd van rechts naar links, zodat de notulen numitron hebben 1 en 2 en de uren 3 en 4.
Tube(2) = min / 10
Temp = Tube(2) * 10
Tube(1) = minuten - Temp
Tube(4) = uur / 10
Temp = Tube(4) * 10
Tube(3) = uren - Temp
Dus als de tijd 09:24 is: Tube(2) = 24/10 = 2 (de decimalen vallen)
Temp = 2 * 10 = 20
Tube(1) = 24-20 = 4
Tube(4) = 9/10 = 0
Temp = 0 * 10 = 0
Tube(3) = 9-0 = 9
Nu dat we de cijfers hebben, kunnen we hen multiplex:
Voor deze code moet u dim ik als byte en j als byte.
Voor I = 1 tot en met 4
Temp = 7seg(tube(i))
Portb = Temp
J = I -1
Set Portc.j
Waitms 5
Reset Portc.j
Volgende
Deze code selecteert een van de numitrons, de bijbehorende waarde converteert naar 7 segmenten en in staat stelt aan het licht omhoog door het instellen van de juiste pin van portc hoog voor 5ms. De numitrons zijn genummerd 1 tot en met 4 en de pinnen 0 tot en met 3, variabele j zullen variabele ik afgetrokken door 1.
Nu de laatste maar niet de 7seg-functie:
In de code de waarde van de cijfers omzetten in een 7 segment pinout voor portb voegen we deze functie neer.
We moeten eerst Declareer de functie.
Verklaren van de functie 7seg (byval Q As Byte) As Byte
We zullen vervolgens de code voor de functie toevoegen aan het einde van de code.
Functie 7seg (byval Q As Byte) As Byte
Selecteer geval Q
Case 1:
7seg = & B01111100
Case 2:
7seg = & B00010010
Case 3:
7seg = & B00011000
Case 4:
7seg = & B00101100
Case 5:
7seg = & B00001001
Case 6:
7seg = & B00000001
Case 7:
7seg = & B01111000
Zaak 8:
7seg = & B00000000
Case 9:
7seg = & B00001000
Case 0:
7seg = & B01000000
Einde selecteren
End Function
Belangrijk hier is dat, zoals we plachten PNP transistors, een 0 betekent dat het segment is geactiveerd en een 1 dat het segment wordt gedeactiveerd. Als u draad anders uw munitrons tot en met portb, moet u om erachter te komen welke bits nodig is voor elk segment.
In de volgende stap zullen we kijken naar de hersenen van onze contraption: de atmega48.