Forum: Mikrocontroller und Digitale Elektronik Tastenabfrage mit ATtiny13V


von Lokus P. (derschatten)


Angehängte Dateien:

Lesenswert?

Wenn man länger nichts mit dem Zeug zu tun hat, fängt man mehr oder 
weniger gleich wieder von Null an...

Ich möchte gerne mit einem ATtiny13V eine Tastenabfrage programmieren.
Dafür habe ich mir das bekannte Entprellung-Beispiel von hier 
herangezogen, dass mir einen kurzen und langen Tastendruck abfragt.

Nur irgendwie will es nicht.
AVR Studio bringt mir beim kompilieren zwar keinen Fehler, aber das muß 
ja nichts heißen.

Die Einschaltzustände passen soweit, nur reagiert das Programm weder auf 
den kurzen noch langen Tastendruck.
Wo soll ich hier ansetzen?

von Lokus P. (derschatten)


Angehängte Dateien:

Lesenswert?

Mist, da is einiges schief gelaufen. Hatte den falschen AVR im AVR 
Studio angegeben, klar dass dadurch keine Fehler sichtbar werden.
Habe den Code jetzt mal an den ATtiny16 angepasst.

Allerdings tut sich trotzdem nichts.

von shuzz (Gast)


Lesenswert?

In get_key_short hast Du scheinbar schonmal ein sei() vergessen...

von Lokus P. (derschatten)


Lesenswert?

In der Funktion selbst? Nö, da gehört keines rein.

von Sam .. (sam1994)


Lesenswert?

Dann darfst du dich nicht wundern wenn du dem Timer seinen Interrupt 
abdrehst.

von Lokus P. (derschatten)


Lesenswert?

Dann mußt du mir aber erklären warum das in dem Beispiele: 
http://www.mikrocontroller.net/articles/Entprellung
nicht passiert.

Der Fehler muß wo anders liegen.
Habe das Programm auch mal durch den Simulator von AVR-Studio gejagt und 
da scheient alles korrekt abzulaufen.

von Sam .. (sam1994)


Lesenswert?

Weil die interrupts in get_key_press wieder aktiviert werden. Füge nach 
deinem Funktionsaufruf get_key_short ein sei(); hinzu und es sollte 
funktionieren.

von Lokus P. (derschatten)


Angehängte Dateien:

Lesenswert?

Das hat leider nichts bewirkt.
Abgesehen davon habe ich mich ja genau an das Beispiel gehalten.

Ich hab mal den Schaltplan dazu gezeichnet, vielleicht liegt ja hier der 
Hund begraben, wobei da eigentlich nicht viel drann ist.

von Lokus P. (derschatten)


Lesenswert?

Ok, 1 Fehler hab ich schon gefunden. Beim Ttiny13 liegt der Teiler im 
TCCR0B und nicht im TCCR0A.

Damit ich auf die 10ms komme, muß ich vermutlich auch den TCNT0 hier 
anpassen:
TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);

Der AVR läuft momentan mit dem Tankt von 4800000 Hz

von Lokus P. (derschatten)


Lesenswert?

Ich komme nicht weiter. Sonst niemand einen Tip für mich?

von Lokus P. (derschatten)


Lesenswert?

Muß der "Watch-dog Timer always on" aktiv sein?

von Sam .. (sam1994)


Lesenswert?

Zeig mal deinen neuen Code. Hast du den Watchdog aktiviert? Wenn ja 
deaktiviere in und trenne den avr von der Stromversorgung. Der muss aus 
bleiben.

von Peter D. (peda)


Lesenswert?

Guck mal, ob Du einen Timerinterrupt richtig hinkriegst.
Programmiere einen Timerinterrupt alle 10ms und zähle darin ein Variable 
bis 100 und toggle dann ne LED.
Die LED muß dann alle 1s umschalten.

Und nimm besser den CTC-Mode, dann brauchts kein Reload im Interupt.
Nur die älteren AVRs konnten noch kein CTC.


Peter

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
Noch kein Account? Hier anmelden.