mikrocontroller.net

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


Autor: Helge Böhr (Gast)
Datum:

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

Autor: Conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Es grüsst,
Arno

Autor: Helge Böhr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Also bei Port A : PORTA = 0xFF;  ?

Dann ist der Pullup Widerstand gesetzt, oder ?

Aber funktioniert auch nicht.

Gruss Helge

Autor: Branko Golubovic (Gast)
Datum:

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

Autor: Martin Schneider (Gast)
Datum:

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

Vorwiderstand?
LED falsch gepolt?

Autor: Andreas Haimberger (Gast)
Datum:

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

Autor: Helge Böhr (Gast)
Datum:

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

Autor: Michael Schueller (Gast)
Datum:

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

Autor: Andreas Haimberger (Gast)
Datum:

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

Autor: Helge Böhr (Gast)
Datum:

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

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.