hallo, ich habe gerade in der uni angefangen atmega16 zu programmieren und hab da eine frage. ich wollte einfach nur eine stoppuhr programmieren, schaffe es jedoch nicht die zeit anzuhalten. zum stoppen lese ich einfach einen button ein: help = PINA; if((help & 0x40)==0x40){ /*wenn PINA.7 auf 1 ist, --> uhr stoppen */ flag = 0; } else{ flag = 1; } soweit funktioniert das ja auch. jetzt will ich aber im timer interrupt das flag auslesen und entweder einen counter dort weiterlaufen lassen oder eben stoppen, damit die zeit stehen bleibt: SIGNAL(SIG_OVERFLOW1){/*timer interrupt*/ if(flag == 1){ temp++; } das funktioniert aber einfach nicht. temp wird einfach immer weitergezählt. ich hab auch schon probiert, dass ich einfach mal gleich nach dem abfragen des buttons leds ein und ausschalte. das geht auch. nur die abfrage im interrupt macht ein problem. kann es sein, dass das überhaupt nicht funktioniert oder hats da ein anderes problem? mfg specht
danke für den tipp, aber da ist einfach nur der kommentar alt. sollt ich mal ausbessern. also das einlesen des buttons funktioniert (am pin a6) nur das abfragen des flags im interrupt geht einfach nicht. mfg
Dir ist schon klar daß das bestenfalls nur dann geht, wenn der Taster (dauerhaft) gedrückt ist? Ausserdem tust du dir und anderen einen Gefallen, wenn du "magische" Zahlen wie in TIMSK=4 vermeidest. Ich hab jetzt keine Lust das Handbuch runterzulagen und zu schauen was in Bit 2 codiert ist; es sollte aber gleichbedeutend sein zu sowas wie
1 | TIMSK |= (1 << TOV1); |
Johann
ok danke für die tipps. werds gleich mal umschreiben. bin wie gesagt neu im programmiergeschäft. drum schaut der code vielleicht ein bisschen anders aus. das es nur solange stoppt, wie der button gedrückt ist ist mir schon klar. ich werds noch umändern, so dass der button start - stopp toggelt
Und nachdem du den Hinweis von Ernst umgesetzt hast, lies mal AVR-GCC-Tutorial/Die Timer und Zähler des AVR durch. DU kannst den Timer besser betreiben im CTC-Mode (clear Timer on compare match) und musst nicht von Hand die Timerwerte (momentan zudem zu einem ungünstigen Zeitpunkt) in Timer1 neu setzen. Johann
ok werd ich machen. wird sicher noch ein langer sonntag ;) übrigens danke für die vielen schnellen tipps. echt cool das forum hier. das tutorial ist echt gut. im datenblatt nachlesen ist da wirklich viel anstrengender.
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.