Forum: Mikrocontroller und Digitale Elektronik Läuft - läuft nicht


von Wolfgang (Gast)


Lesenswert?

Mein Atmega ist gegen mich :(. Auf meiner Entwicklungsplatine (myAVR 
Board MK2 USB PLUS) problemlos. Jetzt habe ich den Controller auf eine 
Platine mit meiner Schaltung gelötet, und die Ausgänge stehen... Das 
Programm scheint nicht zu laufen. Versorgungsspannung und Verdrahtung 
sollten OK sein.

Kann es was mit dem externen Takt von der Entwicklungsplatine zu tun 
haben???

von Sebastian W. (code)


Lesenswert?

Kannst du das Programm ohne Fehler in den Controller flashen?
Woran merkst du, dass dein Programm nicht läuft?

Poste doch mal deinen Schaltplan +Layout

mfg
code

von STK500-Besitzer (Gast)


Lesenswert?

Kann es sein, dass auf der Entwicklungsplatine eine andere Sort 
Taktgenerator verwendet wird, als auf deiner Zielplatine, und du die 
Fuses nicht enrsprechend umgestellt hast?

von Wolfgang (Gast)


Lesenswert?

Ja, beim Flashen treten keine Fehler auf. Auf der Entwicklungsplatine 
ist ein externer Takt angeschlossen. Jedoch, ist dieser, meines Wissens 
nicht verwendet, da der Atmega im Auslieferungszustand den internen 
verwenden!?

Ich denke das der Controller steht, weil sich an den Ausgängen nach dem 
Einschalten nichts mehr tut. Es treten auch komische Spannungen im 
Bereich von 0,7-1,2 V auf wo normalerweise High-Pegel (4,2V) anliegen 
müssten. Die Ausgänge des Atmega schalten einfach nur LEDs mit 
Emiterschaltung eines BC135. Schaltungstechnisch ist das nicht sehr 
komplex, jedoch kann ich mir die Spannungen an den Ausgängen nicht 
erklären. Wenn ich die Spannungen der Ausgänge auf der 
Entwicklungsplatine messe, kommen sinnvolle Werte im Bereich von 3-4V 
heraus.

von Marcus (Gast)


Lesenswert?

DDR Register auf Ausgang gestellt?
Sonst machst du nur die Pullups ein und aus :)

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Die DDR Register sind alle gesetzt. Vielleicht kann jemand was mit dem 
Quellcode anfangen und den Fehler finden.

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Ich vermute es liegt an dem Takt oder ähnlichem. Es leuchtet am Ausgang 
lediglich eine LED. Sonst tut sich nichts. Ich habe hier mal kurz meinen 
Schaltungsaufbau skizziert. Hinzu kommt natürlich Spannungsversorgung 
zwischen PIN 7 und PIN 8.

Einen externen Quarz habe ich nicht angeschlossen.

von Michael S. (msk) Benutzerseite


Lesenswert?

Ist Pin 4 der Reset-Pin? Da muss ein Pullup-Widerstand (z.B. 10k) gegen 
Vcc ran. Warum sind so viele uC-Ausgänge auf eine Basis eines 
Transistors geschaltet??

Edit: Ich sehe gerade, dass beim ATMega8 der Reset an Pin 1 liegt, 
welcher bei Dir einfach an der Basis eines Transistors parallel zu 
anderen Ausgängen klemmt. Ganz spontan kann ich mir nicht vorstellen, 
wie das funktionieren soll...

von Stefan W. (wswbln)


Lesenswert?

Ich hab' nur mal ganz kurz drübergeschaut, aber
- wenn Variablen sowohl in einer Interruptroutine als auch im Programm 
verwendet (und verändert) werden (Program, Counter), müssen die volatile 
deklariert werden.
- Wenn 16-Bit Werte auch in Interruproutinen ausgewertet oder verändert 
werden, müssen beim Ändern im Programm während der Änderung/Abfrage die 
Interrupts gesperrt werden (Stichwort: atomic / non atomic instruction)
Deine "if (Counter == 0)"-Abfrage kann daher schiefgehen (zumal Counter 
nicht volatile ist)
- Delays in Interruptroutinen? NO-NO!
- schau' Dir mal das 'CASE' C-Konstrukt an

