Atmega 328PB lässt sich nicht programmieren

#7984415
Lesenswert?

Hallo zusammen, ich arbeite jetzt schon ca einen Monat an meinem richtigen Elektronik-Projekt - nichts großes, nur gibt es viel zu lernen ;)

Nach der ersten Runde PCBs hatte ich festgestellt, dass ich noch einen MCU brauche. Den habe ich dann ergänzt und neue Boards bestellt. Ein board habe ich jetzt bestückt, aber der MCU will sich nicht programmieren lassen - avrdude erkennt ihn einfach nicht ("Error: initialization failed", oder mit -F: "Device signature = 00 00 00 (retrying)").

Ich habe mich ein bisschen umgeguckt und festgestellt, dass mir ein reset-pullup fehlt. Den habe ich zum Testen dann an den ICSP header drangelötet (funktioniert tatsächlich), aber es tut sich immer noch nichts. Auch ein 100nF Kondensator zwischen VCC und VSS hat nichts gebracht (den Widerstand habe ich mittlerweile auf dem Board ergänzt. Für den cap ist mir keine offensichtlich tolle Lösung eingefallen, also habe ich ihn von vor der Didode nach dahinter geschoben. Der Anhang repräsentiert noch das alte Board, so wie ich es gerade physisch bei mir liegt.).

Die ungenutzten Pins sind alle direkt mit VSS verbunden, weil das Datasheet gesagt hat, dass ein festes Level den Verbrauch des MCUs senken kann (Idealerweise will ich mich mit dem Verbrauch des MCU im Bereich von 0 bis ca. 10uA bewegen - weniger ist besser.). Mir wurde gesagt, dass ich auch die internen Widerstände benutzen kann, was dann die nächste PCB-Bestellung umsetzen wird.

Auch habe ich die AVR-Checkliste auf dieser Seite gefunden, die hat mir aber leider nicht weitergeholfen.

Sicherheitshalber habe ich mal alle SPI-Pins im Diodentest durchgemessen und ich bekomme da überall "normale" Werte, also der Chip scheint zumindest oberflächlich in Ordnung zu sein. Die wichtigen Pins sind alle tatsächlich verlötet und soweit ich erkennen kann nicht irgendwie miteinander verbunden. Den ICSP header habe ich direkt durchgemessen, und da auch nichts gefunden. Ich habe noch nicht probiert einen anderen MCU aufzulöten, weil ich nicht weiß, ob irgendwas auf dem Board den momentanen MCU gesprengt hat, und wenn ja, warum.

Ein Oszilloskop habe ich auch mal angeschlossen. Der Reset-Pin landet tatsächlich auf einem sauberen Logik-Niveau. Auf MOSI ist Kommunikation auch klar erkennbar (und ja, meinen usbtinyisp habe ich mit einem arduino uno getestet). Auf MISO ist nur schwache Noise (kurz vor dem LL zu LH Übergang des Reset-pins glaube ich ein bisschen Chip-Aktivität zu erkennen - kaum lauter als die Noise auf der Leitung.). Die Noise auf den Leitungen bewegt sich im Bereich von bis zu +-100mV zu bewegen. Zugegeben habe ich keine Ahnung, ob irgendwas in diesem Absatz von Relevanz ist, aber man lernt ja immer dazu.

Ich bin ehrlich verwirrt bei sechs Pins so gravierend schief gehen kann. Hat hier vielleicht jemand eine Idee, was ich übersehe?

Vielen Dank!

Angehängte Dateien:
#7984425
Lesenswert?

Das Datasheet sagt, dass man ungenutzte Pins zu Gnd verbinden soll. Ich benutze nur die beiden i2c Interfaces, und wollte den ADC eh ausschalten.

So wie ich das verstanden habe ist der ADC nur für analoge Messungen Relevant. Im Datasheet steht, soweit ich erkennen kann, nicht, dass man besonders mit dem Pin umgehen soll

: Bearbeitet durch User
(Firma: Gast) #7984441
Lesenswert?

Sysfs schrieb:

Das Datasheet sagt, dass man ungenutzte Pins zu Gnd verbinden soll.

Naja... Aref ist keine normaler IO Pin. Das Datenblatt sagt eher, dass man ihn mit 100nF gegen GND abstützen soll. Und die anderen brauchen auch kein GND, da reicht der interne Pullup oder diese Pins auf OUTPUT zu stellen.

Sebastian W. schrieb:

Ich frage, weil du keinen Takt anlegst …

Bei 1MHz intern, macht es meist Sinn, den ISP Takt runter zu setzen.

Dann: Ich sehe nur einen GND an deinem 328PB Bild. Der hat sicher mehr davon.

: Bearbeitet durch User
#7984450
Lesenswert?

Noch etwas:

Falls man später den 328pb a la Arduino mit AVRDude programmieren möchte, bitte beachten, daß sich die gültigen RESET Schaltschwellen im Vergleich zum 328p unterscheiden. Wer dann versucht mit einem 3.3V USB Serial (CP2103 oder FT232RL) Kabel zu arbeiten wird oft Schiffbruch erleben, da die Spannung des Serial-RTS dann nicht mehr ausreicht, den RESET-Pin weit genug nach Masse hin zu schalten. Ohne Modifikation funktioniert es nur sporadisch.

Ein Vergleich der Datenblätter bestätigt diesen Sachverhalt.

Ich hatte das Problem vor einigen Jahren erstmalig mit 328PB Bords von Watterott. Eine "stopgap" Lösung des Problems war, den Reset Pin über einen 33K mit RTS zu überbrücken. (In parallel mit dem Reset Kondensator zwischen RTS und RESET). Diese Massnahme löste das Problem. Ich informierte übrigens Watterott von dem Problem und es ist seitdem auch dort dokumentiert.

Über ISP hatte ich übrigens allerdings mit dem 328PB niemals Probleme.

#7984488
Lesenswert?

Sebastian W. schrieb:

frisch vom Werk

Ja, der MCU ist frisch vom Werk.

Helmut -. schrieb:

wo sind die Abblock-Cs? Warum ist eine Diode zwischen Regler und Prozessor-Versorgung?

Die Diode soll verhindern, dass die 5V des programmers den LDO töten. Angeblich mögen die es nicht, wenn am Output ein höheres Potential anliegt.

Den 100nF Kondensator habe ich wie gesagt vergessen. Der Plan war, den Filterkondensator vom LDO mitzuverwenden.

Arduino F. schrieb:

Bei 1MHz intern, macht es meist Sinn, den ISP Takt runter zu setzen.

Habe ich erfolglos versucht, hatte ich vergessen zu erwähnen.

Roland F. schrieb:

Pin-Nummerierung des Programmiersteckers ist um 180° verdreht.

Stimmt. In der Schematic habe ich den Anschluss Rotiert. Ich habe immer darauf geachtet, dass mein Kabel richtig herum angeschlossen ist.

Arduino F. schrieb:

Ich sehe nur einen GND an deinem 328PB Bild.

Guter Fund, aber das Symbol überlappt alle GNDs. Schließt man den einen an, dann sind automatisch alle anderen mit dabei.

Vielen Dank für die vielen Ideen!

: Bearbeitet durch User
(Firma: privat) #7984498
Lesenswert?

Also bei mir hat das nur so funktioniert: Programmer mit einem levelshifter auf 3,3V zum ATmega328 hin. Der muß 328 vorher mit seiner 3,3V-Versorgung laufen, dann den Programmer anstecken und mit der Arduino IDE programmieren. Die Fehlermeldung bedeutet ja, daß der uC nicht reagiert. Mein 328P-AU (TQFP-SMD) war auch anfangs nicht ordentlich verlötet, einige pins sahen nur so aus, als ob. Habe auch 8MHz ohne Oszillator verwendet.

#7984499
Lesenswert?

Walter B. schrieb:

Programmer mit einem levelshifter auf 3,3V zum ATmega328 hin. Der muß 328 vorher mit seiner 3,3V-Versorgung laufen, dann den Programmer anstecken und mit der Arduino IDE programmieren.

Also so wie ich das verstanden habe muss der Chip nicht erst mit eigener Stromversorgung laufen. Der Programmer bringt ja - sofern angeschlossen - selber eine 5V Versorgungsspannung mit. Der Arduino Uno, mit dem ich den Programmer getestet habe, musste auch nicht an eine zusätzliche Stromversorgung angeschlossen werden.

Bezüglich der 3.3v möchte ich auf die Antwort von gerhard_ verweisen: Der 328P kommt beim Programmieren mit 3.3v wohl deutlich besser klar als der 328PB.

Übersehe ich etwas?

: Bearbeitet durch User
#7984510
Lesenswert?

Was ich bei meinen Experimenten gelernt habe:

Die Diode am Regler würde ich entfernen(überbrücken) und die Schaltung generell nicht über den Prog-Stecker versorgen.

Welchen Programmer verwendest du, welches Programm/Umgebung? (Habe ich vllt überlesen..?) Hier ist ein Skript dass bei mir zuverlässig funktioniert.

c:\WinAVR\avrdude\avrdude -p m328pb -P com3 -b 115200 -B 200 -c stk500v2 -e

c:\WinAVR\avrdude\avrdude -p m328pb -P com3 -b 115200 -B 200 -c stk500v2 -U lfuse:w:0xE2:m

c:\WinAVR\avrdude\avrdude -p m328pb -P com3 -b 115200 -B 200 -c stk500v2 -U hfuse:w:0xDF:m

c:\WinAVR\avrdude\avrdude -p m328pb -P com3 -b 115200 -B 200 -c stk500v2 -U efuse:w:0xF5:m

c:\WinAVR\avrdude\avrdude -p m328pb -P com3 -b 115200 -B 1.1 -c stk500v2 -D -U flash:w:deinHexFile.hex

c:\WinAVR\avrdude\avrdude -p m328pb -P com3 -b 115200 -B 200 -c stk500v2 -U lock:w:0xC0:m

pause

Überprüf die Fuses die du verwendest. Einmal falsch gesetzt können die das IC "bricken".

Alles andere wurde bereits erwähnt.

#7984515
Lesenswert?

... und sag mal welcher ISP Programmer Du einsetzt. Wenn Du später mit Arduino usw. was machen willst, dann verwende noch ein Resonator / Quarz und baue die Resetbeschaltung mit auf. Wenn die Spannungversorgung über den ISP Programmer kommt,kannst Du Dir den LDO usw. vorerst sparen. Schau Dir mal die Standardschaltungen im Web an - daran kann man sich grob orientieren.

#7984530
Lesenswert?

Sysfs schrieb:

Also so wie ich das verstanden habe muss der Chip nicht erst mit eigener Stromversorgung laufen. Der Programmer bringt ja - sofern angeschlossen

  • selber eine 5V Versorgungsspannung mit. Der Arduino Uno, mit dem ich den Programmer getestet habe, musste auch nicht an eine zusätzliche Stromversorgung angeschlossen werden.

Das war eigentlich nicht so gedacht. Der VCC-Pin ist eigentlich nur dafür da, die Pegelwandler (GUTE Programmer haben welche) zu versorgen, damit die Logikpegel am Programmierstecker exakt zur Versorgungsspannung des Prozessors passen.

Viele Leute vergessen auch, dass alle digitalen ICs an ihren Eingängen nur Spannungen zwischen 0 und der Versorgungsspannung vertragen, sofern es nicht ganz ausdrücklich im Datenblatt anders beschrieben wird. Wenn also nur der Prozessor versorgt wird, nicht aber der Rest der Schaltung, können unter Umständen seltsame Dinge passieren.

Dann sehe ich im Schaltplan keine Abblockkondensatoren. JEDES VCC/GND-Paar (und AVCC/AGND) braucht einen eigenen - in der Regel 100nF - Kondensator (keramisch, X7R, möglichst kleine mechanische Bauform, weil sich dadurch die interne Induktivität reduziert) möglichst dicht an den Pins (da zählt jeder Millimeter).

Zu den ungenutzten IO-Pins: Ich würde die unbeschaltet lassen und beim Start auf Ausgang und 0 programmieren.

Und wenn Du WIRKLICH die Leistung reduzieren willst, dann reduzierst Du besser die Versorgungsspannung. Schau Dir die Graphen im Datenblatt im Abschnitt 34.1 an. Der Strom halbiert sich in etwa, die Leistung viertelt sich ganz grob. Gut, der 328PB is eine alte Kamelle. Moderne AVRs aus der nach-Atmel-Zeit laufen intern eh mit 1.8V, und nur der IO-Ring wird mit der externen Versorgungsspannung betrieben. Daher laufen die dann auch bei niedriger Versorgungsspannung mit vollem Takt. Du hast hier also keine wirklich gute Wahl getroffen.

fchk

#7984540
Lesenswert?

Nemopuk schrieb:

Zeige uns due Bilder

Habe ich angehängt. Gelb ist reset, Hellblau ist MOSI und Lila ist MISO. Das triggerniveau habe ich für das Bild auf das Reset-High(Low?) Niveau gesetzt, dass man da die 1.0V erkennt.

Christian schrieb:

Die Diode am Regler würde ich entfernen(überbrücken) und die Schaltung generell nicht über den Prog-Stecker versorgen.

Wieso das? Es hängt ja bei mir NUR der MCU dran. Absolut nichts anderes. Der Uno lässt sich mit dem Programmer problemlos durch den ICSP header versorgen. Ich brauche keinerlei externe Stromversorgung, und der Uno hat deutlich mehr Teile an board als ich hier.

Christian schrieb:

Welchen Programmer

Andreas S. schrieb:

und sag mal welcher ISP Programmer

Wie schon erwähnt benutze ich einen USBTinyISP, der an einem arduino uno problemlos funktioniert.

Frank K. schrieb:

ihren Eingängen nur Spannungen zwischen 0 und der Versorgungsspannung vertragen

Laut Datasheet hält der 328PB sogar 6V aus. Da sollten die 5V vom Programmer eigentlich ideal sein...?

Frank K. schrieb:

JEDES VCC/GND-Paar (und AVCC/AGND) braucht einen eigenen - in der Regel 100nF

  • Kondensator

Wie soll ich das dann mit dem LDO-Kondensator machen? De sitzen ja dann parallel und dann habe ich 1.001uF statt 1nF... Im MiniCore minimal setup hängt AVCC einfach an VCC und hat gar keinen eigenen Kondensator.

Frank K. schrieb:

Und wenn Du WIRKLICH die Leistung reduzieren willst, dann reduzierst Du besser die Versorgungsspannung

Das war auch das Ziel, deshalb gibt der LDO 3.3V statt 5V aus.

Andreas S. schrieb:

Wenn die Spannungversorgung über den ISP Programmer kommt,kannst Du Dir den LDO usw. vorerst sparen.

Das Programmieren möchte ich machen, bevor ich die eigentliche Stromversorgung anschließe - aus Sicherheitsgründen. Der LDO muss also sein, und die Diode scheinbar auch.

Sorry, dass die Antwort so lange gebraucht hat. Hatte schwierigkeiten das alles halbwegs sauber mit dem Oszi zu verdrahten...

Angehängte Dateien:
: Bearbeitet durch User
#7984556
Lesenswert?

Forsche mal nach warum das RESET Signal nicht auf 0V geht. Reset wird direkt vom selben 74HCxx angetrieben, wie MOSI. MOSI hat einen 1,5k Widerstand in Reihe. Also müsste der RESET Pin mindestens ebenso weit runter kommen wie MOSI.

