unsigned short i;
void main() {
Spi_Init(); // Standard configuration
PORTC &= 0xFD;
TRISC &= 0xFD; // Select max7219
Spi_Write(0xc); //Elige el registro shutdwon
Spi_Write(1); //Enciende el max7219
Delay_ms(10);
Spi_Write(9); //Elige el registro Decode_Mode
Spi_Write(0xFF); //Elige modo de decodificacion BCD
for (i = 1; i <= 8u; i++) {
PORTC &= 0xFD; // Select max7219
Spi_Write(i); // Send i to max7219 (digit place)
Spi_Write(8 - i); // Send i to max7219 (digit)
PORTC |= 2; // Deselect max7219
Delay_ms(200);
}
TRISB = 0;
PORTB = i;
}:? Supongo que no, el max7219 solo sirve para display de 7 segmentos. Por eso estaba pensando utilizar el Max6952 para realizar la interfaz con el display.
:( Me interesaria saber si la conexiones entre el PIC y el MAX estan correctas o hay algunas invertidas, como la de SDO y SDI.
:( Otra cosa que me interesa saber es si esta correcto el código, ya que tengo entendido que la funciones SPI de MikroC estan hechas para transmitir 8 bits, y el MAX esta hecho para recibir 16 bits. Es decir, ¿Para manejar este driver necesito implementar una nueva función de SPI o lo puedo hacer con las funciones propias de MikroC o CCS?
:-/ No me importa en cual de los 2 compiladores trabajen
A) El max7219 también sirve para generar una especie de matriz. Ya que tiene un modo de operación en el cual indicás que bit querés encender de cada dígito. Si bien se mira, esto es similar a decir que es una matriz de 8 x 8. 8 Leds por dígito x 8 dígitos.
CitarA) El max7219 también sirve para generar una especie de matriz. Ya que tiene un modo de operación en el cual indicás que bit querés encender de cada dígito. Si bien se mira, esto es similar a decir que es una matriz de 8 x 8. 8 Leds por dígito x 8 dígitos.
Es lo que quise decir...
A) El max7219 también sirve para generar una especie de matriz. Ya que tiene un modo de operación en el cual indicás que bit querés encender de cada dígito. Si bien se mira, esto es similar a decir que es una matriz de 8 x 8. 8 Leds por dígito x 8 dígitos.
#ifndef MAX7219_CS //Si no se ha definido el Pin para el CS del driver
#define MAX7219_CS PORTC.F0 //Definirle el pin 0 del PORTC
#endif
#ifndef MAX7219_CS_Tris //Si no se ha definido el Pin para el CS del driver
#define MAX7219_CS_Tris TRISC.F0 //Definirle el pin 0 del PORTC
#endif
#define BCD_0to7 0xFF
#define BCD_0 1
#define BCD_0to3 0xF
#define No_BCD 0
void MAX7219_Send(short Address,short Data){
MAX7219_CS=0; //Habilitar el Driver
Spi_Write(Address); //Enviar Direccion del registro
Spi_Write(Data); //Enviar el Dato del registro
MAX7219_CS=1; //Desabilitar el CS del Driver
}
void MAX7219_Init(short DecodeMode,short ScanLimit, short Intensity){
MAX7219_CS_Tris = 0; //Poner Pin de CS como Salida
MAX7219_CS=1; //Poner Pin CS a 1
MAX7219_Send(9,DecodeMode);
MAX7219_Send(0xB,ScanLimit);
MAX7219_Send(0xC,1); //Registro "ShutDown", Enciendo los display
MAX7219_Send(0xA,Intensity);
}
void MAX7219_Out(short digit_pos,const char *cadena){
do{
if(!*cadena)return; //Si el caracter a enviar es 0 retornar
if(digit_pos>8) return; //Si la posicion del digito es mayor a 8 retornar
MAX7219_Send(digit_pos++,*cadena++); //Enviar posicion del digito y caracter y luego incrementar
}while(1);
}unsigned short i;
#include "MAX7219.c"
void main() {
//Inicializar el Modulo SPI
Spi_Init_Advanced(MASTER_OSC_DIV4,DATA_SAMPLE_MIDDLE,CLK_IDLE_LOW,HIGH_2_LOW);
MAX7219_Init(BCD_0to7,7,16); //Iniciar el Driver con: DecodeMode = dígitos de 0 a 7
//ScanLimit = Digitos 0 al 7
//Intensity = 16
MAX7219_Out(1,"12345678");
Delay_ms(200);
MAX7219_Out(1,"9");
}