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
die led's am stk500 sind invertiert (via open collector) angeschlossen, das ist so korrekt
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
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. ...
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
"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...
@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
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...
L-aktiv ist aber üblich. Einerseits wegen open-collector, andererseits können viele Digitalbausteine und MC's mehr Strom senken als liefern. ...
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 ;-)
>>...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
@ 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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.