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???
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
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?
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.
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.
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...
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!
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.
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?
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.
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.
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.
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!?