Programm läuft nicht, wieso eigentl. nicht ??

Gast #301591
Lesenswert?

Hallo habe nun alles so wie ich es in den Tutorials gefunden habe
angeschlossen.
Also +5V -> R(10kOhm) -> PORTD0
GND -> Taster -> PORTD0
+5V -> R(330Ohm) -> grüne LED -> PORTA0
+5V -> R(330Ohm) -> rote  LED -> PORTA1

so wird nun der Taster gedrückt, soll die LED an PORTA0 (grün) leuchten
und die rote soll aus sein,
wird der Taster wieder losgelassen, grüne LED aus, rote wieder an....
hier das Programm:

#include <avr/io.h>
#include <stdint.h>

void main(void)
{
  DDRA = 0xff;        //Port A als Ausgang definieren
  DDRD = 0x00;        //PortD ist Eingang
  PORTA = 0b11111111;      //alle  LED  aus

  while(1)
  {
    if(PORTD == 0b11111110)
    {
      PORTA = 0b11111110;  //grüne  LED  an
    }
    else
    {
      PORTA = 0b11111101;  //rote  LED  an
    }
  }
}

Aber nur die rote LED leuchtet und das unabhängig ob ich den Schalter
drück oder nicht :(
Könnt ihr mir sagen, woran das liegt ??

DANKE ihr seid definitiv die allerbesten :D !!!!!!
Gast #301592
Lesenswert?

Wenn Du den PortD lesen willst, mußt Du PIND benutzen, also

...
while(1)
  {
    if(PIND == 0b11111110)
    {
...

Damit die unbenutzen Eingänge nicht herumklappern, solltest Du die
interen Pull-Ups zuschalten, also irgendwo am Anfang noch

PORTD = 0xff; //enable pull-ups

einfügen, dann kannst Du Dir auch den 10k-Widerstand am Taster sparen.

MfG Olaf
Gast #301593
Lesenswert?

Wenn Du das Tutorial WIRKLICH gelesen hättest, wüsstest Du, dass man das
PIND-Register und nicht das PORTD-Register abfragen muss... Außerdem
wirst Du ohne Taster-Entprellung eh keinen definierten Zustand kriegen
Gast #301594
Lesenswert?

DANKE olaf DANKE johnny.m

UUpps, ja stimmt
ihr voll recht, hätte ich besser lesen sollen :)
das mit der taster entprellung ist ne gute sache,
aber es läuft auch ohne und das macht mich schon verdammt stolz !!
ist ja erst mein dritter tag mit controllern!
Mach richtig bock !! :D
Gast #301596
Lesenswert?

Links neben PD2 sind wohl 2 Pins, genau ist das nicht zu erkennen.

wenn du an diese Pins, die dann über die Widerstände auf die
Transistoren gehen, 5V anlegst, ziehen die Relais an.

Du führst also diese an einen Pin des Atmega, z.B A3 oder A4, da du
diese ja schon als Ausgang gestetzt hast (DDRA=$FF) und kannst so die
Relais schalten: PORTA=0b00011000

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