Forum: Mikrocontroller und Digitale Elektronik Taster für LED in Codevision


von Helge Böhr (Gast)


Lesenswert?

Hallo.

Ich wollte gerne eine LED zum leuchten bringen, wenn ich einen Taster
drücke.
Folgenden Code hab ich verwendet, der Compiler ist Codevision:

#include <mega32.h>

void main (void)
{
PORTA = 0x00;
DDRA  = 0x00;

if (PINA.1)
{
PORTB = 0xFF;
DDRB  = 0xFF;
}
}

Der Compiler kompiliert ohne Fehler und Warnungen, nur die LED an PORT
A leuchtet nicht.

Kann mir vielleicht jemand helfen ?

Gruß Helge

von Conlost (Gast)


Lesenswert?

Hallo,

eventuell Pullup Widerstände einschalten?
Oha das ist ja C-Code, mein Kopf schmerzt.

Es grüsst,
Arno

von Helge Böhr (Gast)


Lesenswert?

Hallo.

Also bei Port A : PORTA = 0xFF;  ?

Dann ist der Pullup Widerstand gesetzt, oder ?

Aber funktioniert auch nicht.

Gruss Helge

von Branko Golubovic (Gast)


Lesenswert?

void main (void)
{
PORTA = 0xFF;
DDRA  = 0x00;
 while(1)  //Endlosschleife!
 {
  if (PINA.1)
  {
  PORTB = 0xFF;
  DDRB  = 0xFF;
  }
 }
}

von Martin Schneider (Gast)


Lesenswert?

Wenn der Text stimmt, steuerst du Port B an - eine LED an Port A
wird da wohl nicht leuchten...

Vorwiderstand?
LED falsch gepolt?

von Andreas Haimberger (Gast)


Lesenswert?

Wenn dein Programm wirklich exakt so wie oben gepostet aussieht, ist es
kein Wunder, dass du nie die LED leuchten siehst. Deine if-Abfrage
gehört in die while-Schleife, die CodevisionAVR freundlicherweise
automatisch anlegt, wenn du den Codegenerator benutzt, steht ja auch
deutlich da:

while (1)
      {
      // Place your code here

      };

In deinem Code kann ich so eine Endlos-Schleife nicht entdecken. Dein
gepostetes Programm überprüft lediglich ein einziges mal, ein paar
Mikrosekunden nach dem Einschalten, ob PINA.1 High ist, dann macht es
nichts mehr (weil eben die Endlos-Schleife fehlt). Wenn beim Hochfahren
PINA.1 noch auf Low ist (weil du den Taster erst ein paar Sekunden nach
dem Einschalten betätigst), dann wird die LED nie leuchten.

In den Teil der main-Funktion, der  vor der Haupt-Schleife liegt,
gehören lediglich Programmteile, die nur ein einziges mal beim
Hochfahren ausgeführt werden. Also diverse Initialisierungen (LCD,
Ports, Timer) oder z.B. die einmalige Anzeige eines Begrüßungstextes am
LCD, der nur für kurze Zeit beim Hochfahren sichtbar sein soll (z.B.
Anzeige der Software-Version).

Es wäre vielleicht empfehlenswert, wenn du dir mal ein Buch über
C-Programmierung für Mikrocontroller durchliest.

MFG, Andy

von Helge Böhr (Gast)


Lesenswert?

Danke erstmal für die ausführliche Antwort !

if (PINA.1)
{...

bedeutet ja, dass die Schleife durchlaufen wird, wenn mittels des
Tasters PINA1 auf VCC gezogen wird, oder ?

Gruss Helge

von Michael Schueller (Gast)


Lesenswert?

Hi,

Du hast keine Schleife.
Die IF-Abfrage ist keine Schleifenkonstrukt, sondern lediglich eine
Abfrage (wie der Name schon sagt). Sie wird lediglich einmal
ausgeführt, solange Du sie nicht in eine Schleife setzt.
Wie oben schon geschrieben, solltest Du also Deine IF-Abfrage in eine
Schleife betten:
WHILE (1)
{
//hier kommt Dein Code
};
Außerdem weiß ich nicht genau, wie Du Deine LED´s angeschlossen hast.
Wenn sie nach Masse geschaltet werden, musst Du natürlich PORTB=0x00
setzen.
Außerdem macht es meiner Meinung nach Sinn, wenn Du erst die Ports
initialisierst und dann das eigentliche Programm startest...

Gruß,

Doom

von Andreas Haimberger (Gast)


Lesenswert?

if (Bedingung)
{
mach was
};

ist keine Schleife.

Siehe meinen letzten Satz im vorigen Beitrag. Dir fehlen ganz
essentielle Grundlagen, so kann das nichts werden. Ist nicht böse
gemeint, aber wenn du noch nicht mal eine Buchseite zum Thema
C-Programmierung gelesen hast, wirst du nur Frustration erleben und
bald das Handtuch werfen.

von Helge Böhr (Gast)


Lesenswert?

Ja O.k.

Ich glaub, ich muss mich mal ordentlich in die Grundlagen einlesen.
Ich wollte halt am Anfang schon ein kleines Erfolgserlebnis stehen
haben.

Danke nochmal allen Antwortenden

Gruss Helge

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.