C-Program für Atmega8

OP #1091274
Lesenswert?

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
Lesenswert?

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     |  ???
OP #1091433
Lesenswert?

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?
OP #1091448
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren