Paso 7: el software
Como software he hecho algunas modificaciones en el código usado para mi primer reloj (tomado del material de código abierto disponible en sitio Web Arduinix ). Dicho código ha sido modificado para utilizar solamente un conductor del nixie en vez de dos, ya que no necesito para ejecutar más de 6 dígitos, y prefiero guardar drivers... He subido el código a la IC de Atmega8 utilizando una placa Arduino , es la manera más simple en mi opinión, pero aviso que probablemente necesitará grabar el bootloader en el IC nuevo para poder usarlo en Arduino, yo uso un programador USBtinyISP.
Nota: debo haber implementé el código con la función RTC. Lamentablemente han surgido algunos problemas y estoy teniendo algunos problemas en lo que es trabajar. Un botón debe aumentar las horas, escribir hora nueva en el módulo RTC, otro botón y misma cosa pero por minutos. Espero que algunos más cualificados que yo (no es difícil ser) me ayudará.
Arduinix 6 bulbo - también es compatible con horas y minutos tiempo de juego. / / Este código ejecuta una configuración de seis bombilla y muestra una configuración de reloj prototipo. Nota: la demora es setup para bulbos de nixie IN-17. / / original código por Jeremy Howa / / www.robotpirate.com / / www.arduinix.com / / 2008-2009 / / código modificado por Andrea Biffi www.andreabiffi.com trabajar con solo SN74141 / / / / última edición Nov de 2013 / / / / SN74141: tabla verdadera //D C B A # //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 falso DEBUG_ON / / SN74141 int ledPin_0_a = 2; int ledPin_0_b = 3; int ledPin_0_c = 4; int ledPin_0_d = 5; Anod pins 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, salida); pinMode (ledPin_0_b, salida); pinMode (ledPin_0_c, salida); pinMode (ledPin_0_d, salida); pinMode (ledPin_a_1, salida); pinMode (ledPin_a_2, salida); pinMode (ledPin_a_3, salida); pinMode (ledPin_a_4, salida); pinMode (ledPin_a_5, salida); pinMode (ledPin_a_6, salida); / / Nota: / / puesta a tierra en pernos analog0 y entrada analógica 1 romperá la hora y minutos pinMode (A0 ENTRADA); configurar el pin virtual analog0 digitalWrite (pin 0 en las entradas analógicas) (A0, alto); configurar pin 0 entrada analógica como un tirón para arriba del resistor. pinMode (A1, entrada); conjunto el virtual pin analógico de entrada 1 (pin 1 en las entradas analógicas) digitalWrite (A1, alto); configurar pin 1 entrada analógica como un tirón para arriba del resistor. Si (DEBUG_ON) {Serial.begin(9600);}} / / / / DisplayNumberSet / / uso: paso anod número y número para el bulbo, esta función / / busca la tabla de verdad y abre la configuración correcta de la arduino / / a la luz de los números dados para esta función. En una configuración de bombilla 6 nixie. / / void DisplayNumberSet (int anod, int num1) {int anodPin; int a, b, c, d el; / / set defaults. a = 0; b = 0; c = 0; d = 0; / / mostrará un cero. anodPin = ledPin_a_1; / por defecto en primer anod. / / seleccionar qué anod fuego. interruptor (anod) {caso 0: anodPin = ledPin_a_1; break; caso 1: anodPin = ledPin_a_2; break; caso 2: anodPin = ledPin_a_3; break; case 3 : anodPin = ledPin_a_4; rotura; caso 4: anodPin = ledPin_a_5; rotura; caso 5: anodPin = ledPin_a_6; rotura; } / / Cargar el a, b, c, d el para enviar al interruptor de SN74141 IC (1) (num1) {caso 0: un = 0; b = 0; c = 0; d = 0; break; caso 1: un = 1; b = 0; c = 0; d = 0; break; caso 2: un = 0; b = 1; c = 0; d = 0; break; case 3: un = 1; b = 1; c = 0; d = 0; break; caso 4 : un = 0; b = 0; c = 1; d = 0; break; caso 5: a = 1; b = 0; c = 1; d = 0; break; caso 6: a = 0; b = 1, c = 1; d = 0; break; caso 7: un = 1; b = 1, c = 1; d = 0; break; caso 8: a = 0; b = 0; c = 0, d = 1; break; caso 9: a = 1; b = 0; c = 0, d = 1; break; } / / Escribir en pines de salida. digitalWrite (ledPin_0_d, d); digitalWrite (ledPin_0_c, c); digitalWrite (ledPin_0_b, b); digitalWrite(ledPin_0_a, a); Encienda esta anod. digitalWrite (anodPin, HIGH); Retraso / / Nota: con la diferencia de lámparas Nixie tendrá que cambiar / este retardo para establecer la velocidad de actualización de los bulbos. Si usted / / no esperes mucho tiempo suficiente la bombilla será dim o no la luz en todo / / desea establecer este retraso apenas a la derecha para que tengas / / Niza brillante salida pero lo suficientemente rápido como para que usted puede conectar con / / más bulbos (2ms es estándar). Delay(2); Cierre este anod. digitalWrite (anodPin, bajo); } / / / / / / / DisplayNumberString / uso: pasar una matriz que está 6 elementos mostrará números / / en una configuración de bombilla 6 nixie. / / void DisplayNumberString (int * array) {/ / Banco 1 (foco 1) DisplayNumberSet(0,array[0]); / / Banco 2 (foco 2) DisplayNumberSet(1,array[1]); / Banco 3 (foco 3) DisplayNumberSet(2,array[2]); / Banco 4 (bombilla 4) DisplayNumberSet(3,array[3]); / Banco 5 (bombilla 5) DisplayNumberSet(4,array[4]); / / Banco 6 (bombilla 6) DisplayNumberSet(5,array[5]);} / / define largos minutos = 60; 60 segundos en un minuto largo horas = 60 * minutos; 60 minutos en una hora. largos días = 24 * horas; 24 horas en un día. > Nota: cambie el 24 a 12 por vez no militar. tiempo de pasada largo = 0; Tiempo de cuando empezamos. sistemas de tiempo predeterminado. reloj comenzará a las 12:59 / / Nota: empezamos segundos en el 0 por lo que no necesitamos un reloj set / / los valores que ves aquí lo que cambia / / si ha agregado un entradas de reloj a la Junta. clockHourSet largo = 12; clockMinSet largo = 59; int HourButtonPressed = false; int MinButtonPressed = false; / / / / / / / void loop() {/ / obtener milisegundos. tiempo de ejecución = millis(); / / tiempo en segundos. largo plazo = (tiempo de ejecución) / 1000; Cambie este valor a velocidad hacia arriba o retrasar el reloj, en menor número como 10, 1 o 100 para la depuración de int hourInput = digitalRead(14); int minInput = digitalRead(15); Si Serial.println (DEBUG_ON) (hourInput); Si (hourInput == 0) HourButtonPressed = true; Si (minInput == 0) MinButtonPressed = true; Si (HourButtonPressed == true & & hourInput == 1) {clockHourSet ++; HourButtonPressed = false; } Si (MinButtonPressed == true & & minInput == 1) {clockMinSet ++; MinButtonPressed = false; } / / Set basado en offset... hbump largo = 60 * 60 * clockHourSet; mbump largo = 60 * clockMinSet; tiempo += mbump + hbump; Tiempo de convertir a días, horas, minutos, segundos tiempo días = tiempo / días; días = * días; largas horas = tiempo / horas; hora = horas * horas; tiempo minutos = tiempo / minutos; tiempo = minutos * min; tiempo en segundos = tiempo; Obtener los valores de orden alto y bajo en horas, minutos, segundos. int lowerHours = horas % 10; int upperHours = horas - lowerHours; int lowerMins = minutos % 10; int upperMins = minutos - lowerMins; int lowerSeconds = segundos % 10; int upperSeconds = segundos - lowerSeconds; Si (upperSeconds > = 10) upperSeconds = upperSeconds / 10; Si (upperMins > = 10) upperMins = upperMins / 10; Si (upperHours > = 10) upperHours = upperHours / 10; Rellene la matriz número utilizada para mostrar en los tubos. 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; Pantalla. DisplayNumberString (NumberArray); }