Hallo, Ich habe eine Aufgabe wo ich nicht mehr weiter komme. Programmieren tu ich es mit Atmel Studio. Es ist ein Aufwärtszähler zu programmieren und das Zählerergebnis soll auf einem LCD 20x2 angezeigt werden. Dem Aufwärtszähler ist ein Timer zugrunde gelegt, welcher im 500ms Takt hinzuzählt. Mittels Taster 1 wird der Zähler gestartet und gestoppt und mittels Taster 2 kann die Zeit in Schritten verändert werden (100, 200, 300, 400, 500ms) Danke im Voraus
:
Verschoben durch User
Selbst wenn du alle nötigen Informationen mitgeliefert hättest, erwartest du dass Jemand hier den Code für dich postet?
Frank L. schrieb: > Selbst wenn du alle nötigen Informationen mitgeliefert hättest, > erwartest du dass Jemand hier den Code für dich postet? Nein? Aber, dass mir wer bissl hilft.
:
Bearbeitet durch User
Da du schreibst, du kommst nicht mehr weiter, gehe ich davon aus, dass du bereits etwas hast. Zeig das doch mal her und dann erzähle uns, wo genau du nicht mehr weiter kommst oder fragen hast. Dann sind wir gerne bereit dir weiter zu helfen. Hausaufgaben macht hier niemand für dich, aber dir helfen die Lösung zu erarbeiten und zu verstehen tut hier eigentlich jeder! Außerdem wäre es gut, wenn du uns Infos zu den Rahmenbedingungen gibst. Schaltplan Typbezeichnung der verwendeten Hardware (Mikrocontroller, LCD, usw.) Deinen bisherigen Quellcode Was das ganze am Ende können soll, damit wir nicht 5 mal anfangen müssen, weil immer noch eine neue Teilaufgabe hinzukommt
:
Bearbeitet durch User
Auf 2*20 Stellen sollte Platz genug sein, um beide Zähler anzuzeigen, den Hauptzähler und den für die 100ms-Stufen. Die Software könnte zum Beispiel alle 100ms nachschauen, ob die Zeit durch den eingestellten Wert ohne Rest teilbar ist und nur dann den Hauptzähler einen Schritt weiterzählen.
Taster1 lässt ein Flag zwischen 0 und 1 toggeln. Taster2 lässt eine Variable timer_Intervall zwischen 100,200,300,400 und 500 wechseln.
1 | *// Timer-Interrupt |
2 | Counter += counter_flag; |
3 | LCD_Anzeige(Counter); |
4 | return; |
5 | |
6 | *// Hauptprogramm |
7 | while(1){ |
8 | Taster1(); |
9 | Taster2(); |
10 | Timer_set(timer_Intervall); |
11 | }
|
Peter Z. schrieb: > aster2 lässt eine Variable timer_Intervall zwischen 100,200,300,400 und > 500 wechseln. > *// Timer-Interrupt > Counter += counter_flag; > LCD_Anzeige(Counter); > return; > > *// Hauptprogramm > while(1){ > Taster1(); > Taster2(); > Timer_set(timer_Intervall); > } Und das lässt sich fehlerfrei compilieren? :-) Zeig doch mal das komplette Coding ...
Dieter F. schrieb: > > Und das lässt sich fehlerfrei compilieren? :-) > > Zeig doch mal das komplette Coding ... Ich sehe da im Moment keine eklatanten Syntax Fehler. Ich hab kein "komplettes Coding", wollte nur jemandem der auf dem Schlauch steht etwas helfen... tippe auf Android Handy...
Peter Z. schrieb: > *// Timer-Interrupt > Counter += counter_flag; > LCD_Anzeige(Counter); > return; Es ist schon mal keine gute Idee, eine LCD Ausgabe im Interrupt zu machen. Typischerweise ist das nämlich sehr langsam und deswegen am besten im Hauptprogramm aufgehoben. Mein Ansatz wäre ein 100ms Ticker per Timer Interrupt, der nach dem 1.,2. oder soundsovielten Aufruf den Zähler inkrementiert und ein Flag setzt. Das Hauptprogramm sieht das gesetzte Flag, frischt die Anzeige auf und löscht das Flag. Im Hauptprogramm kann man noch die einfache Tastenabfrage machen.
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.