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?
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...
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.
> 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. ...
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.