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.