Forum: Compiler & IDEs komparator am tiny2313


von jr (jürgen riehle) (Gast)


Lesenswert?

hi,
ich will als vorstufe zur ad-wandlung den komparator im tiny2313 mal 
testen.
dazu habe ich folgende zeilen geschrieben:
int main(void)
{
    DDRB=0xc0;  /* PIN 7 und 6 von B wird auf output gesetzt
               und alle anderen als Eingang, also auch AIN0 und AIN1 */
    PORTB=0x00;
  // Modus setzen falling edge (10)
    ACSR   &=   ~(1<<ACIS0);
    ACSR   |=   (1<<ACIS1);

  while(1)
  {
  if ((ACSR & (1<<5))) {PORTB=0b01111111;} else {PORTB=0b1011111;}
   }
    return 0;
  }
(die include-files sind da).
Ich habe zwei LEDs an B6 und B7 sowie einen spannungsteiler (1:) 
zwischen Vcc und GND eingebaut.
Meinen bescheidenen kenntnissen nach müsste jetzt die  LEDs ihren 
zustand ändern, wenn ich mit B0 = AIN0 und B1 = AIN1 am spannungsteiler 
antippe (z.b. mit B0 an die Mitte und B1 an Vcc bzw GND).
Ständig leuchtet aber nur die LED an B7.
Was mache ich falsch??
jürgen riehle (jr)

von johnny.m (Gast)


Lesenswert?

>  if ((ACSR & (1<<5))) {PORTB=0b01111111;} else {PORTB=0b1011111;}
Ist das 1:1 kopiert Dein Code? Dann zähl mal die Nullen und Einsen in 
dem else-Block... Dann weißt Du auch warum PORTB.7 immer Low-Pegel 
hat...

von johnny.m (Gast)


Lesenswert?

BTW:
Solche Fehler lassen sich vermeiden, wenn man immer die (1 << 
IRGENDWAS)-Schreibweise benutzt. Wenn von 8 Nullen und Einsen eine 
fehlt, dann muss man schon genau hinsehen, um den Fehler zu finden. 
Hättest Du oben geschrieben
1
if ((ACSR & (1 << ACO))) 
2
    PORTB = ~(1 << PB7); 
3
else 
4
    PORTB = ~(1 << PB6);
oder (kürzer):
1
PORTB = (ACSR & (1 << ACO)) ? ~(1 << PB7) : ~(1 << PB6);
dann wäre Dir der Fehler gar nicht unterlaufen...

von Ulrich (Gast)


Lesenswert?

Vorallem kann man den code auch auf compilern compilieren die nicht 
diesen bytepatch drin haben.

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.