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.
DDR Register auf Ausgang gestellt? Sonst machst du nur die Pullups ein und aus :)
Die DDR Register sind alle gesetzt. Vielleicht kann jemand was mit dem Quellcode anfangen und den Fehler finden.
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!?
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.