Hi Ihr lieben!
Ich habe mir vorgenommen ein kleines Lauflicht zu machen.
Jedoch bekomme ich meine LED'S einfach nicht angesteuert... hmm und ich
kann mir das einfach nicht erklären ...
Ich Messe an den Ausgängen die ich ansteuere 0,3- 0,5 V gegenüber
Masse... obwohl eigentlich ein High anliegen sollte..
Vielleicht kann mir jemand Helfen, der sich mit typischen Anfänger
fehlern auskennt :D
Ich habe ein Prinzipschaltbild beigefügt...
Danke
Gruß Nils
Hmm mag sein jedoch funktioniert meine Programmierung auf dem
Entwicklungsboard STK 500 ...
Ich Programmiere übrigens mit BASCOM ..
habe einfach mal ein TEST gemacht um die 4 LED`S anzusteuern..
CODE:
$regfile = "m8515.dat"
Config Portd = Output
Portd = &B00001111
Do
Loop
Kann ja eigentlich nicht viel falsch sein, da es nicht viel
Beinhaltet...
Franz-Rainer wrote:
> Der AVR kann nur einige mA Strom liefern.> In dieser Schaltung funktionieren nur LED's mit max.2-3mA.> Wie groß sind die Vorwiderstände?
Und sind die LEDs überhaupt richtigrum angeschlossen ?
>Der AVR kann nur einige mA Strom liefern.>In dieser Schaltung funktionieren nur LED's mit max.2-3mA.
Einige zig-mA... Dazu bietet sich an, sich das Datenblatt anzugucken:
Der AVR kann bis zu 40mA pro pin schalten, wobei es maximal 200mA
verträgt.
(Seite 197 des vollständigen Datenblattes)
>Hmm mag sein jedoch funktioniert meine Programmierung auf dem>Entwicklungsboard STK 500 ...
Die LEDs des STK500 leuchten, wenn man eine 0 in den Port schreibt.
Deine Schaltung erfordert aber eine 1...
[OT]
Und wieder ein Bascom-"Programmierer", der sämtliche Klischees
erfüllt...
[/OT]
Man schaltet bei einem AVR über "0" und legt die LED`s mit dem
Weiderstand an VCC, da der AVR nur 2-3 mA bei "1" liefern kann und bei
"0" können es 20mA sein. oder du nimmst Low Curent LED`s die haben 2V
und 2mA dann klapt es immer 1,5K Ohm gegen 5V und los gehts.
+5V o-------|____|-----|>|--------o Port AVR
Bei normalen LED's die ca. 10-20mA brauchen:
R = 220R
LED's rumdrehen von Masse abklemmen und an +5V legen.
Eine LED leuchtet dann wenn du eine "0" ausgibst.
Die Widerstände liegen um bei je 300 Ohm ... hmm das würde natürlich
heißen, das ca. Strom von 10mA fließen sollte, pro pin.. ...
Hmm im Datenblatt hatte ich aber gesehen das I/O Pins bis 40 mA belastet
werden können ..
Und einen maximalen Strom von 200mA ins gesammt gefordert werden .. kann
.. oder irre ich da ??
... würde eigentlich Sinn ergeben .. denn alle Ausgänge die Auf High
gestellt sind .. liegen bei 0,3-0,5 V ..
Hmm ist es möglich, dass die Spannung am Controller zusammengebrochen
ist ???
Gruß Nils
Ja genau.
[OT]
Und wieder ein Bascom-"Programmierer", der sämtliche Klischees
erfüllt...
[/OT]
Leute hackt nicht immer auf Anfängern rum.
Auch wir wurden nicht mit unserem Wissen geboren.
Auch wie man Datenblätter richt liest muß man lernen.
Mit der Zeit klappt das aber.
Also nur Mut zum Fehler.
Rahul Der trollige wrote:
> [OT]> Und wieder ein Bascom-"Programmierer", der sämtliche Klischees> erfüllt...> [/OT]http://www.8052.com/forum/read.phtml?id=136269
"DO NOT BE ANNOYING, DO NOT BE EASILY ANNOYED.
Peter
Hallo!
Also für mich klingt das so, als ob der Port nicht als Ausgang
konfiguriert ist, sondern als Eingang. Dann schaltet man mit PORTD nur
die Pullups ein, was dann dieses Verhalten erklärt. Überprüfe doch noch
mal, ob diese Zeile:
Config Portd = Output
auch wirlich das tut, was man von ihr denkt. Damit werden dann immer
alle 8 Pins gleichzeitig als Ausgang koniguriert?
Ich schließe meine LEDs auch immer so wie oben an und die AVRs können
auch den entsprechenden Strom liefern. Im Datenblatt zum Mega8535 steht
folgendes:
"Although each I/O port can source more than the test conditions (20mA
at Vcc=5V, 10mA at Vcc=3V) ... ports D0 - D3 should not exceed 100 mA
... ports D4 - D7 should not exceed 100mA"
Viel Erfolg!
Grüße,
Christian, der noch nie in BASCOM programmiert hat
Hmm also ist es erforderlich einen Widerstand parallel zum REST zu
schalten??
Naja eigentlich sollten die Ports schon richtig Konfiguriert sein!
Habe sie als Ausgang deklariert und das STK 500 beweißt mir, dass es
nicht falsch sein kann Dort kann ich ja meine LED`s auf Masse schalten
und sie Leuchten.
Was mich einfach nur Verwirrt ist, dass ich an den Ausgängen, wo ich ein
High habe keine 5 V habe.
Habe gerade mal die LED's abgeklemmt und die Spannungen nochmal
gemessen.
Es ist das selbe...
Ich muss wohl in der HARDWARE irgendwo einen fehler eingebaut haben,
wenn ich noch nicht mal 5 V habe, wenn ich ledeglich die VDD - GND und
RESET angeschlossen habe ?? !!
Verdammt ich weiß einfach nicht was falsch sein könnte..
Gruß Nils
Nils wrote:
> Naja eigentlich sollten die Ports schon richtig Konfiguriert sein!> Habe sie als Ausgang deklariert und das STK 500 beweißt mir, dass es> nicht falsch sein kann Dort kann ich ja meine LED`s auf Masse schalten> und sie Leuchten.
Und was sagen die Fuses ?
Hast Du überhaupt den internen RC-Oszillator eingeschaltet ?
Das STK500 liefert ja einen Takt (3,6MHz).
Und das Brownout-Reset sollte man auch immer einschalten.
Peter
Hmm ich schätze mal da könnte der Fehler liegen...
Das habe ich nicht ..
Doch ich bin ein wenig überfragt, für welchen Frequenz ich mich bei dem
internen RC-Oszillator entscheiden sollte?
Sorry Brownout Reset sagt mir gar nichts :( .. kann mir das mal jemand
erläutern??
Danke Gruß Nils
Nils!
wie wagst Du es, in so einem *HIGHTECH*- Forum voller C-Programmierer so
eine Frage zu stellen.
Als BASCOM Anfänger solltest Du in den Keller gehen und Dich in die Ecke
stellen und schämen!!
Nun zu Deinem Problem:
Mit der "falsch" angeschlossenen LED haben die bisherigen Posts sicher
recht, dies ist nicht "State of the art"
Zum BASCOM-Problem bin ich selbst schon x-mal hereingefallen, deshalb
verwende ich jetzt immer direkt die Register:
DDRD =&B00001111 ' in Deinem Fall.
Mit diesem Programm solltest Du ein Lauflicht an Deinen LEDs erhalten:
$regfile = "m8515.dat"
Dim Bpinvar As Byte
Bpinvar = 0
Ddrd = &B00001111 'this will
set portD1.0,portD.1,portD.2 and portD.3 to use as outputs
Portd = &B00001111
Do
Portd = Bpinvar
Incr Bpinvar
Bpinvar = Bpinvar And &B00001111
waitms 500
Loop
************
Testen kannst Du das mit dem eingebauten Simulator. (Ja, das gibt es bei
BASCOM und ist im Preis enthalten) Unter LCD findest Du die Portanzeige.
Pass auch auf bei der Inputfunktion! PORT, PIN, DDRx sind allesamt sehr
unklar beschrieben.
Nochmals ENTSCHULDIGUNG an alle C-Programmierer, daß hier auch ein paar
BASCOM-Looser sind.
Ich bin bekennender BASCOM-Anwender und kann in C und C++ programmieren.
Allerdings nicht mit keiner dieser GNU-Compiler. Ich verwende meine Zeit
zum Programmieren und nicht um in stundenlanger Arbeit erst einmal meine
Entwicklungsumgebung zum Laufen zu bringen.
Wenn ich ein Loch bohren will, kaufe ich mir eine vernünftige
Bohrmaschine und fange nicht an, mit Schweissdraht einen Drillbohrer zu
basteln. BASTA.
Gruß, mach weiter mit BASCOM, Lukas
Hier ein Auszug der BASCOM-Hilfe
'Again, note that the AVR port pins have a data direction register
'when you want to use a pin as an input it must be set low first
'you can do this by writing zeros to the DDRx:
'DDRB =&B11110000 'this will set portb1.0,portb.1,portb.2 and portb.3
to use as inputs.
'So : when you want to use a pin as an input set it low first in the
DDRx!
' and read with PINx
' and when you want to use the pin as output, write a 1 first
' and write the value to PORTx
[OT]
Da habe ich ja mal wieder was schönes angefangen.
Mit meinem OT-Beitrag (den ich mir doch lieber hätte verkneifen sollen),
wollte ich eigentlich eher auf die Vorgehensweise eingehen - Ist halt
nach hinten losgegangen...
Aus den Nils Postings ist leider nicht hervorgegangen, dass er mehr als
nur diese eine Bit-Kombination ausprobiert hat oder vielleicht mal das
Multimeter gezückt hat.
Die Datenblattangabe bezog sich auch auf Franz-Rainers Posting, der hier
mit falschen Tatsachen umsich geworfen hat. Ergo war die
Verallgemeinerung auf alle Bascom-"Programmierer" etwas überflüssig.
Entschuldigt bitte, dass ich mal wieder nicht an mich halten konnte.
[/OT]
Ich Danke vielmals das ihr mir geholfen habt.
Ich habe es endlich zum Funktionieren gebracht und das hätte ich ohne
Eure Hilfe nie geschaft.
Mir war nicht bewusst, dass ich den internen Oszillator noch
Konfigurieren muss. Habe die Vorlage die vom STK 500 gegeben wird als
selbstverständlich angesehen und nicht damit gerechnet, dass der interne
ozillator nicht voreingestellt ist..
Ich hoffe ich habe nicht zu viele Nerven gekostet ...
Danke
Gruß Nils
Habe mich auf den AT90S1200 bezogen, und seit dem nicht mehr um die
Ausgangsports gekümmert.
Ergab sich auch keine Notwendigkeit dazu, weil sie bei meinen Projekten
eh nie höher belastet wurden.
Output High Voltage I = 3 mA, V = 5V
I = 3 mA, V = 3V
(Ports B,D)
Gruß am Samstag