mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ICP Pin bei ATMEGA164


Autor: Tintifax (Gast)
Datum:

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

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler im Programmcode!?

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Code und die Information wie du das Auslösen simulierst, kann ich 
dir dazu nichts sagen...

Autor: Tintifax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Programm Code für timer1

TCCR1B |= (1<<CS11) | (1<<ICES1);
TIMSK1 |= (1<<ICIE1) | (1<<TOIE1);

Autor: Tintifax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simulation mit AVR Studio!

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tintifax wrote:
> Also Programm Code für timer1
>
> TCCR1B |= (1<<CS11) | (1<<ICES1);
> TIMSK1 |= (1<<ICIE1) | (1<<TOIE1);
Das ist kein Programm!

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Tintifax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pin Register

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interruptvektoren falsch gesetzt?

Autor: Tintifax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die interrupt routine wird ja ausgeführt nur wird die steigende Flanke 
nicht auf PD6 erkannt sonder komischerweise auf PD4.

Autor: Tintifax (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
so jetzt der gesamte C code im Anhang

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde die Controllregister mal mit absoluten Werten beschreiben. 
Gott weiss, was da nach einem Reset fürn Mist drinsteht...

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Tintifax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
blöde Frage aber was sind die Kontroll register??

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Tintifax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok hab herausgefunden was die Controllregister sind!

aber das ursprünglliche Problem hab ich noch immer mit PD4 statt 
PD6....????

Autor: Niels Hüsken (monarch35)
Datum:

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

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Tintifax (Gast)
Datum:

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

Autor: Niels Hüsken (monarch35)
Datum:

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

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Niels Hüsken (monarch35)
Datum:

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

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.