dimanche 27 février 2011

Journal lumineux matricielle

Bonjour tout le monde,
J'ai toujours aimé un journal lumineux dans ma petite chambre.
Pour cela j'ai commencé à travailler au sein de mon club mécatronique sur ce projet.
Liste de composants:
64 leds                                               pour chaque module
un registre à décalage 74HC595          ,,                  ,,
une interface de puissance ULN2803   ,,                 ,,
pic 16F877
Principe de fonctionnement:
le microcontreleur 16F877 fait partie de la carte de commande il envoie les données à afficher via le protocole série spi vers le pin DS du registre à décalage, si les données en entrés sont supérieurs à 8 bit le registre fait décaler les données via le pin Q7' qui transmit les données vers le pin DS de registre suivant.
la scrutation des lignes du journal lumineux est active en permanence.
Code en mikroc:

const unsigned short ASCII[] = {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x0F, 0x30, 0xC0, 0xC0, 0x30, 0x0F, 0x00,  // Code pour char V
        0x00, 0xFF, 0x89, 0x89, 0x89, 0x81, 0x81, 0x00,  // Code pour char E
        0x00, 0xFF, 0x03, 0x0C, 0x30, 0xC0, 0xFF, 0x00,  // Code pour char N
        0x00, 0x00, 0x01, 0x01, 0xFF, 0x01, 0x01, 0x00,  // Code pour char T
        0x00, 0xFF, 0x89, 0x89, 0x89, 0x81, 0x81, 0x00,  // Code pour char E
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x01, 0x01, 0xFF, 0x01, 0x01, 0x00,  // Code pour char T
        0x00, 0x00, 0x81, 0xFF, 0x81, 0x00, 0x00, 0x00,  // Code pour char I
        0x00, 0x7E, 0x81, 0x81, 0x81, 0x81, 0x42, 0x00,  // Code pour char C
        0x00, 0xFF, 0x08, 0x18, 0x24, 0x42, 0x81, 0x00,  // Code pour char K
        0x00, 0xFF, 0x89, 0x89, 0x89, 0x81, 0x81, 0x00,  // Code pour char E
        0x00, 0x00, 0x01, 0x01, 0xFF, 0x01, 0x01, 0x00,  // Code pour char T
        0x00, 0x46, 0x89, 0x89, 0x89, 0x89, 0x72, 0x00,  // Code pour char S
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0xFF, 0x02, 0x0C, 0x0C, 0x02, 0xFF, 0x00,  // Code pour char M
        0x00, 0xE0, 0x1C, 0x13, 0x13, 0x1C, 0xE0, 0x00,  // Code pour char A
        0x00, 0x46, 0x89, 0x89, 0x89, 0x89, 0x72, 0x00,  // Code pour char S
        0x00, 0x7E, 0x81, 0x81, 0x81, 0x81, 0x42, 0x00,  // Code pour char C
        0x00, 0x7E, 0x81, 0x81, 0x81, 0x81, 0x7E, 0x00,  // Code pour char O
        0x00, 0x00, 0x01, 0x01, 0xFF, 0x01, 0x01, 0x00,  // Code pour char T
        0x00, 0x00, 0x01, 0x01, 0xFF, 0x01, 0x01, 0x00,  // Code pour char T
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // code por espace
  };

unsigned char index[8]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
unsigned char i=0,j=0,t=0;
 void balayage(){
      for(t=0;t<300;t++){
       for(i=0;i<8;i++){
         portb=~index[i];
         spi1_write(ASCII[t+i]);
         spi1_write(ASCII[t+i+8]);
         spi1_write(ASCII[t+i+16]);
         spi1_write(ASCII[t+i+32]);
         spi1_write(ASCII[t+i+40]);
         spi1_write(ASCII[t+i+48]);
         spi1_write(ASCII[t+i+56]);
         portc.RC6=0;
         portc.RC6=1;
         delay_us(8000);
       }
      }
 }
 }
void main() {
 portb=0X00;
 trisb=0X00;
 portc=0X00;
 trisc=0X00;
 spi1_init();
     while(1){
             balayage();
     }
}
Simulation sur isis