Hallo, ein gesundes neues Jahr erstmal an dieser Stelle. Ich habe lange nichts mehr mit AVR Controllern gemacht, und vor Jahren auch nur einfache Sachen mittels STK500. Ich wollte folgendes realisieren. Dazu habe ich ein STK600 und den Atmega2560 zum Probieren. Spaeter soll das Ganze auf einem Atiny13A laufen. Aber ertmal geht es mir darum den Code dazu zu schreiben und zu verstehen. Beim Durcharbeiten des Tutorial hier, meckert der Compiler beim Register GICR. Muss ich mal im Datenblatt des 2560 nachsehen, hab ich noch nicht gemacht. Ein Eingang, ein Ausgang. Dazu benutze ich erstmal Port B und Port D am STK600. Kurz druecken(<2s) schaltet den Ausgang ein, nochmaliges kurz druecken schaltet den Ausgang aus usw. Wenn der Ausgang durch kurzes druecken ein ist, sollte lang druecken keinen effect haben. Lang druecken(>3s) schaltet den Ausgang nach einer im code voreingestellten Zeit(0-72h) ein. Dann kann nur nochmaliges lang druecken den Ausgang wieder ausschalten. Wenn der timer laeuft, sollte kurzes druecken keinen effect haben. Wenn der Ausgang nach Ablauf des Timers automatisch eingeschaltet ist, sollte er durch kurzes druecken wieder ausgeschaltet werden. Also wenn mir jemand da etwas code liefern wuerde, waere ich sehr dankbar. Hinweise zu Informationen diesbezueglich sind auch willkommen. Spaeter will ich das dann in Assembler und in C haben, um es mir verstaendlich zu machen, erstmal gehts mir aber um Assembler. vielen Dank...
Kann da eine von Peter Dannegers Routinen für seine "Bulletproof"-Tastenentprellung nicht auch zwischen langen und kurzen Tastendrücken unterscheiden? http://www.mikrocontroller.net/articles/Entprellung Freilich ist PeDas Code für den Neueinstieg recht starker Tobak... mfg mf PS: Schön, dass du dich noch mal ran wagst. Es ist ein harter Weg mit viel Frustration und Rückschlägen.
Mini Float schrieb: > http://www.mikrocontroller.net/articles/Entprellung > > Freilich ist PeDas Code für den Neueinstieg recht starker Tobak... Einer der wenigen Fälle, an denen eine Ausnahme gerechtfertigt ist. Den Code muss man nicht im Detail verstehen, dazu funktioniert er einfach zu gut, als das man es sich leisten könnte den links liegen zu lassen. Die beschriebene Aufgabenstellung ist damit ein Klacks. Zumindest was den Tastenteil anbelangt. Das spielt die PeDa Lösung aus dem Stand problemlos.
Hallo, vielen Dank fuer die Hinweise. Der erste Teil funktioniert an sich schon. Beim Kompilieren der Beispiele bekomme ich jedoch die folgenden Fehlermeldungen: Undefined symbol: TCCR0 Undefined symbol: TIMSK Sind diese Register mit meinem verwendeten Controller nicht vereinbar? Was bedeutet das?
Die Register heißen bei dir wohl etwas anders, musste mal ins DB gucken. Grüße, Ingo
Wenn die Register anders heißen, kann es sein dass auch die Bits an anderen STellen sind. Das muss man aber sowieso immer überprüfen, wenn man Code von einem Prozessor auf den anderen überträgt. ALlerdings ist die PeDa Lösung nicht anspruchsvoll. Irgendein regelmässiger Timerinterrupt, dessen Wiederholperiode irgendwo im Bereich von 5 bis 20 Millisekunden liegt, reicht ihr schon. Und wenns 40ms sind, ist es auch noch kein Beinbruch. So einen Timer hat man meistens in der einen oder anderen Form sowieso im Programm. Zb.: Wie hast du eigentlich vor die 0 bis 72h Wartezeit zu realisieren? Da fällt doch sicher ein Timer ab, in dessen ISR man noch den Entprellcode mit aufnehmen kann. Da dein Zielprozessor letztendlich ein Tiny13 ist, würde ich mir da einen Timer suchen (Datenblattvergleich), der beim Tiny13 und beim Mega2560 gleich sind. Vor allen Dingen sollten sie gleiche Bitzahl haben, sonst muss man später die ganzen Konstanten alle wieder neu berechnen.
Hallo Ingo, nachdem ich die Datenblaetter verglichen habe, hab ich die folgenden beiden Register benutzt: TCCR1A anstelle von TCCR0 TIMSK1 anstelle von TIMSK Dies fuehrte zu folgenden Fehlermeldungen: Operand 1 out of range: 0x80 Operand 1 out of range: 0x6f Ich stoebere weiter....
Mark W. schrieb: > Dies fuehrte zu folgenden Fehlermeldungen: > > Operand 1 out of range: 0x80 > Operand 1 out of range: 0x6f > Du musst dir angewöhnen, zu einer Fehlermeldung immer auch die Zeile oder die nähere Umgebung zu zeigen, in der der Fehler auftritt. Für deinen AUtomechaniker ist es schliesslich ja auch interessant, welche Automarke du fährst, wenn auf dem DIsplay ein Fehlercode auftaucht.
Hi >TCCR1A anstelle von TCCR0 Was nun? Timer1 oder Timer0 >Dies fuehrte zu folgenden Fehlermeldungen: >Operand 1 out of range: 0x80 >Operand 1 out of range: 0x6f Beim ATMega2560 liegen eine Reihe IO-Register im Adressbereich, der mit in/out nicht mehr erreichbar ist. Einfach statt dessen lds/sts verwenden. MfG Spess
Mark W. schrieb: > Hallo Ingo, > > nachdem ich die Datenblaetter verglichen habe, hab ich die folgenden > beiden Register benutzt: > > TCCR1A anstelle von TCCR0 > TIMSK1 anstelle von TIMSK Na, ob das so schlau ist, anstelle des 8_bit Timer 0 den Timer 1 zu benutzen? Zumal der Tiny13 keinen Timer 1 hat sondern nur einen 8-Bit Timer 0 und beim Mega2560 der Timer 1 ein 16 Bit Timer ist. Du steuerst da jetzt geradewegs auf ein Programm zu, dass du auf dem Mega entwickelst und dann für den Tiny wieder komplett umschreiben kannst. Mit welcher Taktfrequenz wird dein deine Schaltung laufen? Bevor man anfängt sollte man erst mal ein bischen rechnen. Besonders die Interrupt-Intervalle sind nicht ganz uninteressant und da sollte man im Vorfeld schon eine Vorstellung davon haben, wo die Reise hingehen wird.
Hallo, Es geht darum: http://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten Das Beispiel "Entprellung" funktioniert ohne Fehlermeldungen. Jedoch das naechste Beispiel "Einfache Entprellung und Abfrage" schon nicht mehr. Jedenfalls nicht mit dem mir zur Verfuegung stehenden 2560. Statt TCCR0 nahm ich das Register TCCR1A. Mittlerweile auch die anderen Timer. Statt TIMSK0 nahm ich TIMSK1. Die Fehlermeldungen wechselten von: Undefined symbol: TCCR0 Undefined symbol: TIMSK zu Operand 1 out of range: 0x80 Operand 1 out of range: 0x6f AVR Studio 5.0.1223
Hi Liest du eigentlich die Antworten? MfG Spess
Mark W. schrieb: > Das Beispiel "Entprellung" funktioniert ohne Fehlermeldungen. > Jedoch das naechste Beispiel "Einfache Entprellung und Abfrage" schon > nicht mehr. Jedenfalls nicht mit dem mir zur Verfuegung stehenden 2560. Nun ja. Das Tutorial ist aber auch gedacht, dass man es von vorne durchmacht. Wenn man mitten drinn einsteigt, dann fehlt einem halt das ganze Wissen von davor. > Statt TCCR0 nahm ich das Register TCCR1A. Schlechte Wahl. > Mittlerweile auch die anderen > Timer. Welche anderen Timer? ZU jedem Timer gehört ein Satz Konfigurationsregister. Im Namen jedes Konfigurationsregisters kommt die Nummer des Timers vor. > Operand 1 out of range: 0x80 > Operand 1 out of range: 0x6f Wie Spess schon sagte: Die liegen beim Mega so, dass sie mit einem out nicht mehr erreichbar sind. Da muss man auf sts ausweichen. Bleib doch beim Timer 0 Auch im Hinblick darauf, dass du ja eigentlich irgendwann auf den Tiny gehen willst.
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.