Forum: Mikrocontroller und Digitale Elektronik Tasten Portpins und Interrupts


von Paul (Gast)


Lesenswert?

Moin erstmal!
Ich bin immernoch dabei mich durch die µC/Elektrotechnikwelt zu
kämpfen.
Zur Zeit stehe ich vor dem Problem, dass ich nicht nen mega16 für ne
kleine Schaltung (countdowntimer) benutzen will, sondern irgendwas
günstigeres.
An dem Dingen sind 6-7 Taster. Zwei davon müßen Interruptfähig sein
(Start/Stop & Reset)
Nun die Frage an euch. Wie kann ich da am besten/günstigsten
realisieren?
Schieberegister ist ja wegen der Interrups nicht, oder?
Bei ner Matrixanordnung spare ich auch nicht wirklich viele Portpins?!

Hat jemand von euch mal einen Link, wo solche Möglichkeiten
zusammengefaßt sind?

von Ronny Schulz (Gast)


Lesenswert?

Ich weiss ja nicht, was bei den anderen Tasten passieren soll und ob
irgendwo was ausgegeben werden soll. Somit kann man mit deiner Anfrage
nicht wirklich was anfangen.

Sonst haben auch andere AVRs 2 externe Interrupts. Der ATmega 8 und der
ATtiny2313 fiel mir mal so auf. Hier steht mehr:

http://www.atmel.com/dyn/products/param_table.asp?family_id=607&OrderBy=part_no&Direction=ASC

von Peter Dannegger (Gast)


Lesenswert?

"An dem Dingen sind 6-7 Taster. Zwei davon müßen Interruptfähig sein"


Das klingt verdammt danach, daß Du Dir Stackprobleme aufhalsen willst
und das Programm schlecht durchschaubar und erweiterbar werden soll.

Mache die Tastenentprellung und Erkennung in einer separaten Routine
(Timerinterrupt) und lassen dann einfach in der Mainloop die einzelnen
Tastenbits abfragen und verzweige entsprechend.


Bei 6-7 Tasten lohnt sich noch keine extra Hardware, nimm einfach 6-7
Eingänge (vorzugsweise eines Ports).


Peter

von Paul (Gast)


Lesenswert?

@Ronny: Jo, das mit dem ATtiny2313 könnte hinhauen! Danke!!!
@Peter: Den Timerinterrupt brauche ich doch für die Sekunden ;)
Tastenentprellung und Erkennung sind schon in einer getrennten &
erweiterbaren Routine.
Das mit dem Stackproblem habe ich nicht so wirklich verstanden (bin
halt noch neu)
"Bei 6-7 Tasten lohnt sich noch keine extra Hardware, nimm einfach
6-7
Eingänge (vorzugsweise eines Ports)."
Das habe ich mir auch fast gedacht. Danke!

von Peter Dannegger (Gast)


Lesenswert?

"@Peter: Den Timerinterrupt brauche ich doch für die Sekunden ;)"

Und wo ist da das Problem ?


"Das mit dem Stackproblem habe ich nicht so wirklich verstanden"

Nun, die meisten Anfänger, die nach einem Interrupt schreien, wollen
daraus dann sonstwohin springen, ohne zu wissen, was sie gerade
unterbrochen haben, d.h. was alles gerade aufm Stack liegt. Das Chaos
ist damit vorprogrammiert.



Peter

von Ronny Schulz (Gast)


Lesenswert?

Du solltest vielleicht wirklich mal kurz beschreiben, was Du genau
machen willst. Evtl. kann man dir dann besser helfen. Vielleicht
benötigst Du die Interrupts überhaupt nicht.. Also sag doch einfach
mal, was die Schaltung machen soll.

von Paul (Gast)


Lesenswert?

Naja, das ist eigentlich was ganz einfaches. Eine Art Eieruhr, bei der
man eine bestimmte Zeit einstellen kann (funktioniert soweit) und per
Start- und Stop-Taste unterbrechen kann. Eine Reset-funktion ist auch
noch mit drin.
Am Ende piepst es dann. Das ist aber auch schon die nächste Baustelle.
Ich würde gerne unterschiedliche Melodien ausgeben. Zur Zeit habe ich
einfach nur einen Piezzo Signalgeber angeschlossen, der über ein
Transistor gesteuert wird.
Da gibt es doch noch was mit R2-Netzwerken oder so... muß ich mich aber
nochmal einlesen.

Danke für die nette Hilfe!!

von Ronny Schulz (Gast)


Lesenswert?

Aber dazu braucht man doch keine externen IRQs. Das größte Problem wird
wohl eher deine Melodie sein und nichts anderes. Wobei das sicher auch
nicht unbedingt ein Problem ist. Ich habe allerdings noch keine
Melodien mit einem Mikrocontroller ausgegeben.

von Mark H. (haemi)


Lesenswert?

Salve,

für diesen Zweck würde ich keinesfalls externe Interrupts heranziehen.
Wie Peter schon sagt, man halst sich damit nur Probleme mit der
Entprellung und Unübersichtlichkeit auf.
Daß Du einen Timer für die Uhr brauchst ist soweit klar und der
richtige Ansatz. Daß Du denselben Timer nicht auch für eine
Tastenabfrage verwenden kannst ist hingegen ein Trugschluß. Denn der
Timer wird ja ohnehin nicht mit exakt 1Hz laufen, sondern erstmal über
den Hardware-Prescaler laufen, und nachher in der ISR sicherlich
nochmal per Software skaliert werden.
Ganz abgesehen davon, daß ein AVR durchaus mehrere Timer zur Verfügung
stellt, die sich unabhängig voneinander verwenden lassen.
Melodie sollte auch kein Problem sein. Frequenzen lassen sich leicht
per Timer im CTC-Mode erzeugen. Für diesen Zweck brauchst Du dann
wirklich einen eigenen Timer.

Viel Erfolg!
Mark

von Paul (Gast)


Lesenswert?

So, ich habe jetzt erstmal noch fleißig getestet und gelesen.
Für einen totalen Anfänger ist das schon ne Menge!
Nun zu der Sache, die ich immernoch nicht richtig verstanden habe.

"Daß Du denselben Timer nicht auch für eine
Tastenabfrage verwenden kannst ist hingegen ein Trugschluß. Denn der
Timer wird ja ohnehin nicht mit exakt 1Hz laufen, sondern erstmal über
den Hardware-Prescaler laufen, und nachher in der ISR sicherlich
nochmal per Software skaliert werden."

Öhmmmmmm, wie soll das mit der Tastenabfrage denn dann funktionieren?
Bisher mach ich es so:
Sobald die Start/Stop-Taste gerückt wurde, wird eine Funktion
durchlaufen, in der die Zeit runtergezählt wird.
Das wird solange gemacht, wie eine gewisse Variable TRUE ist.
Sobald die Stop-Taste gedrückt wird (interrupt) mache ich nix anderes,
als die Variable auf FALSE zu setzten.

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.