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?
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
"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
@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!
"@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
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.
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!!
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.