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);
}
//----------------------------------------------------------------------
--
Gast
#1091283
Zunächst...was meinst du mit PINC 04=1? Ist damit der Pin #4 am PortC gemeint?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
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 | ???
Gast
#1091316
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?
Gast
#1091445
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.
Gast
#1091464
selbsterkenntnis ist immer was wert:) viel glück
Gast
#1091564
C-Sprache für Atmel Mikricontroller gibt's auf Atmel Seite
Gast
#1091583
Hier ein Tutorial für C: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.