Die Differenz von 0,7V riecht verdächtig nach einer ESD Schutzdiode. Vielleicht hat dein Programmieradapter einen Kabelbruch auf der GND Leitung.

: Bearbeitet durch User
#7984563
Lesenswert?

Nemopuk schrieb:

Forsche mal nach warum das RESET Signal nicht auf 0V geht. Reset wird direkt vom selben 74HCxx angetrieben, wie MOSI. MOSI hat einen 1,5k Widerstand in Reihe. Also müsste der RESET Pin mindestens ebenso weit runter kommen wie MOSI.

Guter Einwand. Ich habe gerade mal in das Datasheet geguckt und tatsächlich scheint das Reset-Signal nicht weit genug runterzukommen. Wenn ich das richtig verstehe (Screenshot angehängt) muss das Signal bei High(Low?) zwischen -0.5 und 1V liegen. Da ist 1V ziemlich grenzwertig...

Wie muss ich das mit dem Kabelbruch verstehen? Warum würde ein Kabelbruch verhindern, dass das Signal auf 0V herunterkommt? Wenn das Board angeschlossen ist, kann ich GND definitiv vom Programmer zum Board durchmessen, und ich bin mir unsicher, was Du sonst damit meinst.

Angehängte Dateien:
: Bearbeitet durch User
#7984564
Lesenswert?

Sysfs schrieb:

Das Programmieren möchte ich machen, bevor ich die eigentliche Stromversorgung anschließe

deshalb ja nur der ISP Programmer für die Spannungsversorgung. Wenn der Chip i.O ist und alles passt muss ein "Only Read" möglich sein und Du kannst die ID und die Fuse Settings und den Speicher auslesen. Mehr braucht es für eine grobe Überprüfung der ISP Verdrahtung nicht. Das läuft dann auch mit einer DIL Version auf den Steckbrett, nur mit angeschlossen ISP Programmer und ohne viel "Drumherum" Zur Not erst einmal den ISP Takt etwas verringern um auf Nummer sicher zu gehen - durch den wilden Aufbau auf dem Steckbrett ist das manchmal nötig. Bitte überpürfe auch Deine Fuse Einstellungen (internal Clock) - nicht dass da das eigentlich Problem ist. Im Web gibt es gute Seiten mit Fuse Calculatoren.

#7984565
Lesenswert?

Andreas S. schrieb:

deshalb ja nur der ISP Programmer für die Spannungsversorgung. Wenn der Chip i.O ist und alles passt muss ein "Only Read" möglich sein und Du kannst die ID und die Fuse Settings und den Speicher auslesen.

Oh ich hatte Dich bei meiner vorherigen Antwort etwas missverstanden. Ja, der LDO könnte weg, aber es ändert ja so gesehen jetzt auch nichts, dass er da ist.

Auslesen vom Chip ist momentan nicht möglich. Die Fuses konnte ich bisher nicht einstellen, weil ich nicht auf den Chip zugreifen konnte, sind also alle auf den defaults. Die Chips kommen wie schon gesagt direkt vom Hersteller und sind unbenutzt.

#7984571
Lesenswert?

Sysfs schrieb:

Frank K. schrieb:

ihren Eingängen nur Spannungen zwischen 0 und der Versorgungsspannung vertragen

Laut Datasheet hält der 328PB sogar 6V aus. Da sollten die 5V vom Programmer eigentlich ideal sein...?

Das war der erste Fehler. Du hast in die Absolute Maximum Ratings geschaut. Das sind die Werte, bei der der Chip kurzzeitig gerade noch nicht stirbt. Damit designt man nicht. Du nimmst gefälligst die Recommended Ratings.

Das zweite sind die IO-Pins: Unter 33.2 steht ganz klar: "Input High Voltage, except XTAL1 and RESET pins: max Vcc+0.5V" Wenn VCC=0V ist, dann beschädigt jede Spannung über 0.5V an einem beliebigen IO-Pin den Chip. Gilt für so gut wie jeden digitalen Chip, wobei oft nur 0.3V extra erlaubt sind.

