Hallo zusammen , das ist mein erster Post hier.
Zu meine Problem ich hab hier Zuhaus eine LED-Anzeige liegen für die ich ein Steuerprogramm geschrieben habe.
Wenn ich Zeilen einzeln anspreche funktioniert das auch so wie es soll , nur sobald ich alle Zeilen anspreche "flackert" jede zweite Zeile.
Vieleicht sehr ihr da in meinem Programmcode ihrgend etwas was man anders machen sollte.
main.c
led.cCode:int main(void) { init_display(); printf("Programm gestartet !\n"); uint8_t text[7][56] = {{0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ,{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ,{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ,{0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ,{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ,{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ,{0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} }; while(1) { uint8_t i; for(i=0;i<7;i++) { anzeigen(text[i],i); } } return 0; }
Es funktioniert alles soweit, es geht halt nur um "logischefehler" die ich so nicht sehe.Code:/* 7 Zeilen 8 Spalten 14 Segmente: 0| x x x x x x x x Z 1| x x x x x x x x e 2| x x x x x x x x i 3| x x x x x x x x l 4| x x x x x x x x e 5| x x x x x x x x n 6| x x x x x x x x ------------------- | 0 1 2 3 4 5 6 7 . . . Spalten PORTA PA0 Clock PA1 Daten PA2 Enable Zeilen PA3-PA5 Binär Zeile 1-7 */ #include <io.h> #include <stdlib.h> #include <stdio.h> #include <util/delay.h> #define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT)) #define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT)) #define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT)) #define TOGGLEBIT(ADDRESS, BIT) ((ADDRESS) ^= (1 << (BIT))) #define MAX_ZEICHEN 56 #define CLOCK PA0 #define DATEN PA1 #define ENABLE PA2 #define ZEILE2_0 PA3 #define ZEILE2_1 PA4 #define ZEILE2_2 PA5 void init_display() { // Pin 0 bis 5 als Ausgangdefinieren DDRA = (1<<DDA0) | (1<<DDA1) | (1<<DDA2) | (1<<DDA3) | (1<<DDA4) | (1<<DDA5); CLEARBIT(PORTA,ENABLE);// Enable auf 0 setzen -> Zeilen deaktiviert. CLEARBIT(PORTA,CLOCK); // Clock auf 0 CLEARBIT(PORTA,DATEN); // Daten auf 0 SETBIT(PORTA,ZEILE2_0); //1 CLEARBIT(PORTA,ZEILE2_1); //0 Zeile 0 ausgewählt CLEARBIT(PORTA,ZEILE2_2); //0 } void select_zeile(uint8_t zeile) { if(zeile == 0) { SETBIT(PORTA,ZEILE2_0); //1 CLEARBIT(PORTA,ZEILE2_1); //0 Zeile 0 ausgewählt CLEARBIT(PORTA,ZEILE2_2); //0 } if(zeile == 1) { CLEARBIT(PORTA,ZEILE2_0); //0 SETBIT(PORTA,ZEILE2_1); //1 Zeile 1 ausgewählt CLEARBIT(PORTA,ZEILE2_2); //0 } if(zeile == 2) { SETBIT(PORTA,ZEILE2_0); //1 SETBIT(PORTA,ZEILE2_1); //1 Zeile 2 ausgewählt CLEARBIT(PORTA,ZEILE2_2); //0 } if(zeile == 3) { CLEARBIT(PORTA,ZEILE2_0); //0 CLEARBIT(PORTA,ZEILE2_1); //0 Zeile 3 ausgewählt SETBIT(PORTA,ZEILE2_2); //1 } if(zeile == 4) { SETBIT(PORTA,ZEILE2_0); //1 CLEARBIT(PORTA,ZEILE2_1); //0 Zeile 4 ausgewählt SETBIT(PORTA,ZEILE2_2); //1 } if(zeile == 5) { CLEARBIT(PORTA,ZEILE2_0);//0 SETBIT(PORTA,ZEILE2_1); //1 Zeile 5 ausgewählt SETBIT(PORTA,ZEILE2_2); //1 } if(zeile == 6) { SETBIT(PORTA,ZEILE2_0); //1 SETBIT(PORTA,ZEILE2_1); //1 Zeile 5 ausgewählt SETBIT(PORTA,ZEILE2_2); //1 } } void anzeigen(uint8_t data[], uint8_t zeile) { uint8_t k; //Daten in Register laden for (k = MAX_ZEICHEN; k!=0; k--) { if (data[k] !=0) //Welchen Status hat das nächste Bit { SETBIT(PORTA,DATEN); //PORT high, falls Bit == 1; } else { CLEARBIT(PORTA,DATEN); //PORT low, sonst } SETBIT(PORTA,CLOCK); //CLOCK AN, Pegel übernehmen _delay_us(20); CLEARBIT(PORTA,CLOCK); //CLOCK AUS } //Zeile wählen und anzeigen select_zeile(zeile); //Zeile wählen _delay_ms (20); SETBIT(PORTA,ENABLE); //Gewählte Zeile einschalten _delay_ms (20); CLEARBIT(PORTA,ENABLE); //Gewählte Zeile ausschalten }
Wäre nett wenn sich das mal jemand mit mehr ahnung als ich ansehen könnte.
Lesezeichen