mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer oder Interrupt oder beides?


Autor: Pascal Mielke (cyrax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich stehe gerade vor der Aufgabe, dass ich meinen Mega8515 mehrere 
Sachen gleichzeitig machen lassen möchte.

Momentan läuft eine Displayausgabe und der UART parallel. Nun soll er 
aber noch auf Inputs von Tastern warten und dann eventuell ein Menü 
aufrufen während der UART weiter läuft. Dann soll er eine Schleife 
durchlaufen in der der UART zig Datensätze verschickt. Das soll 
allerdings per Tastendruck auch wieder jeder Zeit stopbar sein.

Als Anfänger stehe ich jetzt etwas dumm dar. Die Schleife lässt sich 
wohl am besten mit einem Timer lösen zwecks des Timings eben bei dieser. 
Die Tastenabfrage bzw. das warten darauf dann per Interrupt?

Ich habe das Tutorial schon einige male gelesen, genau wie das 
Datenblatt, aber richtig ersichtlich war das nicht wie ich das 
realisieren kann.

Habt ihr da eventuell tipps für mich?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, da brauchst du etwas, was man Konzept nennt ;-)

Hm.. Mal überlegen:
Ich würde alles in (erstmal) unabhängige Teilaufgaben zerlegen:
- UART Ausgabe
- Tastenauswertung
- DIsplayansteuerung

DIese Teile müssen erstmal ausprogrammiert werden, am Besten mit 
Funktionen. Etwa sowas für uart senden:
void uart_send( ANzahl Daten, Ptr auf Daten )
{...}
 DIese Funktion schreibt die zu sendenden Daten in ein globalen 
IFO-Puffer.
 ALso die Funktion wird aufgerufen, kopiert Daten und wird sofort wieder
 beendet. Eine ISR (UART_Data_Reg_Empty) "guckt" permanent dort rein und
 sendet Zeichen für Zeichen, bis der Puffer leer ist.
void uart_stop ()
{...}
 Diese Funktion löscht den FIFO Puffer => die ISR (UART_Data_Reg_Empty)
 sieht einen leeren Puffer und macht nichts..

sowas für display:
 void showDisplay ( Was und Wohin)
{...}
 Die Fkt schickt die Daten direkt zum Display, da ich davon ausgehe,
 dass das schnell geht.

weiterhin gibt es einen ISR (Overflow TimerX), der die Tasten entprellt 
und auswertet. Das Ergebnis (also welche Taste ist gedrückt) kann zB 
über die
Fkt IsBtnPressed ( Welche Taste) abgefragt werden.

Dann gibt es noch die main, die, abgesehen von der Initialisierung von 
uart, timer,..., etwa so aussehen könnte:

main
{
 if ( IsBtnPressed (Taste1) )
 {
   showDisplay (irgendwas)
   uart_send ( irgendwas anderes)
 }
 if ( IsBtnPressed (Taste23) )
 {
    uart_stop();
 }
...
}

das natürlich in einer Endlosschleife


So etwa würde ich das wohl aufziehen...

Autor: Pascal Mielke (cyrax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, danke für deine Hilfe!
Also das Display und den UART steuere ich mit den Librarys von Peter 
Fleury. Die laufen also schon unabhängig parallel von einander. Mein 
Problem ist eher momentan die unabhängge Tasteneingabe und die Prozesse 
die ich dann starten möchte.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> unabhängge Tasteneingabe

Dann schau mal hier Entprellung und verfolge die Links, da landest 
Du bei einer wunderbaren Tastenabfrage von Peter Dannegger, die keine 
Wünsche offen lässt und sich leicht an eigene Bedürfnisse anpassen 
lässt.

...

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.