Forum: Mikrocontroller und Digitale Elektronik Lampensteuerung mit ATmega16L und ULN2003A


von Sebastian H. (Gast)


Lesenswert?

Moin,

also ich gehöre wohl zu den blutigen Anfängern - für etwas Hilfe wäre
ich daher sehr dankbar. Habe mir schon einen Wolf gesucht mit Google
und hier im Board, aber als Anfänger tut man sich mit den Suchbegriffen
auch noch etwas schwer. Also, bitte seit gnädig ;-)

Ich habe mir ein Programm zum Steuern von Lampen (LEDs oder 5V-Birnen)
geschrieben und das in den ATmega geladen. Das ganze konnte ich in der
Uni machen, wo mir das STK500 zur Verfügung steht. Habe dann auch
gleichmal mit den Tastern und LEDs mein Programm überprüfen können.
Soweit so gut.

Jetzt möchte ich mir meine eigene Schaltung auf einem Steckbrett
aufbauen. Leider scheint das ganze nicht zu fruchten.

Was muss man denn zwingend anschließen? VCC, GND, nochmal GND und AVCC
(Pin 10,11,31,30) habe ich entsprechend geschaltet. PortA nehme ich als
Eingang, PortB und PortC als Ausgänge. Soll ich die PortA-Eingänge alle
unbeschaltet lassen oder alle auf VCC legen?
Was ist mit dem Reset-Pin. Muss man da nochetwas schalten?

So nächstes Problem ist dann der Darlington Treiber. Ich glaube ich bin
einfach zu blöd dafür. Schließt man GND an, liegt der Pegel auch sofort
an allen Eingängen... hüstel Ist das OK? Ich benötige den Treiber, da
ich die 5V Birnchen ja nicht direkt an den MicroController hängen kann.
Ich hätte jetzt einfach die PortB und PortC-Ausgänge jeweils mit den
Eingängen des ULN2003A verbunden. Zusätzlich noch GND angeschlossen und
gehoft, das an den Ausgängen was gescheites rauskommt und ich die
Birchen direkt anschließen kann. Leider bis jetzt ohne Erfolg.

Naja, vielleicht kann mir ja schonmal jemand ein bisschen helfen.
Vielen DANK schonmal.

Bye,
 Sebi

von Hubert (Gast)


Lesenswert?

Unbeschaltete Eingänge als Eingang prog., und interne Pullup
aktivieren.
Reset mit 10k nach VCC. Von den Ausgängen des ULN mal eine Lampe nach
Plus, kann nur leuchten.

von ...HanneS... (Gast)


Lesenswert?

Welcher ATmega??? Es gibt da viele verschiedene.

...

von Christof Krüger (Gast)


Lesenswert?

siehe Threadtitel ;)

von Rahul (Gast)


Lesenswert?

deine Birnchen werden noch eine Versorgungsspannung brauchen.
Mal doch mal deinen Schaltplan auf.
Die Birnchen mußt du zwischen dem Ausgang und +5V betreiben (ich gehe
davon aus, dass du soweit die Sache selbst hinbekommen hast).
Zum Test, ob die ULN-Bausteine funktionieren, kannst du einfach mal den
Eingang mit 5V betun. Dann sollte die Lampe leuchten.
Zum Reset-Pin: im (complete) Datenblatt findet man eigentlich immer
eine Beschaltung: 100nF gegen Masse und 4,7KOhm gegen Vcc. (ich kann
mich jetzt von den Werten auch irren).
Der Reset muß bis zum Ende der Einschwingphase des Oszillators auf
Masse gezogen sein, damit ein stabiler Betrieb möglich ist.

von Sebastian H. (Gast)


Lesenswert?

Hi hi,

also schonmal vielen Dank für die vielen Antworten. Ich habe zumindest
meinen ULN2003A jetzt zum Laufen gebracht. Ich hatte mich bis jetzt
immer net so gedraut, da wirklich noch 5V+ an die Eingänge zu hängen,
wenn da schon GND anliegt.
Aber siehe da, es geht doch und die Birchen leuchten. Vielen Dank!

Jetzt werde ich das noch mit dem ATmega hinbekommen. Werde morgen mal
ein paar Widerstände einkaufen gehen.

@Rahul: Ist das wirklich nötig mit dem Kondensator und gegen Masse
etc.? Der MikroController kommt in eine Modelllok und soll dort die
Lampensteuerung übernehmen. D.h. zunächst hat er nie Strom und dann
wird 24V auf die Gleise gegeben. Durch meine Schaltung kommt dann
natürlich nur 5V an. Ab jetzt sollten die Lampen leuchten. Irgendwann
wird dann wieder die Schienenspannung weggenommen und die Lampen
sollten jetzt auch nicht mehr leuchten. In der Zwischenzeit spult der
MikroController halt sein Programm ab. Reicht es da dann nicht, den
Reset-Pin mit 10k auf Vcc zu ziehen, wie von Hubert vorgeschlagen??

