www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 - Pins auf Low, damit LEDs zunächst aus?


Autor: Nic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit,

ich bin absoluter Laie was Informatik betrifft und versuche
gerade für mein Projekt zwei RGB-Leds über eine
LED-Display-Taster-Kombination anzusteuern. Als µC verwende ich den
AT89S51, als Compiler Ride's Raisonance, um das Ganze in C zu schreiben.
Die LEDs sollen bei Drücken eines Tasters aufleuchten. Schalte ich das
Board ein, blinken die LEDs kurz auf und erlöschen sofort wieder. Ich
nehme mal an, das liegt an der invertierenden Logik des Controllers. Nun
zu meiner Frage: Gibt es irgendeine Möglichkeit, dieses Aufblinken nach
dem Einschaltvorgang zu verhindern? Wie setze ich die Pins nun auf Low? 
Wäre nett, wenn das mal jemand anhand des Quelltextes zeigen könnte.
Danke schon mal im Voraus!

Gruß Nic

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nic wrote:
> Mahlzeit,
>
> ich bin absoluter Laie was Informatik betrifft

Das merkt man :-)

In C beginnt die Programmausführung immer in der Funktion main()
main() muss auch main() heissen und kann keinen anderen Namen
tragen.

Da du kein main() hast, macht dein Controller irgendwas.
Was weiss kein Mensch genau.

Obwohl mich das eigentlich wundert. Eigentlich hätte sich
dein Linker beschweren müssen, dass er keine main() Funktion
findet.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beitrag "Ungewolltes Aufleuchten der LEDs nach Einschaltvorgang"

Hast wohl nicht die gewünschte Antwort bekommen ;-)

Autor: Nic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig, ich hab gedacht, ich probier's hier mal ohne dass es jemand 
merkt.
Sorry!

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Nic:
Dazu wäre es hilfreich, erstmal zu wissen, wie Du die LEDs angeschlossen 
hast, also zwischen Portpin und Versorgungsspannung oder zwischen 
Portpin und Masse (natürlich jeweils mit einem passenden Vorwiderstand). 
Wenn Du dann noch die Codesequenz postest, mit der Du die LED-Pins 
initialisierst, kann Dir vielleicht geholfen werden.

@Karl heinz:
Wer sagt denn, daß led.c die einzige Quelldatei des Projektes ist?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was Peter im anderen Thread meint:

Du musst die LED umlöten.
Bisher hast du sie wahrscheinlich so:

       µC Pin
   -----o-----------+
                    |
                   ---
                   | |
                   ---
                    |
                   ---
                   \ /
                   ---
                    |
   -----------------+-------- GND

du musst sie aber so umlöten

         -----------+-------- Vcc (+5V)
                    |
                   ---
                   | |
                   ---
                    |
                   ---
                   \ /
                   ---
          µC Pin    |
        ---o--------+


        --------------------- GND

D.h. um die LED leuchten zu lassen, muss eine 0 an den
Port Pin geschrieben werden. Bei einer 1 ist die LED aus.
Das meint man mit low-active: Wenn der Ausgang low (also 0)
ist, dann ist Funktionalität (in deinem Fall LED ein) eingeschaltet.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reinhard Max wrote:
> @Karl heinz:
> Wer sagt denn, daß led.c die einzige Quelldatei des Projektes ist?

Prinzipiell niemand.
Aber ich glaube nicht, dass ein Neuling, der mit LEDs Schwierigkeiten
hat, mehr als ein *.c File benutzt. :-)
Und ich glaube auch nicht, dass er mehr als 1 Funktion benutzt.
(nur um dem zuvor zu kommen)


Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:
> Aber ich glaube nicht, dass ein Neuling, der mit LEDs Schwierigkeiten
> hat, mehr als ein *.c File benutzt. :-)
> Und ich glaube auch nicht, dass er mehr als 1 Funktion benutzt.
> (nur um dem zuvor zu kommen)

Nun, irgendwo muß er die Portpins als Ausgänge initialisieren (IIRC sind 
sie im Reset-Zustand als Eingänge geschaltet). Täte er das nicht, würde 
er hier nicht fragen, warum sie beim einschalten kurz blinken, sondern 
warum er sie mit seiner Taste nicht ein- und ausschalten kann. Also muß 
irgendwo eine main() vorhanden sein ;)

Aber lassen wir Nic doch einfach selber antworten...

Autor: Nic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl Heinz,

das hab ich schon verstanden. Hab die LEDs auch so wie in Deinem zweiten 
Beispiel verlötet - nur eben die jeweiligen Kathoden über eine 
Transistorstufe angesteuert, da es sich schließlich um RGB-LEDs mit 
gemeinsamer Anode handelt.  Verstehe jetzt nur nicht, wie ich die 
LED-Portleitungen als Ausgang (also logisch NULL) hinkriege. Gibt es da 
irgendeinen Clear-Bit-Befehl, wie in Assembler? Wundert mich doch jetz 
etwas, dass das Programm einwandfrei läuft, bis auf das kurze 
Aufleuchten am Anfang. Trotzdem mal Danke!

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
z.B. LED = 0; dann ist sie ein
LED = 1; LED = aus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reinhard Max wrote:

> Aber lassen wir Nic doch einfach selber antworten...

Im Zweifelsfall hast du natürlich recht.

Also Nic.
Zeig doch mal dein ganzes Programm.

Autor: Nic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Anhang im ersten Beitrag ist mein gesamtes Programm bis jetzt. Weiß 
leider immer noch nicht wirklich, wie ich die Portleitungen als Aus- 
bzw. Eingang definiere. Ich glaub, da liegt auch das eigentliche Problem 
-  versteh nur immer noch nicht, wieso der Controller trotzdem das 
gemacht hat, was ich wollte. Also sehe ich das richtig? Wenn ich eine 
Portleitung mit "sbit" deklariere, steht sie mir als Eingang zur 
Verfügung (so steht's ja schließlich im Datenblatt)? Dann wären ja auch 
meine Taster definiert, wie aber deklariere ich die Ausgänge zu den Leds 
(r_led, g_led, b_led), damit ich diese dann auch ansteuern kann???

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du das Tutorial auf dieser Seite schon mal angeschaut?

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> sbit r_led = P1^0;

r_led = 1; Pin hat highpegel
r_led = 0; Pin hat lowpegel

alles klar ?

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du den Transistor noch dazwischen hängen hast, ist die Logik
(low aktiv zu sein) ja wieder in die Dutten.

Die µC Pins sind nach dem Reset High --> Transistor steuert deine
RGB-Kathoden nach Masse durch --> LEDs an.

Nun geht dein Programm los, stellt fest dass dein Taster losgelassen
ist --> LEDs wieder aus.

Alles klar?

Der 8051er benötigt keine Definitionen für Ein- oder Ausgang.
die Pins sind Open-Drain und ziehen nur nach Masse vernünftig
runter. Nach Plus schalten sie über Pullups. Können also nur
"sinken" und nicht "sourcen".

Autor: Nic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an alle, das wollt ich wissen. Klasse Forum, weiter so!

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.