mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STK500: LEDs?


Autor: Tim Sauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
als Anfänger verzweifle ich gerade mit dem simpelsten Programm der
Welt:

#include <avr/io.h>
int main (void)
{
  for (;;)
  {
    DDRB |= 0xFF;
    PORTB |= (1<<PORTB6) | (1<<PORTB7);
  }
}

WinAVR aktuell, AVRStudio 4.11.406, Service Pack 2, STK500, ATTiny26:
Ich habe es bisher so verstanden, daß PORTB6 und PORTB7 "high" sein
sollen. Wenn ich nun die Portheader anschließe, leuchten die LEDs für
PORTB0-5, 6 und 7 sind aus. Sollte es nicht genau andersrum sein?????
Im AVRStudio in der Simulation ist es auch so, nur nicht mit dem realen
Chip.

Gruß
Tim

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die led's am stk500 sind invertiert (via open collector) angeschlossen,
das ist so korrekt

Autor: Tim Sauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobi,
daß habe ich aber an keiner Stelle in der offiziellen Doku gefunden.
Ganz im Gegenteil: Unter "Description of user LEDs" ist eine normale
NPN-Transistorschaltung abgebildet; VTG (Voltage Target) über 10 kOhm
auf die Basis des Transistors. Im Kollektorzweig die LED und ein 150
Ohm-Widerstand an 5 V. Also sollte doch "high"/VTG auf die Basis des
Transistors diesen aufsteuern und die LED leuchten lassen?

Aber wenn Du Recht haben solltest, wäre das soooooo gemein. Als
Anfänger ist einem das nicht gerade förderlich, wenn sowas nicht in der
offiziellen Doku steht und man sich ewig im Kreis dreht und den Fehler
sucht. Und bisher finde ich die Doku von Atmel sehr gut.

Gruß
Tim

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann schau dir die Schaltung mal richtig an. Sie sorgt lediglich dafür,
dass man den AVR auch mit niedriger Spannung betreiben kann, ohne dass
die LEDs dunkler werden.

...

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine beschreibung war zwar nicht ganz korrekt, deine aber auch nicht
;)

die led ist dauerhaft gegen 5V geschaltet, der transistor ist
eigentlich fürs leuchten irrelevant. um die led anzuschalten, musst du
den pin auf gnd legen, da nur so durch die led ein strom fliessen kann,
da diese ja gegen 5V geschaltet ist. bei 5V am uC ausgang fliesst nix,
da keine potentialdifferenz da ist

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Meine beschreibung war zwar nicht ganz korrekt, deine aber auch nicht
;)"

Wieso?
Der Transistor ist in Basisschaltung.
- Kollektor über LED und R an +5V
- Basis über Widerstand fest auf VTG
- Emitter als Steueranschluss (der aber auch die Last aufbringen
  muss)

Die LED wird nur dann eingeschaltet, wenn der Emitter (also der Port)
um mindestens die Emitterdiodenstrecke negativer ist als die Basis,
also VTG. Damit ist einerseits die LED L-aktiv, andererseits ermöglicht
diese Schaltung den Betrieb des Target-AVRs mit weniger als 5V VTG. Denn
würde man LED und Widerstand direkt an den Port anschließen, bekäme man
bei VTG unter 3V die LED nicht mehr aus. :)

Oder irre ich mich da etwa??

Gruß...
...HanneS...

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@hannes
bei dir war alles korrekt (wie immer ;)
bloss bei tim hatte ich es so verstanden, dass er die invertierung noch
übersehen hatte, deshalb meine antwort

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz davon abgesehen verstehe ich Atmel nicht so ganz, ein
npn-Transistor, dessen Basis über einen R an die Portpins geht und
dessen Emitter an Masse liegt und an dessen Kollektor über einen R eine
LED nach 5P geht, hätte es doch auch getan und da wäre nix mit
Invertierung gewesen. Ist schon komisch manchmal, warum Hersteller das
so und so machen und nicht so, wie man sich das allgemein vorstell von
wegen 1 ist an und 0 ist aus...

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
L-aktiv ist aber üblich.
Einerseits wegen open-collector, andererseits können viele
Digitalbausteine und MC's mehr Strom senken als liefern.

...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Btw:

#include <avr/io.h>

int
main(void)
{
    DDRB = 0xFF;
    PORTB |= (1 << PB6) | (1 << PB7);

    for(;;)
        ;

    /* NEVEREACHED */
    return 1;
}

...macht das gleiche!

Das Datenrichtungsregister braucht nicht dauernd gesetzt zu werden, und
wenn Du an den Pins nichts ändern willst, brauchst Du auch deren
Register nicht unendlich oft zu beschreiben ;-)

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>...ein npn-Transistor, dessen Basis über einen R an die Portpins
geht...
>>und dessen Emitter an Masse liegt...hätte es doch auch getan...

Die Spannungsversorgung (VTG) für den eingesteckten AVR-Baustein
auf dem STK-500 kann unabhängig von der Versogungsspannung des STK-500
(VCC 5V)
zwischen 1,8V und 6V je nach Chip in AVR-Studio eingestellt werden.

Die LED-Schaltung auf dem STK-500 sorgt dafür das die LED in diesem
gesamten Spannunsbereich sicher ein- und ausgeschaltet werden kann,
und das sie immer mit etwa der gleichen Helligkeit leuchtet,
egal ob das Port bei "1" auf 1,8V oder auf 6V schaltet.

Eine saubere und sinnvolle Sache.
Im übrigen stimme ich meinen Vorredner zu:
LEDs invertiert anzusteuern ist absolut üblich.

MfG Willi

Autor: Tim Sauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ all:
Besten Dank für die Erklärungen. Ich hab tatsächlich nicht geblickt,
daß der Port an den Emitter angeschlossen ist und damit der Transistor
gesteuert wird. Ich hatte es in der Doku so verstanden (wie schon oben
beschrieben), daß VTG die jeweilige Ausgangsspannung des Ports ist
(auch = Betriebsspannung des Boards). Mit dem "gleichmäßig leuchten"
dachte ich, daß der Trasnsistor bei VTG 1,6 V gegen Masse schon voll
aufsteuert und bei VTG 6 V sowieso.
Trotzdem wäre ein simpler Nebensatz a la "invertierende LEDs" nicht
zuviel verlangt.

@ HanneS:
Ich muß wohl mal wieder meine alten Lehrbücher vorkramen, denn ich
hätte auf Emitterschaltung getippt (liegt aber vielleicht auch an der
o.g. irrigen Annahme)

@ OldBug:
Besten Dank für den Tip, wieder was dazu gelernt. Ich hab in den ganzen
Beispielprogrammen immer nur die endless mainloop gesehen, so daß ich
hier gar nicht über den Sinn nachgedacht hab (nach dem Motto "macht
man halt so ..."

Gruß
Tim

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie auch immer, da auf dem Bord 5V IMMER an sind und 1,8 - 6V IMMER eine
Transistorbasis auch über einen Strombegrenzungswiderstand durchsteuern,
hätte ein gleichmäßiges Leuchten der LEDs auch in oben beschriebener
Manier funktioniert. "High" sollte meiner Meinung nach nicht mit
einer ausgeschalteten LED quittiert werden - oder man sollte die
Möglichkeit haben, dies selbst zu entscheiden (umschaltbar?). Wenn
man´s weiß, macht man allerdings nicht allzuoft den Fehler, auf ein
Licht zu warten, wo keines kommen kann... nichts für ungut.

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.