Frank K. schrieb:

JEDES VCC/GND-Paar (und AVCC/AGND) braucht einen eigenen - in der Regel 100nF

  • Kondensator

Wie soll ich das dann mit dem LDO-Kondensator machen? De sitzen ja dann parallel und dann habe ich 1.001uF statt 1nF...

Genau so.

Zweiter Fehler. Du betrachtest Leiterbahnen als einfache Verbindung. Stimmt so nicht. Jedes mm an Leiterbahn hat einen Widerstand, eine Kapazität und eine Induktivität. Jede Leiterbahn zwischen zwei Bauteilen ist also auch ein Bauteil. Deswegen hast Du keine einfache Addition von Kapazitäten, und deswegen ist es auch nicht egal, wo die Kondensatoren sind.

Frank K. schrieb:

Und wenn Du WIRKLICH die Leistung reduzieren willst, dann reduzierst Du besser die Versorgungsspannung

Das war auch das Ziel, deshalb gibt der LDO 3.3V statt 5V aus.

Ja, und wenn Du wirklich Strom sparen willst, nimmst Du 1.8V und dazu passende Bauteile.

fchk

#7984578
Lesenswert?

Frank K. schrieb:

Du hast in die Absolute Maximum Ratings geschaut.

oha Tatsache, danke für den Hinweis. Ich finde mich in so großen Datasheets noch nichts gut zurecht...

Frank K. schrieb:

Unter 33.2 steht ganz klar: "Input High Voltage, except XTAL1 and RESET pins: max Vcc+0.5V" Wenn VCC=0V ist, dann beschädigt jede Spannung über 0.5V an einem beliebigen IO-Pin den Chip. Gilt für so gut wie jeden digitalen Chip, wobei oft nur 0.3V extra erlaubt sind.

Ich sehe das Problem nicht. Soweit ich das erkennen kann habe ich nichts verpolt.

Frank K. schrieb:

Genau so.

Hm ok alles klar, vielen Dank für die Erklärung. Dann werde ich versuchen, den auch noch unterzubringen. Muss ich den ergänzen bevor hier irgendwas klappen kann oder sollte ich den ergänzen aber es wird für meine wenigen Tests auf dem alten Board auch noch so funktionieren?

Frank K. schrieb:

nimmst Du 1.8V

Bei 1.8V wird der interne Crystal zu langsam. Ich brauche meine 8MHz. 4MHz Reichen für mein Projekt nicht mehr. Ich kann noch bis 2.7V runter gehen, aber mit der Diode hinter dem LDO bin ich eh nahe der 3V.

#7984605
Lesenswert?

Sysfs schrieb:

Frank K. schrieb:

nimmst Du 1.8V

Bei 1.8V wird der interne Crystal zu langsam. Ich brauche meine 8MHz. 4MHz Reichen für mein Projekt nicht mehr. Ich kann noch bis 2.7V runter gehen, aber mit der Diode hinter dem LDO bin ich eh nahe der 3V.

Du hast da keinen internen Crystal. Du hast einen relativ ungenauen RC-Oszillator.

Dann nimmst Du halt beispielsweise einen AVR128DB32. Der kann auch bei 1.8V noch seine vollen 24 MHz, weil es eben ein viel modernerer Chip in einem neueren Halbleiterprozess ist.

https://www.microchip.com/en-us/product/AVR128DB32

fchk

: Bearbeitet durch User
#7984607
Lesenswert?

Sysfs schrieb:

Wie muss ich das mit dem Kabelbruch verstehen? Warum würde ein Kabelbruch verhindern, dass das Signal auf 0V herunterkommt?

Weil der Strom nicht zu seiner Quelle zurück fließen kann. Dann fließt er oft über eine Signal-Leitung und ESD Schutzdiode zurück. Wegen der Diode mit etwa 0,7V Verlust.

Sysfs schrieb:

