Hallo zusammen,
seit Jahren bin ich bereits als stiller Leser hier im Forum unterwegs
und schaue mir den einen oder anderen Tipp ab oder aber schappe einigie
hilfreiche Informationen auf. Daher an dieser Stelle schon mal ein Danke
Schön an die Mitglieder:)
Zum ersten Mal benötige ich nun aber eure Hilfe bei einem konkreten
Problem bei meinem Projekt. Anbei der Schaltplan und das Board-Design
einer Platine, die ich selbst entworfen habe. Als Kernelement verwende
ich einen Atmega8L. Die Funktion sei erst einmal irrelevant, es geht mir
viel mehr um die eigentliche Funktionalität des Controllers.
Die Funktionsweise der Platine habe ich zunächst auf einem Steckbrett
überprüft und auch die Software mit dessen Hilfe geschrieben, da hat
alles wunderbar funktioniert. Danach hab ich das Board in EAGLE
entworfen und hab es auch fertigen lassen.
Als Ergebnis kann ich sagen, dass ich den Contoller über einen selbst
gebastelten SPI-Programmer problemlos flashen kann, jedoch schein er
daraufhin nicht zu funktionieren, keiner der Pins wird gesetzt.
Ich zerbreche mir schon seit einigen Tagen der Kopf über das Problem und
hoffe, dass ihr mir helfen könnt, den Fehler zu finden.
Danke im Voraus.
Kreiosus
Also was ich so sehe :
- der Quarz scheint mir ziemlich weit von den zugehörigen µC Pins weg zu
sein
- der Reset Pin ist offen, wenn kein Programmer angeschlossen ist
Dabei würde ich erst mal den 2. Punkt in Angriff nehmen, und einen
Pullup-Widerstand von sagen wir mal 10k von Reset nach 5V einbauen.
Dann als nächstes mal den Takt am Quarz kontrollieren. Wenn der nicht
schwingt, könnten auch Deine Fuse-Bits falsch programmiert sein.
Johann L. schrieb:> Transistoren ohne Basis-Widerstand?
die oberen Transistoren brauchen den nicht unbedingt und die unteren
könnte man mit dem Pullup des AVR schalten (notfalls)
Kreiosus schrieb:> Ich zerbreche mir schon seit einigen Tagen der Kopf über das Problem
hirnen hilft meist nicht
Bakka schrieb:> erst mal mit einem kleinen Programm jede LED einzeln leuchten lassen und> Ausgangsspannungen nachmessen!
das ist ein guter Tipp
Kreiosus schrieb:> Ich zerbreche mir schon seit einigen Tagen der Kopf
Einfach fragen, die Gemeinschaft weiß in der Regel immer etwas was
vielleicht hilfreich sein könnte.
zum Schaltplan:
-Ich nutze 100kOhm von /Reset nach Vcc. Eigentlich nimmt man aber
10kOhm, wie in der Anleitung in der Artikelsammlung.
Von /Reset nach GND dann noch einen 10n oder 100n Kerko.
- Wenn der Quarz nicht anschwingen sollte, dann lege zwischen die beiden
Pins des Quarzes (oder zwischen P6 und PB7 am Controller) einen 1MOhm
Widerstand
- Die Basiswiderstände wurden schon erwähnt, da musst du jetzt eben die
PullUps an und aus schalten um die Transistoren zu schalten.
- Die oberen Transistoren sind an +5V angeschlossen, an ihnen fallen
aber mindestens U_BE ab, was 0.6V entsprechen.
Sie können also nie ganz durchschalten, es fallen an ihnen immer 0.6V
ab.
Man nimmt zum schalten der Versorgung eigentlich PNP-Transistoren.
(ist für die Berechnung des Widerstandwertes wichtig, an der LED und dem
Vorwiderstand fallen hier also nur 4.4V ab)
zum Board:
-Die 100nF Abblockkondensatoren müssen so nahe wie möglich an die
jeweiligen Pins des Controllers. (an Aref und GND , an AVcc und GNd, an
Vcc und GND)
-Lege immer eine Massefläche (GND) als Polygon aus, jeweils für die TOP
und für die BOTTOM-Seite, dann ist das Routing der Leitungen viel
einfacher. Schau wie es die anderen machen.
-Ein weiterer Vorteil ist dass die Massefläche als Schirmung dient und
einen gewissen EMV-Schutz bietet.
Walter schrieb:> Aref darf nicht an 5V geklemmt werden!
Das sollte trotzdem funktionieren, aber normaler Weise kommt dort nur
ein 100nF Kondensator nach GND ran.
Die Leitungen kann man in Eagle nachträglich auch dicker oder dünner
machen, wähle lieber etwas dickere Leitungen damit dort mehr Strom rüber
kann und der Platinenhersteller keine Probleme beim Ätzen hat.
Funktionieren wird da Board trotzdem, du musst nur den /Reset-Widerstand
hinzufügen
Danke schon mal für die vielen Antworten:)
Bakka schrieb:> erst mal mit einem kleinen Programm jede LED einzeln leuchten> lassen und> Ausgangsspannungen nachmessen!
Das habe ich schon versucht, jedoch kann ich wie gesagt keinen der uC
Pins wirklich setzten, es tut sich am Ausgang nichts.
fop schrieb:> Also was ich so sehe :> - der Quarz scheint mir ziemlich weit von den zugehörigen µC Pins weg zu> sein> - der Reset Pin ist offen, wenn kein Programmer angeschlossen ist>> Dabei würde ich erst mal den 2. Punkt in Angriff nehmen, und einen> Pullup-Widerstand von sagen wir mal 10k von Reset nach 5V einbauen.> Dann als nächstes mal den Takt am Quarz kontrollieren. Wenn der nicht> schwingt, könnten auch Deine Fuse-Bits falsch programmiert sein.
Wenn der Programmer aber angeschlossen ist, dann sollte trotzt der
fehlenden Reset-Beschaltung der uC funktionieren, verstehe ich das
richtig?
Walter schrieb:> Aref darf nicht an 5V geklemmt werden!
Wieso nicht? Laut Manual ist das doch die Referenzspannung für den A/D
Wandler, hatte daher angenommen, dass der ebenfalls auf VCC liegen muss.
Mike J. schrieb:> zum Schaltplan:> -Ich nutze 100kOhm von /Reset nach Vcc. Eigentlich nimmt man aber> 10kOhm, wie in der Anleitung in der Artikelsammlung.> Von /Reset nach GND dann noch einen 10n oder 100n Kerko.> - Wenn der Quarz nicht anschwingen sollte, dann lege zwischen die beiden> Pins des Quarzes (oder zwischen P6 und PB7 am Controller) einen 1MOhm> Widerstand> - Die Basiswiderstände wurden schon erwähnt, da musst du jetzt eben die> PullUps an und aus schalten um die Transistoren zu schalten.> - Die oberen Transistoren sind an +5V angeschlossen, an ihnen fallen> aber mindestens U_BE ab, was 0.6V entsprechen.> Sie können also nie ganz durchschalten, es fallen an ihnen immer 0.6V> ab.> Man nimmt zum schalten der Versorgung eigentlich PNP-Transistoren.> (ist für die Berechnung des Widerstandwertes wichtig, an der LED und dem> Vorwiderstand fallen hier also nur 4.4V ab)>> zum Board:> -Die 100nF Abblockkondensatoren müssen so nahe wie möglich an die> jeweiligen Pins des Controllers. (an Aref und GND , an AVcc und GNd, an> Vcc und GND)
Was sind sonst die Auswirkungen, wenn die zu weit weg sind? Also müsste
ich in meiner Schaltung noch 100nF Kondensatoren an AVCC und AREF
hinzufügen.
> -Lege immer eine Massefläche (GND) als Polygon aus, jeweils für die TOP> und für die BOTTOM-Seite, dann ist das Routing der Leitungen viel> einfacher. Schau wie es die anderen machen.> -Ein weiterer Vorteil ist dass die Massefläche als Schirmung dient und> einen gewissen EMV-Schutz bietet.
Die Massefläche hatte ich bei mir nach dem Routing mit dem
Polygon-Werkzeug erstellt und da hatte sie nicht den kopletten Bereich
zwischen den Leiterbahnen ausgefüllt. Verstehe ich dich richtig, dass
man sie am besten vor dem Routing anlegt?
>> Walter schrieb:>> Aref darf nicht an 5V geklemmt werden!>> Das sollte trotzdem funktionieren, aber normaler Weise kommt dort nur> ein 100nF Kondensator nach GND ran.>> Die Leitungen kann man in Eagle nachträglich auch dicker oder dünner> machen, wähle lieber etwas dickere Leitungen damit dort mehr Strom rüber> kann und der Platinenhersteller keine Probleme beim Ätzen hat.
Das muss ich mir auf jeden Fall für die nächste Platinenversion merken;)
>> Funktionieren wird da Board trotzdem, du musst nur den /Reset-Widerstand> hinzufügen
Werde morgen auf dem jetzigen Board noch die Reset-Beschaltung
hinzufügen und schauen, ob ich die Transistoren über die Pull-Ups
schalten kann.
Berichte dann ob es auf diese Weise zumindest funktioniert:)
Waraus ich aber nicht so recht schlau werde ist die Tatsache, dass ich
die gleiche Schaltung ja zunächst auf einem Steckbrett realisiert habe
und da hat alles wunderbar funktioniert, warum auf der fertigen Platine
dann nicht mehr?
Kreiosus schrieb:> Was sind sonst die Auswirkungen, wenn die zu weit weg sind?
Der Controller zieht den Strom Pulsweise und nicht kontinuierlich.
Da steht zwar im Datenblatt dass er bei der Taktfrequenz 12mA zieht,
aber in Wirklichkeit zieht er bei jedem Umschaltvorgang (8MHz = 8
Millionen Umschaltvorgänge der internen Gatter) viel Strom und
dazwischen quasi nichts.
Kreiosus schrieb:> Das habe ich schon versucht, jedoch kann ich wie gesagt keinen der uC> Pins wirklich setzten, es tut sich am Ausgang nichts.
Der Quarz läuft? Miss mal die Wechselspannung an den Pins.
Kannst du wirklich auf den Chip erneut über den Programmieradapter
schreibend zugreifen?
Wie sehen deine Fuses aus?
Setze alle Pins auf Eingang und lass nur die beiden Pins PB1 und PB2
blinken.
Vielleicht hast du da noch irgend wo einen Lötfehler drin.
Prüfe ob Spannung anliegt, vielleicht gibt es ja noch irgend wo eine
Lot-Brücke.
Füge aber erst mal einen 10k Widerstand zwischen Reset und Vcc ein.