Autor Tema: DRIVER PARA MAX7221-7219  (Leído 2515 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pachopic

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 207
DRIVER PARA MAX7221-7219
« en: 06 de Marzo de 2005, 21:34:00 »
HOLA A TODOS:
HE AQUI UN PROGRAMA QUE PERMITE CONTROLAR UN DRIVER  SERIAL MAX7221-7219 PARA DISPLAYS DE 7SEGMENTOS (HASTA 8DIGITOS)  CON PIC:Sonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa Gigante
PERMITE EVITAR EL OVERHEAD DEL SOFWARE, POR EJEMPLO PODRIA USARSE
PARA MOSTRAR LOS VALORES DE VOLTAJE POSITIVO Y NEGATIVO DE UNA BIPOLAR AL MISMO TIEMPO....ETC
Codigo:


////////////////////////////////////////////////////////////////////////////////
//                   DRIVER  PARA MAX7221 - MAX7219                           //
//          DRIVER PARA DISPLAY DE 7 SEGMENTOS 8 DIGITOS CATCOM               //
//                         CON INTERFAZ  SERIAL                               //
//                ANTES DE ENVIAR DATOS AL DISPLAY:                           //
//                #include<MAX7221.h>                                         //
//                display_init()  (inicializa display)                        //                                                           //
//                write_display(digito,dato) ,muestra el dato en digito       //                                                                       //
//                DIGITO: de 0 a 8                                            //
//                FORMATO:                                                    //
//                D15--D12 D11---D8 D7-------DO  (16BITS)                     //
//                X      X  digito  msb DATO lsb                              //
//                                                                            //
//                                                                            //
// PCW  V.3.221  fjr07@yahoo.es ing electrica U.de.A col.       26/2/2005     //
////////////////////////////////////////////////////////////////////////////////
#ifndef L_SCK              // PINES A EMPLEAR
#define L_SC   PIN_B1      // PIN LOAD (habilita escritura de datos)
#define L_SCK  PIN_B2      // PIN DE RELOJ
#define L_DIN  PIN_B3      // PIN SALIDA DE DATOS
#endif

void write_LED_byte(BYTE cmd) {   // rutina que envia serialmente los bytes
   BYTE i;                        // dezplazando este hacia la izquierda bit a bit
   for(i=0;i<=7;++i) {            // por cada dezplazamiento un pulso de reloj

      output_bit(L_DIN, shift_left(&cmd,1,0) ); // envia los datos bit a bit
      output_high(L_SCK);                       //  salida sck en alto
      output_low(L_SCK);                        // luego retorna a estado bajo
   }                                            // (pulso de reloj sck)
}
// ******subrutina que  controla el max 7221 envia dato a mostrar en digito****
void write_led(BYTE cmd, BYTE data) {
   output_low(L_SC);     // habilitamos escritura ( pin load en bajo)
   write_LED_byte(cmd);  // enviamos primer byte (digito y control)
   write_LED_byte(data); // enviamos segundo byte de datos
   output_high(L_SC);    // terminamos escritura (pin load en alto)
}
//****** subrutina que inicializa el max7221   para luego poder enviar*********
                      // datos al display
void display_init()
{
 write_led(0x0b,0x07); // modo scan limit muestre (5 Digitos) num de digitos de 0-7
 write_led(0x0c,0x01); // limpie displays (modo Shutdown)
 write_led(0x09,0xff); // probar displays (modo Display test)
 write_led(0x0a,0x00); // modo (control de intensidad )
                       // intensidad igual a (31/32) de la corriente pico (Iset)
 }                     // (para mas detalles de control ver datasheets)
                       // la corriente de los display se regula con
                       // solo una resistencia externa (Iset)



Y AQUI UN PROGRAMA DE EJEMPLO:
Codigo:

/////////////////////////////////////////////////////////////////////////
////                                                                 ////
////                                                                 ////
////                                                                 ////
////    manejo de un driver serial  para display MAX7221-7219        ////
////                     con pic16f84                                ////
////                    fjrd07@yahoo.es                              ////
////                                                                 ////
////                                                                 ////
////  PCW C COMPILER  VER 3.221                            26/2/2005 ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////

#include <16F84A.h>              // DISPOSITIVO A PROGRAMAR
#include <MAX7221.h>             // DRIVER MAX7221
/////////////////declaracion de variables y configuracion///////////////////////
#use delay(clock=4000000)        // XTAL OSCILADOR EXRTERNO 4MHZ
#fuses HS,NOWDT,NOPROTECT        // FUSIBLES DE CONFIGURACION
#byte porta=5                    // DIRECION DE MEMORIA DE PORTB
#byte portb=6                    // DIRECION DE MEMORIA DE PORTB
signed int conta,digit;
set_tris_b(0);               // puertob como salidas
set_tris_a(0);               // puertoa como salidas
/////////////////////////////// PROGRAMA PRINCIPAL//////////////////////////////
void main(void)
  {
   digit=1;                     // inicializo variables
   conta=9;
   display_init();              // inicializo max 7221-7219 (ver archivo .h y
                                // datasheets) otros modos de operacion
   output_high(L_SC);          // hacer el pin SC del max77219 alto
   output_low(L_SCK);          // hacer elpin de reloj clk del max7216 bajo
                                // para esta conf funciona en modo scan limit
//**************ENVIA DATOS AL DISPLAY DE 7segx8dig**************************
  while (true)                  // bucle infinito
  {
    write_LED(digit,conta);     //digito a escribir con el dato en max7219
    delay_ms(1000);              //espera un aprox 1seg
    digit=++digit;
    conta=--conta;               //decremento contador
    if(conta<0) conta=9;        // muestro los digitos del 9 a 0 de der a izqu
    if(digit==9) digit=1;       // en los 8  digitos
    output_high(PIN_A0);        // esto enciende y apaga un led en porta.0
    delay_ms(500);
    output_low(PIN_A0);
    delay_ms(500);

         }                       // vuelve a comenzar el bucle
  }



FALTARIA SOLO SUBIR LA SIMULACION EN PROTEUS, PERO NO HAY ESPACIO. SI ALGUIEN LA REQUIERE LA ENVIARE POR LOS MSG  PRIVADOS

SUERTE...

suerte



 

anything