ICP am ATMEGAx8, help me please, ich steh grad aufm Schlauch

Gast #1996743
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
Persönliche Seite #1996770
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.
Persönliche Seite #1996931
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.
Persönliche Seite #1996943
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.
Gast #1996949
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.
Gast #1996974
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.