Forum: Mikrocontroller und Digitale Elektronik AVR Atmega8L Falshen erfolgreich, jedoch keine Funktion


von Kreiosus (Gast)


Angehängte Dateien:

Lesenswert?

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

von Bakka (Gast)


Lesenswert?

erst mal mit einem kleinen Programm jede LED einzeln leuchten lassen und 
Ausgangsspannungen nachmessen!

von fop (Gast)


Lesenswert?

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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Keine Reset-Beschaltung?

Transistoren ohne Basis-Widerstand?

von Walter (Gast)


Lesenswert?

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

von Walter (Gast)


Lesenswert?

Aref darf nicht an 5V geklemmt werden!

von Mike J. (linuxmint_user)


Lesenswert?

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

von Kreiosus (Gast)


Lesenswert?

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?

von Mike J. (linuxmint_user)


Lesenswert?

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.

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.