Wenn das Board angeschlossen ist, kann ich GND definitiv vom Programmer zum Board durchmessen, und ich bin mir unsicher, was Du sonst damit meinst.

Wie viel Ohm? Es sollten etwa Null Ohm sein.

Sysfs schrieb:

Bei 1.8V wird der interne Crystal zu langsam.

Es gibt keinen internen Kristall/Quarz. Du meinst den R/C Oszillator. Dem ist die Spannung egal. Wichtig ist, die Fuse für den Takt-Teiler passend zu setzen, damit die effektive Taktfrequenz des Chips nicht zu hoch ist.

#7984611
Lesenswert?

Frank K. schrieb:

Dann nimmst Du halt beispielsweise einen AVR128DB32

Eigentlich möchte ich den Chip ja gar nicht austauschen, aber danke für den Vorschlag. ;)

Nemopuk schrieb:

Es sollten etwa Null Ohm sein

Es sind etwa Null Ohm.

Nemopuk schrieb:

Weil der Strom nicht zu seiner Quelle zurück fließen kann. Dann fließt er oft über eine Signal-Leitung und ESD Schutzdiode zurück. Wegen der Diode mit etwa 0,7V Verlust.

Achso, ich glaube ich verstehe. Auf dem Programmer sehe ich aber maximal 2 Dioden, es sei denn die Schutzdioden sind Teil des Atmel MCU. Neben dem MCU ist nur noch ein 74HC125 "quad buffer".

Nemopuk schrieb:

Du meinst den R/C Oszillator. Dem ist die Spannung egal.

Ja, den meine ich, sorry. Im Datasheet steht eigentlich an diversen Stellen, dass die Frequenz mit sinkender Spannung immer weiter limitiert ist. Wieso gilt das nicht?

Edit: Ich habe mich wohl verlesen. Da steht, dass der MCU bis 1.8V die vollen 8MHz kann.

: Bearbeitet durch User
#7984613
Lesenswert?

Sysfs schrieb:

Frank K. schrieb:

Dann nimmst Du halt beispielsweise einen AVR128DB32

Eigentlich möchte ich den Chip ja gar nicht austauschen, aber danke für den Vorschlag. ;)

Wäre aber besser fürs Ergebnis.

Edit: Ich habe mich wohl verlesen. Da steht, dass der MCU bis 1.8V die vollen 8MHz kann.

Nein, das stimmt bei diesen alten Teilen nicht. Siehe Abschnitt "33.4 Speed Grades".

Der interne Oszillator funktioniert bis herunter zu 1.8V gemäß Abschnitt 33.5.1. Das heißt aber nicht, dass der Prozessorkern das dann auch kann. Bei diesen alten Teilen sind die Transistoren bei geringer Spannung einfach zu langsam. Erst bei den modernen Microchip AVRs sind die Transistoren auch bei geringen Spannungen schnell genug bzw noch deutlich schneller. Deswegen solltest Du den wollen.

fchk

(Firma: Jasinski) #7984636
Lesenswert?

