Saludos a la gran comunidad en español.
El siguiente código que presento, del uso de un MAX7219, la manera mas fácil que halle o que a mi parecer es mas fácil de comprender al momento de encender un dígito con un valor determinado , usando las funciones del shiftOut.
Algo fácil de entender para un novato como yo, "output(0x05, 0x07)" primer dato (0x05)hace referencia al dígito en el cual se va a encender, (0x07) segundo dato hace referencia al valor en entero que mostrara el 7 segmentos.
Aquí la gran pregunta como enciendo el punto decimal para el/los dígitos que yo decida?
Me ha quedado claro q usando la librería---> #include "LedControl.h" declarando los pines y el numero de dispositivos usados--->LedControl dispositivo = LedControl(3,5,4,1); y una declaración ---> dispositivo.setDigit (0, 7, 1, false); ---< siendo 0, "shutdown" 7,"#dígito por izq o der" 1,"numero a mostrar en el 7 seg" y false, "punto decimal apagado" "true para encenderlo"..
No quiero usar esta opción de la librería "LedControl.h". Sera posible con la opción que vengo manejando?
#define MAX7219_DIN 5
#define MAX7219_CS 6
#define MAX7219_CLK 7
void initialise(){
digitalWrite(MAX7219_CS, HIGH);
pinMode(MAX7219_DIN, OUTPUT);
pinMode(MAX7219_CS, OUTPUT);
pinMode(MAX7219_CLK, OUTPUT);
}
void output(byte address, byte data){
digitalWrite(MAX7219_CS, LOW);
shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, address);
shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, data);
digitalWrite(MAX7219_CS, HIGH);
}
void setup() {
initialise();
output(0x0f, 0x00); //display test register - test mode off
output(0x0c, 0x01); //shutdown register - normal operation
output(0x0b, 0x04); //scan limit register - display digits 0 thru 7
output(0x0a, 0x07); //intensity register - max brightness
output(0x09, 0xff); //decode mode register - CodeB decode all digits
}
void loop() {
unsigned long over, elapsed;
int um,ds,us,ms;
elapsed = millis();
over = elapsed % 3600000;
um = (over / 60000)%10;
over = over % 60000;
us = (over / 1000)%10;
ds = (over / 10000)%10;
ms = (over / 100) % 10;
//output(0x08, 0x0c); //digit 7 (leftmost digit) data
//output(0x07, 0x0b);
//output(0x06, 0x0d);
output(0x05, 0x00);
output(0x04, ms);
output(0x03, us);
output(0x02, ds);
output(0x01, um); //digit 0 (rightmost digit) data
delay(10);
}
//Posterior a este inconveniente debo manejar los segmentos con leds a 12V 600mA por dígito en cátodo común, total 5 digitos.
solucion 1.-
"bastantes transistores, mas espacio, mas conexiones, mas dinero, pero es posible"
solucion 2.-
"Ahorra espacio conexiones, dinero, En mi país no encuentro todos los integrados"
solucoin 3.-
ustedes dirán ![]()