www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Laufzeitproplem: LCD vs. UART


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit Leute,
erstmal meine Systemvoraussetzungen: STK500 ATMega16 bzw. ATMega8515,
CodeVision C-Compiler.
Folgendes Problem:
Ich habe eine Menueführung für ein LC-Display erstellt. Nebenher (per
UART-Interrupt) sollen Werte über die uart eingelesen werden und dann
auf dem Display angezeigt werden.
Das jeweilige Menu, welches angezeigt werden soll wird zyklisch durch
eine Endlosschleife in main aufgerufen und mit delay verzögert.
Die Dateneingabe bzw. Verarbeitung erfolgt durch den UART-Interrupt.
Das ganze habe ich in verkürzter Form am Schluss drangehängt. Das
Problem ist nun, dass die (empfangenen) Daten nur richtig verarbeitet
werden, wenn ich mich mit der menüführung im Hauptmenue befinde.
Wechsle ich in ein Untermenü kommen zum Teil die Daten nicht mehr an.
P.s.: asm("sei") globale Interrupts sind jederzeit erlaubt

interrupt [USART_RXC] void usart_rx_isr(void)
{
   auswerten();
}

main()
{
   if(auswahl==0)hauptmenu();
   else if(auswahl==1)akkux();
   else if(auswahl==2 && auswahl2==0)funkt();
   delay_ms(300);
}

Nun muss man dazu sagen, dass im Menüpunkt hauptmenu() am wenigsten auf
dem LCD angezeigt wird bzw. auch am wenigsten C-Code steckt. Nur in
diesem Menuepunkt funktioniert der uart-int reibungslos.
Befindet man sich in einem der anderen Menuepunkte (auf denen
wesentlich mehr angezeigt wird bzw. c-code verabeitet werden muss)
funktioniert die Datenverarbeitung über den uart-int nicht.
Zuerst hatte ich einen ATMega8515 am start, dann dachte ich es könnte
vielleicht an der Ram-Ausnutzung oder ähnliches liegen, so dass ich
einen ATmega16 einbaute, der ja doppelt so viel RAM hat. Das Problem
ist jedoch geblieben.
Wer von euch hat eine Ahnung an was dies liegen könnte. Bin für alles
und jeden Hinweis dankbar.
Gruß Christian

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im main fehlt die Hauptschleife !


Peter

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In einer ISR noch eine Funktion aufrufen ist nicht wirklich schön.
Dass die Hauptschleife felt, hat Peter ja schon angemerkt.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sers Leute,
das mit der Hauptschleife war ein Versehen, die ist natürlich im
richtigen Programm mit drin. Werde die Auswertung nun direkt im
Interrupt vornehmen.
Habe auch gerade einen ähnlichen Beitrag gefunden, der eigentlich
dasselbe Problem hat; nur dass er in Assembler schreibt. Ich schau mir
auch noch mal den Stackpointer an.
Wer sonst noch tipps hat, darf diese ruhig posten.
Gruß Christian

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.