Vielen Dank nochmal,
 Sebastian

von Sebastian H. (Gast)


Lesenswert?

Hallo,

kann mir bitte nochmal jemand helfen? Habe heute Widerstände eingekauft
und versucht den MicroController endlich zum Laufen zu bekommen, aber es
klappt immer noch nicht.

Nochmal kurz zur Erklärung: In einem STK500 gesteckt und PortA mit den
Tastern, PortB mit den LEDs verbunden haben alle LEDs geleuchtet.

Habe das jetzt versucht nachzubauen auf einem Steckbrett. Anbei mal der
Schaltplan. Habe ich da noch irgendwas vergessen oder falsch gemacht?
An den Ausgänge messe ich nur 0,36V. Irgendwie habe ich das Gefühl,
dass der MicroController noch gar nicht arbeitet. Den ULN2003A habe ich
mal weggelassen - einzeln getestet hat der ja funktioniert.

Schaltplan:
<img src="http://www.spur-iim.de/atmel/atmega16.jpg">;


Bin für jeden Hinweis dankbar und hoffe auf Eure Unterstützung.

TIA,
 Sebastian

von Dirk (Gast)


Lesenswert?

Hi,

die ganzen Pull Up Widerstaende (rechts) kannst du dir sparen. Du
kannst dafuer die internen aktivieren.

Hm es koennte sein das der intere R-C Oszillator deaktiviert ist und du
einen Quarz bzw Quarzoszillator anschliessen musst.

Mfg
Dirk

von Sebastian H. (Gast)


Lesenswert?

Hi Dirk,

Du meinst sonst müßte es eigentlich ok sein, oder?

Du könntest nämlich wirklich recht haben mit Deiner Vermutung. Ich habe
mich darum nicht gekümmert - hatte jetzt gerade nachgelesen, dass
standardmäßig aber die interne Clock verwendet wird.
Dann habe ich mal einen Blick ins AVRStudio geworfen und da ist bei den
Fuses ein Hacken bei "Ext. Crystal/Resonator High Freq.; Start-up time:
16K CK + 64 ms; [CKSEL=1111 SUT=11]"
Ich habe allerdings nicht mit diesem PC programmiert, aber alle Dateien
des Projekts übertragen - könnte also tatsächlich so sein, dass da in
der Uni was falsch eingestellt war und mir das nicht aufgefallen ist.
Hat das STK500 denn eine externe Clock? Wahrscheinlich schon, oder?

Werde ich also höchst wahrscheinlich nochmal neu programmieren
müssen... grummel Und das wo ich im Moment sehr weit weg von der Uni
bin.

Sonst noch Ideen??

LG,
 Sebastian

von Sebastian H. (Gast)


Lesenswert?

Hi,

noch ne Frage: Werden denn die Fuses überhaupt jedesmal neu gesetzt?
Eigentlich habe ich ja nur meinen Assembler-Code in den Controller
geladen. Verwendet habe ich dazu das AVRStudio von Atmel.

Und in meinem Programm passiert auch nix ausergewöhnliches: Ich setze
am Anfang nur die Ports:
ldi r30, 0xFF ;PortB und C als Ausgang
out $17, r30
out $14, r30

ldi r31, 0x00 ;PortA als Eingang
out $1a, r31

Bye,
 Sebastian

von Rahul (Gast)


Lesenswert?

Das ist alles, was dein Programm machen soll?
Kein Wunder, dass da nichts passiert...

von Christof Krüger (Gast)


Lesenswert?

Statt der direkten IO-Adressen würde ich an deiner Stelle eher DDRA,
DDRB, DDRC verwenden.

Damit setzt du ja aber nur die Richtung der Ports fest, wie wäre es mal
mit

ldi r16, 0xff
out PORTB, r16

(oder halt nen anderen Port)

von Sebastian H. (Gast)


Lesenswert?

Hi,

sorry, natürlich passiert da noch mehr. Klar schreibe ich auch mal was
auf den Ausgang raus. Ich sagte ja, dass in einem STK500 alle LEDs
zunächst Brennen. Ich wollte nicht das gesamte Programm
veröffentlichen, nur zeigen, was ich an "Einstellungen" vorgenommen
habe.

So long,
 Sebastian

von Rahul (Gast)


Lesenswert?

Beim STK500 sind die LED low-active, sprich wenn man eine 0 an den Port
schreibt gehen sie an. Beim ULN ist es anders herum

von Sebastian H. (Gast)


Lesenswert?

Hi,

ich bin's wieder. Ich habe heute einen neuen Versuch gestartet, nur um
wieder auf der Nase zu landen. Vielleicht könnt Ihr euch einfach nochmal
meinem Problem annehmen? Das wäre sehr lieb!!