Happy Coding!

von Wolfgang (Gast)


Lesenswert?

bezüglich der Schaltung:

Ich nutzte vier Ausgangspins je Farbe mit verschiedenen Widerständen. 
Alle 4 Ausgänge High, sind die 4 Widerstände parallel und ich habe den 
kleinsten Basiswiderstand --> größten Kollektorstrom. Die Diode habe ich 
um den LOW Pegel von 0,7V etwas abzufangen und die den Einfluss eines 
Ausgangs auf den anderen Ausgang zu verhindern.

von Michael S. (msk) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> bezüglich der Schaltung:
>
> Ich nutzte vier Ausgangspins je Farbe mit verschiedenen Widerständen.
> Alle 4 Ausgänge High, sind die 4 Widerstände parallel und ich habe den
> kleinsten Basiswiderstand --> größten Kollektorstrom. Die Diode habe ich
> um den LOW Pegel von 0,7V etwas abzufangen und die den Einfluss eines
> Ausgangs auf den anderen Ausgang zu verhindern.

Und was ist mit dem Reset-Pin? Wie resettest Du den uC beim Start bzw. 
manuell?

von Michael S. (msk) Benutzerseite


Lesenswert?

Stefan Wimmer schrieb:
> - Delays in Interruptroutinen? NO-NO!

Das sehe ich auch gerade. Also das würde ich da auf alle Fälle 
herausnehmen und nur ein Flag setzen, das dann im Hauptprogramm 
abgefragt wird.

von Wolfgang (Gast)


Lesenswert?

Guten Morgen,

gestern habend habe ich noch ein bisschen rumprobiert an der 
Spannungsversorgung und und und. Als ich die Masse des BC135, welcher 
die Blaue LED ansteuert entfernt habe, schnellt der Strom auf einmal 
hoch und die Grüne und Rote LED leuchteten.
Blau ist an den PINS (26...28, und PIN 1). Also vermute ich, das es doch 
etwas mit dem Reset PIN zu tun hat. Ich werde heute die Platine umlöten 
und das untere Nibble dieses Ports zur Ansteuerung nehmen. Ich hoffe, 
dann funktioniert die Schaltung.

von Winfried (Gast)


Lesenswert?

Das Konzept deiner Schaltung ist sehr exotisch und wenig geeignet. 
Erstmal kannst du dir die Dioden sparen, weil der AVR bei Low nahe 0V 
und nicht 0.7V am Port hat. Über den Basisstrom den Kollektorstrom in 
dieser Art steuern zu wollen, ist äußerst problematisch. Erstmal streuen 
die Transistoren, was die Verstärkung angeht, du müsstest alle 
Widerstände anpassen. Und wenn du mal einen Transistor tauschst, musst 
du wieder neue Widerstände einlöten. Zudem schwankt die Verstärkung z.B. 
bei Temperaturschwankungen.

Typisch löst man sowas über PWM, wobei du dann nur 1 Portpin pro Farbe 
brauchst.

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Ich möchte nur verschiedene Helligkeitsstufen der LED mit den 
Basiswiderständen erreichen. Die Dimensionierung passt da ganz gut und 
reicht auch dafür aus. Alle LEDs hängen an Step-Down Convertern, sodass 
ich  bei Inbetriebnahme den Maximalstrom über ein Poti einstellen kann. 
Ist nicht ganz durchdacht aber für das erste größere Projekt reicht das.

Die Low-Pegel nahm ich aus dem Datenblatt an. Daher kam ich auf die 
0,7V. Das steht doch nicht umsonst!?

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.