Hier mein Schaltplan explizit für den ATMEGA328PB als Referenz – getestet und auf jeden Fall funktionierend. Irgendetwas grundlegendes machst Du falsch – alle Massen müssen verbunden sein – dieser µC hat zwei GND-Anschlüsse (Pin 5 und 21), die Massen des Programmiergeräts, Netzteils etc. müssen damit auch verbunden sein. Auch die Spannungsversorgung muss sowohl an VCC als auch AVCC vorhanden sein. VREF wird weder mit VCC noch mit GND verbunden – der Pin wird mit einem 100nF-Kondensator gestützt, insbesondere dann, wenn vom ADC Gebrauch gemacht wird. Abblockkondensatoren sind nicht spaßhalber gedacht, sondern Pflichtprogramm bei quasi jeder soliden Schaltung, die zuverlässig arbeiten soll – µC-Schaltungen gehören zu dieser Kategorie. Dein ISP-Programmieranschluss scheint auf jeden Fall irgendwie verdreht zu sein – vielleicht hast Du beim Anschließen des Programmieradapters über Dupontkabel hier einfach auch MOSI mit MISO vertauscht, dann geht gar nichts mit Programmieren. Wenn man nicht mit einem vernünftigen Programmer, der eingebaute Stromlimiter hat, programmiert, sollte man die Leitungen (MOSI, MISO, SCK und RESET) am besten mit jeweils einem Schutzwiderstand, z.B. 220 Ohm, schützen, um im Falle eines Pegelkonflikts die Sicherheit zu haben, dass da nichts passiert; auch die Injektionsströme bei fehlender Spannungsversorgung auf einer Seite werden dadurch so weit reduziert, dass nichts passieren kann. Irgendwelche gemessenen Low-Pegel mit ca. 1V sind in der Regel ein Indiz dafür, dass irgendetwas nicht richtig verbunden ist oder bereits ein Pinkonflikt fabriziert wurde. Ergo => alle relevanten Verbindungen nochmal explizit mit einem Multimeter prüfen – hinschauen, glauben hilft in diesem Fall nicht.

Deine superdupa Optimierung, alle ungenutzen Pins auf GND zu schalten, birgt hohe risiken – insbesondere beim Prototypen bzw. Programmschreiben können die Portausgänge versehentlich als Ausgang mit High-Pegel geschaltet werden, was schlimmstenfalls zum Tod des µControllers führen kann. Wenn man zu solchen drastischen Maßnahmen greift, dann macht man das ganz am Ende der Entwicklungsphase, wenn das Schreiben der Software abgeschlossen wurde und das Risiko nicht mehr vorhanden ist.

Angehängte Dateien:
: Bearbeitet durch User
#7984662
Lesenswert?

Sysfs schrieb:

Ich habe gerade einmal testweise den 10k Reset-Widerstand durch einen 60k Widerstand ersetzt, und jetzt schafft es der Programmer auf einmal, den Reset-Pin auf 0V zu ziehen. Überraschend.

Komisch. Der 74HCxx Treiber kann eigentlich locker mehr als 20mA treiben.

Da du so ein tolles 4-Kanal Oszilloskop hast, mache nochmal so ein Bild mit VCC, SCL, MOSI und RESET.

: Bearbeitet durch User
#7984664
Lesenswert?

Gregor J. schrieb:

Schreiben der Software abgeschlossen wurde

Das ist schon passiert.

Andreas S. schrieb:

Lass auch die unbenutzten I/O Pins einfach frei - antworten sollte der Chip über ISP

Ich habe nun also wo möglich Teile an den IO-Pins abgelötet und einen neuen MCU aufgelötet. Schockierenderweise geht es jetzt. Ich habe wieder alle Teile zurückgelötet und es geht immernoch. Irgendwie ist also tatsächlich der MCU gestorben. Ich verstehe es nicht.

Vielleicht habe ich nicht gut genug auf ESD geachtet und so den Chip getötet? Vielleicht habe ich den Chip gekocht als ich beim Auflöten zu spät gecheckt habe, dass mein Ganzes Flussmittel weggedampft war. Vielleicht hätte ich den usbtinyisp erst an den ICSP header anschließen und dann per USB anstecken sollen, um so zu vermeiden, dass womöglich kurzzeitig IO-Pins als GND fungieren, wenn VCC etwas früher den Kontakt herstellt...

Danke an euch alle, die sich die Mühe gemacht haben, das Problem mit mir zu lösen. Ich habe heute viele tolle Tipps und Hilfe erhalten :)

#7984678
Lesenswert?

Sebastian W. schrieb:

Einen 12V-Programmierer hast du wohl nicht, oder?

Nein, einen 12V Programmer habe ich leider nicht.

Andreas S. schrieb:

hoffendlich daraus gelernt wurde.

Ja, definitiv!

Nemopuk schrieb:

Ich wollte sehen, ob die Versorgung einigermaßen stabil ist.

Sorry, da have ich VCC überlesen. Neuer Anhang.

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren