www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C-Program für Atmega8


Autor: P. Imhof (pimi)
Datum:

Bewertung
0 lesenswert
nicht 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);
}
//---------------------------------------------------------------------- 
--

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zunächst...was meinst du mit PINC 04=1? Ist damit der Pin #4 am PortC 
gemeint?
main()
{
    DDRD = 0xFF;
    DDRC = 0x00;
    PORTC = 0x02;
    PORTC = 0x04;

    do {
        if (!(PINC&0x02)||!(PINC&0x04))
            PORTD = 0xFF;
          else
            PORTD = 0x00;
    } while (true);
}

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

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal so

main()
{
    DDRD = 0xFF;
    PORTD = 0x00;
    DDRC = 0x00;
    PORTC = 0x06;

    do {
        if (!(PINC&0x06))
            PORTD = 0xFF;
        else
            PORTD = 0x00;
    } while (true);
}

Autor: P. Imhof (pimi)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);
}

Autor: P. Imhof (pimi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
selbsterkenntnis ist immer was wert:) viel glück

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C-Sprache für Atmel Mikricontroller gibt's auf Atmel Seite

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.