Forum: Mikrocontroller und Digitale Elektronik Programm läuft nicht, wieso eigentl. nicht ??


von Studiologe (Gast)


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

von Olaf_K (Gast)


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

von johnny.m (Gast)


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

von Studiologe (Gast)


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

von Studiologe (Gast)


Angehängte Dateien:

Lesenswert?

Hey jo,
hätt da noch ne klitze kleine Frage, hab im Anhang mein Datenblatt des
ATMega16 Controllers, könnt ihr mir sagen wie ich die dort drauf
montierten Relais schalte, also anspreche ??

von Thomas Forster (Gast)


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

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
Noch kein Account? Hier anmelden.