Enkel användare justerbara DIY Nixie klocka (4 / 25 steg)
Steg 4: koden
Koden jag använde i denna klocka version tas från den öppna källkod materialet tillgängligt på Arduinix hemsida, och jag verkligen föreslår att du försöker hitta Brad Lewis "Lättja ugnen" imponerande projekt (han är en instructables medlem också).
Jag ändrade koden du vill använda endast en nixie istället för två, eftersom jag inte behöver köra mer än 6 siffror, och jag föredrar att spara drivrutiner. Det är en parameter som du kan ändra om du har problem med din visar, det är förseningen, men 2 ms fungerar bra för mig. Du kan prova 3 eller 4 ms men mer kommer flimrar siffrorna, eftersom programvaran har att gå igenom alla siffror innan du tänder en siffra igen.
Arduinix 6 lampa - också stöder timme och Min. tiden uppsättning. / / Denna kod körs en sex lampa setup och visar en prototyp clock setup. Obs: förseningen är setup för IN-17 nixie lökar. / / ursprungliga koden av Jeremy Howa / / www.robotpirate.com / / www.arduinix.com / / 2008-2009 / / kod uppdaterad av Andrea Biffi www.andreabiffi.com att arbeta med endast en SN74141 / / / / senaste Redigera Nov 2013 / / / / SN74141: sant tabell //D C B en # //L,L,L,L 0 //L,L,L,H 1 //L,L,H,L 2 //L,L,H,H 3 //L,H,L,L 4 //L,H,L,H 5 //L , H, H, L 6 //L,H,H,H 7 //H,L,L,L 8 //H,L,L,H 9 #define DEBUG_ON falskt / / SN74141 int ledPin_0_a = 2; int ledPin_0_b = 3; int ledPin_0_c = 4; int ledPin_0_d = 5; anod stift int ledPin_a_1 = 8; int ledPin_a_2 = 9; int ledPin_a_3 = 10; int ledPin_a_4 = 11; int ledPin_a_5 = 12; int ledPin_a_6 = 13. void setup() {pinMode (ledPin_0_a, produktionen); pinMode (ledPin_0_b, produktionen); pinMode (ledPin_0_c, produktionen), pinMode (ledPin_0_d, produktionen); pinMode (ledPin_a_1, produktionen); pinMode (ledPin_a_2, produktionen); pinMode (ledPin_a_3, produktionen); pinMode (ledPin_a_4, produktionen); pinMode (ledPin_a_5, produktionen); pinMode (ledPin_a_6, produktionen); / / OBS: / / grundstötning på stift analog0 och analog ingång 1 vilja ange timmar och minuter. pinMode (A0 INDATA); Ange den virtuella pin analog0 (pin 0 på de analoga ingångarna) digitalWrite (A0, hög); Ange pin analog ingång 0 som en dra upp motstånd. pinMode (A1, indata); uppsättning virtuella pin analog ingång 1 (pin 1 på de analoga ingångarna) digitalWrite (A1, hög); Ange pin analog ingång 1 som en dra upp motstånd. om (DEBUG_ON) {Serial.begin(9600);}} / / / / DisplayNumberSet / / Använd: passerar anod nummer och nummer för lampa, denna funktion / / slår upp sanningen bordlägger och öppnar den korrekta outs från arduino / / att tända de nummer som ges till denna funciton. På en 6 nixie glödlampa inställning. / / / void DisplayNumberSet (int anod, int num1) {int anodPin; int a, b, c, d; / / ställa in standardvärden. en = 0; b = 0, c = 0; d = 0; / / kommer att visa en noll. anodPin = ledPin_a_1; / / standard på första anod. / / välja vilken anod till brand. växel (anod) {fall 0: anodPin = ledPin_a_1, paus, fall 1: anodPin = ledPin_a_2, paus, fall 2: anodPin = ledPin_a_3, paus, fall 3 : anodPin = ledPin_a_4; bryta; fall 4: anodPin = ledPin_a_5; bryta; fall 5: anodPin = ledPin_a_6; bryta; } / / Ladda den a, b, c, d att skicka till växeln SN74141 IC (1) (num1) {fall 0: en = 0; b = 0; c = 0; d = 0, paus, fall 1: en = 1; b = 0; c = 0; d = 0, paus, fall 2: en = 0; b = 1, c = 0; d = 0, paus, fall 3: en = 1; b = 1; c = 0; d = 0, paus, fall 4 : en = 0; b = 0; c = 1; d = 0; semester. fall 5: en = 1, b = 0; c = 1; d = 0; semester. mål 6: en = 0; b = 1, c = 1; d = 0; semester. fall 7: en = 1, b = 1, c = 1; d = 0; semester. mål 8: en = 0; b = 0; c = 0, d = 1; semester. mål 9: en = 1; b = 0; c = 0, d = 1; semester. } / / Skriva ut stiften. digitalWrite (ledPin_0_d, d); digitalWrite (ledPin_0_c, c); digitalWrite (ledPin_0_b, b); digitalWrite(ledPin_0_a, a); Aktivera denna anod. digitalWrite (anodPin, hög); Dröjsmål / / Obs: med skillnaden i Nixie lampor du kan behöva ändra / / detta fördröjning att ställa in uppdateringen hastigheten på lökarna. Om du / / vänta inte länge nog glödlampan blir dunkel eller inte tänds alls / / du vill ställa in denna försening bara rätt så att du har / / trevlig ljus produktion ännu tillräckligt snabb så att du kan multiplex med / / mer lökar (2ms är standard). Delay(2); Stäng av denna anod. digitalWrite (anodPin, låg); } / / / / / / / DisplayNumberString / / Använd: passerar en matris som är 6 elements länge kommer visa tal / / på en 6 nixie lampa setup. / / / void DisplayNumberString (int * array) {/ / bank 1 (glödlampa 1) DisplayNumberSet(0,array[0]); / / bank 2 (lampa 2) DisplayNumberSet(1,array[1]); / / bank 3 (lampa 3) DisplayNumberSet(2,array[2]); / / bank 4 (bulb 4) DisplayNumberSet(3,array[3]); / / bank 5 (lampa 5) DisplayNumberSet(4,array[4]); / / bank 6 (lampa 6) DisplayNumberSet(5,array[5]);} / / definierar långa minuter = 60. 60 sekunder i en Min. långa timmar = 60 * minuter; 60 min i en timme. långa dagar = 24 * timmar. 24 timmar i dygnet. > Obs: ändra 24 till en 12 icke militära tid. långa runTime = 0; Tiden från när vi började. standardtiden anger. klockan börjar klockan 12:59:00 / / Obs: börjar vi sekunder på 0 så vi inte behöver en klocka som / / de värden som du ser här skulle vara vad du ändra / / om du lagt till en ställa in klockan ingångar till styrelsen. lång clockHourSet = 12; lång clockMinSet = 59. int HourButtonPressed = false; int MinButtonPressed = false; / / / / / / / void loop() {/ / få millisekunder. runTime = millis(); / / få tid i sekunder. lång tid = (runTime) / 1000; ändra detta värde till fart upp eller sakta ner klockan, mindre värde som 10, 1 eller 100 för felsökning int hourInput = digitalRead(14); int minInput = digitalRead(15); om (DEBUG_ON) Serial.println (hourInput); om (hourInput == 0) HourButtonPressed = sant; om (minInput == 0) MinButtonPressed = sant; om (HourButtonPressed == true & & hourInput == 1) {clockHourSet ++; HourButtonPressed = false; } om (MinButtonPressed == true & & minInput == 1) {clockMinSet ++; MinButtonPressed = false; } / / Ställ in tiden baserat på offset... lång hbump = 60 * 60 * clockHourSet; lång mbump = 60 * clockMinSet; tid + = mbump + hbump; Konverteringstid till dagar, timmar, minuter, sekunder långa dagar = tid / dagar; tid-= dagar * dagar. långa timmar = tid / timmar; -= timmar * timmar. långa minuter = tid / min; tid-= minuter * minuter; långa sekunder = tid; Få de höga och låga värdena för timmar, minuter, sekunder. int lowerHours = timmar % 10. int upperHours = timmar - lowerHours; int lowerMins = minuter % 10. int upperMins = minuter - lowerMins; int lowerSeconds = sekunder % 10. int upperSeconds = sekunder - lowerSeconds; om (upperSeconds > = 10) upperSeconds = upperSeconds / 10; om (upperMins > = 10) upperMins = upperMins / 10; om (upperHours > = 10) upperHours = upperHours / 10; Fyll i antal matrisen används för att visa på rören. int NumberArray [6] = {0,0,0,0,0,0}. NumberArray [0] = upperHours; NumberArray [1] = lowerHours; NumberArray [2] = upperMins; NumberArray [3] = lowerMins; NumberArray [4] = upperSeconds; NumberArray [5] = lowerSeconds; Display. DisplayNumberString (NumberArray); }
För att bränna koden till Atmega IC använde jag Arduino. Bara ta bort den Arduino chipet, infoga din Atmega8 (eller bättre), ändra styrelsen och seriell port under Verktyg-menyn, klistra in min kod och ladda upp den. Ta ut IC och infoga i uttaget på klockan styrelsen. Observera att Atmega KI kunde behöver bränna med bootloader innan du överför koden, kan du hitta instruktioner på denna sida. Jag använde en USBtinyISP programmerare, men du kan köpa IC redan bränt med bootloader.