Ich habe einen neuen ATmega16 genommen, dessen FUSES wirklich auf den
Standardwerten gesetzt sind (insbesondere Int. RC Oscilator aktiv).
Als Programm habe ich das aus dem I/O-Grundlagen Workshop genommen, das
je nach Eingang genau das auch wieder auf den Ausgang legt.
Da es kein riesen Sourcecode ist, stelle ich ihn hier gerade nochmal
ein (hoffe das ist OK):
 ldi r16, 0xFF
 out DDRB, r16     ;Port B durch Ausgabe von 0xFF ins
                   ;Richtungsregister DDRB als Ausgang konfigurieren
 ldi r16, 0x00
 out DDRA, r16     ;Port A durch Ausgabe von 0x00 ins
                   ;Richtungsregister DDRA als Eingang konfigurieren
loop:
 in r16, PINA      ;an Port A anliegende Werte (Taster) nach r16
                   ;einlesen
 out PORTB, r16    ;Inhalt von r16 an Port B ausgeben
 rjmp loop         ;Sprung zu "loop:" -> Endlosschleife

In einem STK500 getestet. Natürlich funktioniert alles. Dann aufs
Steckbrett. Und wieder geht nix.
/Reset über 10kOhm an 5V+
AVCC und VCC an 5V+
2xGND natürlilch an Ground
Dann an die Eingänge von Port A entsprechend dem Workshop
Pullup-Widerstände gesteckt und an den Port B die LEDs angeschlossen.

Es leuchtet nix!!!

Kann das sein?? Was ist denn noch falsch? Das kann doch nur ein ganz
dummer dummer Fehler sein, oder?

Vielen Dank für Eure Vorschläge.

Bye,
 Sebastian

von J-G (Gast)


Lesenswert?

Woher beziehst du die 5V?
Ist aber Gleichstromm, oder? (blöde Frage ich weiß, aber bei Eisenbahn
muß man da aufpassen).
Vielleicht nochmal besser zwei 100nF (keramische) Kondensatoren direkt
an die VCC und AVCC Pins auf GND stecken. Und vielleicht nochmal ein
10uF Kondensator irgendwo an die +5V (auf GND).
Vielleicht ist deine 5V ja "schmutzig".
Dein Programm und deine Beschaltung scheint mir ansonsten OK zu sein.

Im STK sollte bei den Fuses nur ein Haken irgendwo bei "Int. RC Osc."
sein und die beiden bei "Flash Size" und "Brown-out detection
level", die aber egal sind. Sonst keine Haken dort.

jörn

von Rahul (Gast)


Lesenswert?

wie wäre es denn, den Controller erst mal im STK zu lassen, und die LEDs
und Taster über die Port-Leitungen nacheinander anzuschliessen; sprich
erst mal testen, ob das mit den Tastern vom Steckbrett funktioniert und
dann testen, ob die LEDs das machen, was sie machen sollen. Dafür sind
die Ports vom STK ja alle rausgeführt...

von Sebastian H. (Gast)


Lesenswert?

Oh mann.... Jörn hat voll ins Schwartze getroffen!! Danke Jörn, hast ein
kühles Bier bei mir gut!

Ich hatte das mit einem Modellbahntrafo und einer
Spannungsbegrenzungsschaltung probiert. Aber das war anscheinend nicht
gut genug. Habe zum Testen gerade mal 3 Batterien in Reihe geschaltet
und es geht.

SUUUUPPPPERR!!! tierisch-freu

Ok, nochmal vielen Dank für alle, die sich meinem Problem angenommen
haben und somit letztendlich auch zur Lösung beigetragen haben. Ich
werde mich jetzt mal nach einer neuen Schaltung zur Spannungsbegrenzung
umschauen. Ggf. mache ich dann dazu einen neuen Thread auf. Fall dazu
noch jemand was sagen möchte hier schonmal die Eckdaten: 0-24V sowohl
Gleich- als auch Wechselstrom möglich.

Bis die Tage,
  Sebastian

von Rahul (Gast)


Lesenswert?

Brückengleichrichter, dicker Kondensator, Festspannungsregler...

von Sebastian H. (Gast)


Lesenswert?

Danke Rahul, jetzt läufts auch mit Strom aus der Steckdose bzw. vom
Eisenbahngleis - kann mir also die Batterien in Zukunft sparen.

Danke danke und nochmals danke!!!

von Rahul (Gast)


Lesenswert?

Stellt sich nur noch die Frage, was passiert, wenn die unter die
Mindestspannung kommst...

von J-G (Gast)


Lesenswert?

Fein das mein Tip geholfen hat :-)
nur wie komme ich jetzt an das (kühle) Bier? ;-)
Naja, ich nehme erstmal eins aus meinem Kühlschrank und bilde mir ein,
es wäre gerade per Mail gekommen.
jörn

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
Noch kein Account? Hier anmelden.