mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ICP am ATMEGAx8, help me please, ich steh grad aufm Schlauch


Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich glaub bei mir hängt grad irgendwas.
Also der ICP ist ja ne feine Sache, schreibt mir den Zählerstand beim 
inputCaptueEvent in das dafür vorgesehene Register ICR1.
Nur wann genau ist diese Funktion akiv? Immer aktiv kann ja nicht sein, 
da man kann ja das ICR1-register auch als Counter-TOP auswählen kann, 
was zwangshalber über kurz oder lang mit Counter-TOP = 0 in 
Fehlfunktionen enden würde, da ja immer wieder das ICR1 register mit 
einem der Counterstände (der ja nur kleiner oder gleich ICR1 sein kann) 
überschrieben wird.
Also muss es ja irgendwo ein Bit geben, das den inputCapture 
daktiviert/aktiviert und genau dieses finde ich nicht?!


2. kleine Frage: kann ich den PinB0=ICP auslesen mit (PINB & (1<<PB0)) 
wenn der Pin als ICPin genutz wird?

vielen Dank und ein frohes Neujahr
Hannes

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes schrieb:

> Also muss es ja irgendwo ein Bit geben, das den inputCapture
> daktiviert/aktiviert und genau dieses finde ich nicht?!

TIMSK |= (1<<TICIE1);

Und an die entsprechende ISR denken
ISR(TIMER1_CAPT_vect)

Wenn die Events "lang" (> TCNT1 = 16-Bit) sein können, dann zusätzlich 
noch den Timer Overflow Interrupt benutzen.

In TCCR1B stellst du mit Bit ICES1 ein, welche Events am ICP-Pin zum 
Interrupt führen (fallende Flanke, steigende Flanke...)

> 2. kleine Frage: kann ich den PinB0=ICP auslesen mit (PINB & (1<<PB0))
> wenn der Pin als ICPin genutz wird?

Ausprobiert habe ich das nicht, denke aber das ist möglich.

Autor: Leo B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> TIMSK |= (1<<TICIE1);

Damit aktiviere ich den interrupt, oder wird nur bei aktiviertem 
Interrupt auch das TCNT1-Register in ICR1 geladen?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leo B. schrieb:

> Damit aktiviere ich den interrupt,

Ja. Und als eine der ersten Aktionen im Interrupt liest man dann ICR1 
aus und/oder schaltet die zu detektierende Flanke um.

> oder wird nur bei aktiviertem
> Interrupt auch das TCNT1-Register in ICR1 geladen?

Nein. ICR1 wird automatisch mit dem TCNT1 Wert (Zeitstempel) des 
Ereignisse gefüllt ABER beim nächsten Ereignis überschrieben (daher 
"...eine der ersten Aktionen..."). Wenn du den ICP-Pin als Ausgabe-Pin 
benutzt, werden u.U. ebenfalls ICP-Ereignisse produziert.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht kämpfst du mit der Doppelfunktion des ICR1 Registers.

Im Input Capture Modus liest man das Register ICR1.

In einigen der Waveform Generation Modi schreibt man ICR1 und definiert 
darüber die Wellenform.

Meiner Meinung nach - nicht ausprobiert - kann man nicht beide 
Funktionen zusammen nutzen. Nur entweder oder.

Autor: Vuvuzelatus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt --> 16 bit Timer/Counter1
               --> Input Capture Unit
                   --> Input Capture Pin Source

Der dortige Satz, der die gesuchte Info enthält, ist:

"Note that the input of the noise canceler and edge detector is always 
enabled unless the Timer/Counter is set in a Waveform Generation mode 
that uses ICR1 to define TOP."

Auf deutsch: Das Input-Capture-Dingens ist immer eingeschaltet, außer in 
den WG-Betriebsarten, in denen der TOP-Wert im Register ICR1 erwartet 
wird.

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon fies diese verteckten Sätze... das ich sowas immer und immer 
wieder überlese. Grauenvoll!

Aber dann ists klar... also das "input-capturing" ist quasi immer an. 
Dann suche ich also auch vergebens das aktivierende bit...

Danke an ALLE!
lg Hannes

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.