Taster für LED in Codevision

Gast #316725
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
Gast #316730
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
Gast #316732
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
Gast #316733
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.
Gast #316734
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.