Paso 4: el código
El código que usé en esta versión del reloj se toma desde el material de código abierto disponible en sitio Web Arduinix , y realmente os recomiendo que para ir a buscar Brad Lewis impresionantes proyectos de "Horno de la pereza" (él es un miembro de instructables también).
He modificado el código 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. Hay un parámetro que puede cambiar si usted tiene problema con las pantallas, es la demora, pero ms 2 funciona bien para mí. Usted puede intentar 3 o 4 ms pero más oscilará los dígitos, ya que el software tiene que pasar por todos los dígitos antes de encender otra vez un dígito.
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); }
Para grabar el código en el IC de Atmega usé Arduino. Sólo Retire el chip de Arduino, inserte el Atmega8 (o mejor), cambiar Junta y puerto serie bajo el menú "herramientas", pegue mi código y subirlo. Saca el IC e insertar en el zócalo en la placa del reloj. Por favor note que su IC Atmega podría necesitar ser grabar con bootloader antes de subir el código, usted puede encontrar en esta página. Utilicé un programador USBtinyISP, pero usted puede comprar IC ya quemado con el gestor de arranque.