Forum: Compiler & IDEs komparator mit timer verbinden


von jr (jürgen riehle) (Gast)


Lesenswert?

hallo community:
ich stehe vor einem rätsel. Beim Versuch, den ad-wandler beim tiny2313 
so zu implementieren wie im avr-gcc-skript:
13.1.2.2 ADC über Komparator
kam ich nicht weiter, weil ein merkwürdiges verhalten auftrat.
Im folgenden programm:
...
void wait() {uint32_t j; for (j=0;j<320000;j++) {};};

int main(void)
{
    DDRB=0xc4;  /* PIN 7 und 6 und 2 von B werden auf output gesetzt*/
    PORTB=0xFF; // alle drei LEDs aus, alle PullUps aktiv

  // auch im Timer1 muss der richtige Modus gesetzt sein:
(A)  TIMSK |= (1<<ICIE1);  // input capture interrupt enable am Timer1

  // Modus setzen für den komparator
  ACSR |=  (1<<ACIS0); ACSR &= ~(1<<ACIS1);
(B)  ACSR |=  (1<<ACIC);  // verbindet den komparator mit dem timer1
(C)  sei();

    while(1)
(D)  { wait();
    PORTB &= ~(1<<PB2);
  }
    return 0;
}

blieb das Programm in Zeile (D) stecken - außer wenn eine der Zeilen (A) 
bis (C) auskommentiert war.
Welchen Einfluß haben diese Zeilen auf die Funktion wait()????
thx
jürgen riehle

von johnny.m (Gast)


Lesenswert?

Woher weißt Du, dass das Programm in der besagten Zeile "steckenbleibt"? 
Ich könnte mir eher vorstellen, dass der Optimizer Deine "Warteschleife" 
einfach wegoptimiert hat (weil sie leer ist) und deshalb die Anweisung 
"PORTB &= ~(1<<PB2);" permanent ausgeführt wird.

von johnny.m (Gast)


Lesenswert?

BTW:
Wenn Du unbedingt eine Wartezeit brauchst, dann nimm die Funktionen aus 
der util/delay.h. Die können nicht wegoptimiert werden...

von jr (jürgen riehle) (Gast)


Lesenswert?

in der endlosschleife bleibt das progi bei wait hängen - wenn ich 
nämlich wait auskommentiere, geht die led an pb2 an (nächste zeile) - 
und sonst bleibt sie aus!!

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
Noch kein Account? Hier anmelden.