// Test afficheur a DELs avec Pinguino #define ht1632_cs 0 #define ht1632_sclk 1 #define ht1632_sda 2 void setup() { pinMode(ht1632_cs,OUTPUT); pinMode(ht1632_sda,OUTPUT); pinMode(ht1632_sclk,OUTPUT); } void init_command(unsigned int command_data) { unsigned char i; unsigned int j; command_data=command_data&0x0fff; command_data=command_data<<4; digitalWrite(ht1632_cs,1); digitalWrite(ht1632_cs,0); for(i=0;i<12;i++) { digitalWrite(ht1632_sclk,0); j=command_data&0x8000; command_data=command_data<<1; j=j>>15; digitalWrite(ht1632_sda,j); digitalWrite(ht1632_sclk,1); } digitalWrite(ht1632_cs,1); } void ht1632_write_address_data(unsigned int command_data) { unsigned char i; unsigned int j; command_data=command_data&0x3fff; command_data=command_data<<2; digitalWrite(ht1632_cs,1); digitalWrite(ht1632_cs,0); for(i=0;i<14;i++) { digitalWrite(ht1632_sclk,0); j=command_data&0x8000; command_data=command_data<<1; j=j>>15; digitalWrite(ht1632_sda,j); digitalWrite(ht1632_sclk,1); } digitalWrite(ht1632_sda,1); digitalWrite(ht1632_cs,1); } void ht1632_init(void) { // D'apres doc officiel : // sequence init: SYS DIS,COMMONS OPTION,MASTER MODE,SYS EN,LED ON, PWM DUTY init_command(0b100000000000); // SYS DIS init_command(0b100001010000); // COMMONS OPTION : P-MOS open drain and 8 common init_command(0b100000101000); // MASTER MODE init_command(0b100000000010); // SYS EN init_command(0b100000000110); // LED ON init_command(0b100101011110); // PWM DUTY : 16/16 } void fade(unsigned char nb_fade) { unsigned int pwmdel=15; unsigned char i; for (i=0;i0;pwmdel--) { init_command(0b100101000000|(pwmdel<<1)); delay(30); } for (pwmdel=0;pwmdel<16;pwmdel++) { init_command(0b100101000000|(pwmdel<<1)); delay(30); } } } void loop(void) { unsigned int donnee,cpt,del,delai; signed char sens; cpt = 0; del = 15; sens = 1; ht1632_init(); while(1) { donnee = 0b10100000000000|(cpt<<4)|del; ht1632_write_address_data(donnee); // Ecriture : 101 à l'adresse 'cpt' de la donnée 'del' cpt+=sens; if (cpt==64) { sens=-1; del=0; cpt--; fade(3); } if (cpt==0) { sens=+1; del=15; } for (delai=0;delai<15000;delai++); } }