Folgendes Poroblem, was mich seit einiger Zeit beschäftig. Ich Steuere mit Portexpandern eine Matrix mit Tastern und LEDs an. (siehe p-e-m.gif Schaltplan) Aktiviere eine Spalte, frage dort die Taster ab oder setzte die LEDs auf ein oder aus. es tut sich alles in der main while(1) schleife main(){ int LEDs[8] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF}; while(1){ //------------ SPALTE 0 -------------// _delay_ms(LED_delay); pcf8574_set_outputs (PCF_row,0xFF);//alle LEDs aus! pcf8574_set_outputs (PCF_col,0b00000001);//Spaltenauswahl -> Spalte 0 Aktiv pcf8574_set_outputs (PCF_row,LEDs[0]);//Zeilen in Spalte 0 schreiben pins = pcf8574_get_inputs (PCF_row);//Auslesen der Zeilen pins &= 0x07;//Maskieren mit 00000111(brauche nur P0,P1,P2) //mit entprellung if (pins == 0b00000110){ if (!(TFLAG[0] & (1<<0))){//wenn Tasterflag nicht gesetzt LEDs[0] ^= 0b00001000;//LED toggeln TFLAG[0] |= (1<<0);//setze Tasterflag } } else { TFLAG[0] &= 0xFE; }//lösche Tasterflag if(pins == 0b00000101){ //Taster Zeile 1 gedrückt if (!(TFLAG[0] & (1<<1))){ LEDs[0] ^= 0b00010000;//LED toggeln TFLAG[0] |= (1<<1);//setze Tasterflag } } else { TFLAG[0] &= 0xFD; }//lösche Tasterflag //------------ SPALTE 1 -------------// genauso nur mit LEDs[1] //------------ SPALTE 2 -------------// usw nur mit LEDs[2] //------------ SPALTE 3 -------------// usw nur mit LEDs[3] //------------ SPALTE 4 -------------// usw nur mit LEDs[4] //------------ SPALTE 5 -------------// usw nur mit LEDs[5] //------------ SPALTE 6 -------------// usw nur mit LEDs[6] //------------ SPALTE 7 -------------// usw nur mit LEDs[7] //-----------------------------------// .... dann setze hier nach je nach Auswertung zb LEDs[5] |= 0b00100000; //unset oder LEDs[6] |= 0b01000000; //unset oder LEDs[7] &= 0b10111111; //set Das Problem ist jetzt, sobald ich in eins von den Feldern LEDs[0]...LEDs[7] eine 0 an erster stelle reinschreibe. also so LEDs[6] &= 0b01111111; //set oder so LEDs[1] &= 0b01111111; //set (damit will ich die LEDs in der letzten Zeile zum Leuchten bringen) und es später beim erneutem Durchlauf weiter an die Funktion gegeben wird die meine pcf expander ansteuert ... bleibt der ATmega8 hängen. } } Den Array habe ich oben in der main so deklariert int LEDs[8] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF}; und ich benutze die pcf8574.c (siehe oben) Kommischerweise stürzt das Programm nicht ab wenn ich in die pcf8574_set_outputs (PCF_row,0b01111111); reinschreibe. Die Funktion ist ja so deklariert void pcf8574_set_outputs (unsigned char address, unsigned char byte) ich habe auch schon die die LEDs[8] als unsigned char LEDs[8] deklariert, bringt aber nichts. Hätte jemand eine Idee woran es liegen könnte? Riecht sehr stark nach Typenunverträglichkeit nur habe ich schon alles ausprobiert. Es bringt einfach nichts. Es bleibt immer Hängen sobald ich in die LEDs[n] &= 0b01111111 eine 0 an erster Stelle reinschreibe. (erste Stelle ist bei mir letzte Zeile) In all den anderen Zeilen funktioniert es ja!!!
Hätte den niemand eine Idee?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.