www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik port-expander-matrix Bug ATmega8 hängt sich in der letzten Zeile auf


Autor: Slawa S. (slawa_s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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!!!

Autor: Slawa S. (slawa_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hätte den niemand eine Idee?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.