www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tasten Portpins und Interrupts


Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?...

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark Hämmerling (haemi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.