Liebe Forum User Ich habe follgendes Programmproblem: Nach meiner Logik müsste nach Erfüllen der Bedingung PORTD gesetzt werden, sonst PORTD=0. Das Programm funktioniert wie folgt: Wenn PINC 04=0 oder 02=0, dann PORTD=1 (4,8V) sonst: Wenn PINC 04=1 und 02=1 (5V), to PORTD= 2,4V Zu erwarten wäre jedoch PORTD=0 Bitte um Hilfe Danke im Voraus main() { DDRD = 0xFF; DDRC = 0x00; PORTC = 0x02; PORTC = 0x04; do { if (!(PINC&0x02)||!(PINC&0x04)) PORTD = 0xFF; else PORTD = 0x00; } while (true); } //---------------------------------------------------------------------- --
Zunächst...was meinst du mit PINC 04=1? Ist damit der Pin #4 am PortC gemeint?
1 | main() |
2 | {
|
3 | DDRD = 0xFF; |
4 | DDRC = 0x00; |
5 | PORTC = 0x02; |
6 | PORTC = 0x04; |
7 | |
8 | do { |
9 | if (!(PINC&0x02)||!(PINC&0x04)) |
10 | PORTD = 0xFF; |
11 | else
|
12 | PORTD = 0x00; |
13 | } while (true); |
14 | }
|
Dir ist bewusst, dass du in Zeile 6 den zuvor aktivierten Pullup an Pin #1 wieder deaktivierst? Besser wäre hier PORTC = 0x02|0x04; > Das Programm funktioniert wie folgt: > Wenn PINC 04=0 oder 02=0, dann PORTD=1 (4,8V) > sonst: Wenn PINC 04=1 und 02=1 (5V), to PORTD= 2,4V Zu erwarten wäre > jedoch PORTD=0 Das versteh ich nicht. Wieso soll denn an irgendeinem Pin von PortD die halbe Betriebsspannung liegen? Entweder liegt ~Vcc an oder eben ~0V Schreib doch mal eine Logiktabelle auf, was du eigentlich genau willst. PortC.1 | PortC.2 | PORTD ------------------------------ 0 | 0 | ??? ------------------------------ 1 | 0 | ??? ------------------------------ 0 | 1 | ??? ------------------------------ 1 | 1 | ???
Probier mal so main() { DDRD = 0xFF; PORTD = 0x00; DDRC = 0x00; PORTC = 0x06; do { if (!(PINC&0x06)) PORTD = 0xFF; else PORTD = 0x00; } while (true); }
Zunächst...was meinst du mit PINC 04=1? Ist damit der Pin #4 am PortC gemeint? Ich habe damit gemeint Pin 2 weil (PINC&0x04) außerdem ich will: PortC.1 | PortC.2 | PORTD ------------------------------ 0 | 0 | 1 ------------------------------ 1 | 0 | 1 ------------------------------ 0 | 1 | 1 ------------------------------ 1 | 1 | 0 leider ich habe: PortC.1 | PortC.2 | PORTD ------------------------------ 0 | 0 | 1(4,8V) ------------------------------ 1 | 0 | 1(4,8V) ------------------------------ 0 | 1 | 1(4,8V) ------------------------------ 1 | 1 | ?(2,4V) ich verstehe auch nicht warum?
dann Probier mal so main() { DDRD = 0xFF; PORTD = 0x00; DDRC = 0x00; PORTC = 0x06; do { if ((PINC&0x06) == 0x06) PORTD = 0x00; else PORTD = 0xFF; } while (true); }
Jetzt hat geklappt. Ich habe wie Sie mir empfohlen haben statt PORTC = 0x02; PORTC = 0x04; Das eingesetzt: PORTC = 0x02|0x04; Danke So wies aussieht ich muss das Grundwissen lernen. Weiß jemand wo finde ich spezial C-Sprache für Atmel Mikricontroller.
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.