Numitron Klocka & termometer (4 / 8 steg)
Steg 4: Numitrons
Numitrons är 7 segmenterar skärmar, så vi måste bygga upp våra siffror med dessa segment. Det finns massor av IC´s att köra 7 segment visar som HEF4511 (BCD 7 segment) men för att spara utrymme på pcb, vi kommer att köra dem direkt med mikrokontroller. Till gör så, kommer att vi använda portb att driva 7 segment och de första fyra stiften på portc till multiplex emellan fyrana numitrons.
När du använder multiplex numitrons, måste du använda dioder på alla stift, utom det vanliga. Detta för att förhindra "ghost siffror" i andra numitrons. Jag använde den mycket vanliga 1N4007 för min klocka.
Jag sade tidigare, att numitrons behöver mellan 3, 5V och 4, 5V. Men när vi multiplex dem, du kommer inte se något hända. Som vi aktiverar varje numitron för endast 5ms i taget, behöver vi en högre spänning att göra fillaments glöd. Någon spänning mellan 7, 5V och 12V kommer att fungera bra, men jag väljer 7, 5V för att jag inte vill att de ska till ljusa.
Som vi använder en högre spänning för numitrons än för våra mikrokontroller, behöver vi några transistorer också. Jag använde vanliga 2N3906 PNP-transistorn för att köra segmenten och BD137 NPN transistor att bistå den multiplexing.
Nu till några kod:
Först av allt: när vi vill visa tid på fyra numitrons, vi måste du dela den i 4 siffror. Det finns många sätt att göra detta, men jag gör det med denna kod:
För denna kod måste du dim tube(4) som byte och temp som byte. Siffrorna är numrerade från höger till vänster så att protokollet har numitron 1 och 2 och klockan 3 och 4.
Tube(2) = minuter / 10
Temp = Tube(2) * 10
Tube(1) = minuter - Temp
Tube(4) = timmar / 10
Temp = Tube(4) * 10
Tube(3) = timmar - Temp
Så om klockan är 09:24: Tube(2) = 24/10 = 2 (decimaler ignoreras)
Temp = 2 * 10 = 20
Tube(1) = 24-20 = 4
Tube(4) = 9/10 = 0
Temp = 0 * 10 = 0
Tube(3) = 9-0 = 9
Nu när vi har siffrorna, kan vi multiplex dem:
För denna kod måste du dim jag som byte och j som byte.
För I = 1 till 4
Temp = 7seg(tube(i))
Portb = Temp
J = JAG -1
Ställa in Portc.j
Waitms 5
Återställa Portc.j
Nästa
Denna kod väljer en av numitrons, konverterar dess motsvarande värde i 7 segment och gör det möjligt att tända upp genom att ange rätt PIN-koden av portc högt för 5ms. Numitrons är numrerade 1-4 och stiften 0 till 3, variabel j kommer att vara variabel jag dras av 1.
Nu sist men inte minst 7seg-funktionen:
Vi lägger till denna funtion i koden för att konvertera värdet av siffrorna i en 7 segment pinout för portb.
Först måste vi deklarera funktionen.
Deklarera funktionen 7seg (byval Q som Byte) som Byte
Sedan slutet av koden kommer vi lägga till koden för funktionen.
Funktion 7seg (byval Q som Byte) som Byte
Välj ärende Q
Fall 1:
7seg = & B01111100
Fall 2:
7seg = & B00010010
Fall 3:
7seg = & B00011000
Fall 4:
7seg = & B00101100
Fall 5:
7seg = & B00001001
Fall 6:
7seg = & B00000001
Fall 7:
7seg = & B01111000
Mål 8:
7seg = & B00000000
Mål 9:
7seg = & B00001000
Fall 0:
7seg = & B01000000
End Select
Slutet funktion
Viktigt här är att, som vi använde PNP transistorer, en 0 innebär att segmentet är aktiverad och en 1 att segmentet är avaktiverat. Om du koppla din munitrons olikt till portb, måste du ta reda på vilka bitar som behövs för varje segment.
I nästa steg ska vi titta på hjärnan hos vår grej: atmega48.