Ich schreibe gerade ein Programm mit AVR Studio für einen atmega164. Ich möchte die Input Capture unit verwenden. Im Datenblatt steht, dass PD6 der ICP Pin wäre, doch wenn ich mein Programm simuliere, dann wird der interrupt nur mit PD4 ausgelöst! Hat jemand eine Erklärung dafür?? Danke
Ohne Code und die Information wie du das Auslösen simulierst, kann ich dir dazu nichts sagen...
Also Programm Code für timer1 TCCR1B |= (1<<CS11) | (1<<ICES1); TIMSK1 |= (1<<ICIE1) | (1<<TOIE1);
Tintifax wrote: > Also Programm Code für timer1 > > TCCR1B |= (1<<CS11) | (1<<ICES1); > TIMSK1 |= (1<<ICIE1) | (1<<TOIE1); Das ist kein Programm!
>TCCR1B |= (1<<CS11) | (1<<ICES1); >TIMSK1 |= (1<<ICIE1) | (1<<TOIE1); Das ist was kurz... >Simulation mit AVR Studio! Sagtest du bereits... klickst du den PORT- oder PIN-Register an?
die interrupt routine wird ja ausgeführt nur wird die steigende Flanke nicht auf PD6 erkannt sonder komischerweise auf PD4.
Ich würde die Controllregister mal mit absoluten Werten beschreiben. Gott weiss, was da nach einem Reset fürn Mist drinsteht...
... und ein paar Kommentare schaden nie um rauszufinden ob die einzelnen Abschnitte das tun, was sie eigentlich sollen. Ist gerade bei der I/O-Konfiguration sinnvoll.
In deinem Code: DDRB, DDRD, DDRA, DDRC, EICRA, EIMSK, PCICR, PCMSK1, PCMSK0, ADCSRA, ADMUX, ADCSRA, etc. Alle Register, die die Arbeitsweise des Controllers beeinflussen, um es grob zu umreißen. Die werden im AVR Studio im "I/O-View"-Bereich angezeigt. Dazu gibt es nocht die general purpose-Register r0-r31 - mit denen du in C normaler Weise nichts zu tun hast.
ok hab herausgefunden was die Controllregister sind! aber das ursprünglliche Problem hab ich noch immer mit PD4 statt PD6....????
Die Dinger, die irgendwas tun, wenn am was reinschreibt oder deren ausgelesenen Werte irgendwas repräsentieren, nennt man Kontrollregister. Du Beschreibst z.B. EICRA mit einer Oderverknüpfung EICRA |= ... Das bedeutet, daß du eventuell bereits gesetzte Bits nicht löschst. Das könnte unter Umständen problematisch sein, jenachdem was in diesem Kontrollregister nach einem Kaltstart oder Reset drinsteht. Probiers mal absolut: EICRA = .... EIMSK = .... PCICR = ....
>Gott weiss, was da nach einem Reset fürn Mist drinsteht...
hmm... dann ist das Datenblatt wohl die Bibel...
Überschreibst du jedesmal alle Kontrollregister beim Programmstart um
sicher zu gehen, dass da verlässlihe Werte drinstehen?
>Probiers mal absolut:
Ich rate dringend davon ab!
Dafür muss er für jedes Bit die Default-Einstellung kennen um diese
nicht zu ändern - das hat enormes Fehlerpotenzial und ist unmöglich zu
warten.
Zudem muss er die Konfiguration zweier Geräte die an einem Register
hängen in einem Arbeitsschritt vornehmen. Das ist noch mal schwerer zu
dokumentieren und auszulagern.
also wie soll ich nun die Controllregister setzen?? Könnte es sein, dass der Fehler beim AVR Studio Simulator liegt und dass somit der PD4 Pin der Input Capture auslöst?
Kai Giebeler wrote: > Überschreibst du jedesmal alle Kontrollregister beim Programmstart um > sicher zu gehen, dass da verlässlihe Werte drinstehen? Nicht alle, aber die die ich brauche. Meiner Meinung gibt garkeinen Grund "dringend" davon abzuraten. Man kann nichts kaputt machen.
>Meiner Meinung gibt garkeinen Grund "dringend" davon abzuraten. Man >kann nichts kaputt machen. Kommt auf die Schaltung an, die dran hängt. Ich sehe keinen Vorteil darin. Alle Register werden wieder zurückgesetzt und es ist unmöglich die Konfiguration einer Hardware-Komponente in eine Unterfunktion auszulagern, da alle anderen Geräte, die sich damit die Register teilen auf die Grundwerte zurückgesetzt werden (oder willkürlich nur ein paar Bits). @Tintifax Ich kann dir leider nicht sagen, was nicht stimmt. Ich habe mit dem Simulator öfters mal Probleme mit dem manuellen Togglen von PINs. Das von dir beschriebene Verhalten kenne ich nicht.
Niels Hüsken wrote: > Gott weiss, was da nach einem Reset fürn Mist drinsteht... Sorry, aber das ist Quark. Das Datenblatt beschreibt exakt, welches Register nach einem Reset welchen Wert hat. Es gibt keinen Grund, daran zu zweifeln -- die entsprechende Information kommt schließlich von denjenigen, die den Chip auch gebaut haben. Ich würde den ganzen Zirkus endlich mal auf einem richtigen ATmega164P ablaufen lassen, statt sowas dem Simulator zu überlassen. Wäre nicht das erste, was im Simulator nicht exakt nachgebildet wäre. Sollte aber dann eigentlich irgendwo dokumentiert sein in der AVR-Studio- Hilfe. Ich kann aber nicht nachgucken, hab' hier kein Windows.
Jörg Wunsch wrote: >> Gott weiss, was da nach einem Reset fürn Mist drinsteht... > > Sorry, aber das ist Quark. Das Datenblatt beschreibt exakt, welches > Register nach einem Reset welchen Wert hat. Es gibt keinen Grund, Jeps, ich weiss. Der OP ist aber offensichtlich Anfänger und ich versuche ihm zu verstehen zu geben, daß die Kontrollregister nicht mit '0' nach dem Reset starten. Jedenfalls bin ich dafür nicht nur die Bits in den Kontrollregistern zu setzen, die man haben möchte, sondern auch explizit die zu löschen, die man nicht haben möchte. Sonst wäre es möglich, das einfach der falsche Portpin fürs Input Capture selektiert wird.
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.