Input Capture Flag Atmega16

Gast #628669
Lesenswert?
• ▲
▼
Hallo,

hab mit der Input Capture Fuktion Probleme. Bei der Simulation 
funktioniert alles einwandfrei, aber auf dem Controller läuft es nicht.
Ich möchte Pulsweiten von rechteckimpulsen messen, die ich dann im 
weiteren Programmverlauf analysiere. leider wird das Input Capture Flag 
nicht gesetzt und auch kein Wert in die ICR1 abgelegt, wenn es auf dem 
Controller ausgeführt wird, dies hab ich mit incircuit debuggen 
rausgefunden. das Programm hängt dadurch dann in der Warteschleife fest.


#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <stdlib.h>

int timer();


int main(void)
{
unsigned short dif;     /* 2Byte Datenformat */
DDRD =0x00;          /* PORTD als Eingang nutzen */
PORTD =0x00;    /* Pull-up Widerstände nicht aktivieren */
TIMSK =0b00100000; /* Freischalten des Interrupt der Input Capture
                      Funktion*/

DDRB =0xff;
PORTB =0b11111010;
while (1)
{ TCCR1B = 0b01000001; /* Timer startet, Input Capture reagiert auf
                       steigende Flanke */
if ( PIND & (1<<PIND6)) /* Starte Auswertung, wenn Bit Nr. 6 in PIND
                       gesetzt (1) ist*/
  {
  uint16_t icr1_1= ICR1;   /*schreibt den Wert aus ICR1 in icr1_1 (bei
                           steigender Flanke ausgelöst) */
  TIFR =0b00100000;   /* setzt das Input Capture Flag zurück */
  TCCR1B =0b00000010; /* Input Capture reagiert auf fallende Flanke */
  while (TIFR <0b00100000) /*Warteschleife bis fallende Flanke kommt */
      {}
  uint16_t icr1_2= ICR1;   /* schreibt den Wert ICR1 in icr1_2 (bei
                           fallender Flanke ausgelöst) */
  TIFR =0b00100000;  /* setzt das Input Capture Flag zurück */
  dif = icr1_2 - icr1_1;   /* Impulslänge in 16Bit angegeben*/

ich bau auf eure Hilfe

Gruß Chillman
Gast #628763
Lesenswert?
• ▲
▼
Ja das mit dem Interrupt aktivieren ist überflüssig, ist mir auch schon 
aufgefallen. hab auch rausgefunden, dass im Incirciut debugmodus, wenn 
man schritt für schritt durchgeht flanken nicht erkannt werden, wenn man 
aber auf run drückt schon, beim simulator erkennt er flanken selbst im 
step modus. naja so ist das wohl.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 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.