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)
> 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...
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.