Forum: Mikrocontroller und Digitale Elektronik Atmega 328PB lässt sich nicht programmieren


von Sysfs (sysfs)


Angehängte Dateien:

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!

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Wie kommst du auf die irrwitzige Idee, Aref auf GND zu klemmen?

von Sysfs (sysfs)


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
von Helmut -. (dc3yc)


Lesenswert?

Und wo ist der Schwingquarz/Resonator, wo sind die Abblock-Cs? Warum ist 
eine Diode zwischen Regler und Prozessor-Versorgung?

von Sebastian W. (wangnick)


Lesenswert?

Ist der Atmega328PB frisch vom Werk? Ich frage, weil du keinen Takt 
anlegst …

LG, Sebastian

von Arduino F. (Firma: Gast) (arduinof)


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
von Roland F. (rhf)


Lesenswert?

Hallo,
die Pin-Nummerierung des Programmiersteckers ist um 180° verdreht.
(Tipp: in KiCad gibt es diesen Stecker als beschriftetes 
Schaltplansymbol)

rhf

von Sebastian W. (wangnick)


Lesenswert?

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

Gut gesehen. Pin 21 GND fehlt!

LG, Sebastian

von Gerhard O. (gerhard_)


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.

von Sysfs (sysfs)


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
von Walter B. (Firma: privat) (waldopepper4)


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.

von Sysfs (sysfs)


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
von Nemopuk (nemopuk)


Lesenswert?

Wenn du ein Oszilloskop hast, messe VCC und RESET in dem Moment, wo der 
Programmiervorfang startet. Zeige uns due Bilder  vielleicht sehen wir 
da schon was. Wenn nicht, wären als nächstes die drei Signale der ISP 
Schnittstelle von Interesse.

von Christian (trimatik-chris)


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.

von Andreas S. (bastelmax)


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.

von H. H. (hhinz)


Lesenswert?

Arduino F. schrieb:
> Wie kommst du auf die irrwitzige Idee, Aref auf GND zu klemmen?

Spielt keine Rolle, solange man den A/D nicht verwendet.

Der Stromverbrauch des µC kann natürlich ein klein wenig ansteigen.

: Bearbeitet durch User
von Frank K. (fchk)


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

von Sysfs (sysfs)


Angehängte Dateien:

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

: Bearbeitet durch User
von Nemopuk (nemopuk)


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
von Sysfs (sysfs)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Andreas S. (bastelmax)


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.

von Sysfs (sysfs)


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.

von Frank K. (fchk)


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

von Sysfs (sysfs)


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.

von Frank K. (fchk)


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
von Nemopuk (nemopuk)


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.

von Sysfs (sysfs)


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
von Frank K. (fchk)


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

von Nemopuk (nemopuk)


Lesenswert?

Sysfs schrieb:
> es sei denn die Schutzdioden sind Teil des Atmel MCU. Neben dem MCU ist
> nur noch ein 74HC125 "quad buffer".

Ich meine Dioden in den ICs.

von Nemopuk (nemopuk)


Lesenswert?

Sysfs schrieb:
> Im Datasheet steht eigentlich an diversen Stellen, dass die Frequenz mit
> sinkender Spannung immer weiter limitiert ist. Wieso gilt das nicht?

Der Oszillator funktioniert im gesamten Spannungsbereich. Die CPU hinter 
dem Oszillator ist anspruchsvoller.

von Sysfs (sysfs)


Angehängte Dateien:

Lesenswert?

Nemopuk schrieb:
> Die CPU hinter
> dem Oszillator ist anspruchsvoller.

Frank K. schrieb:
> Siehe Abschnitt "33.4
> Speed Grades".

Also der CPU scheint die 10MHz noch bis zu 2.7V zu schaffen. Mein Ziel 
waren 3.3V also wird mir der MCU noch reichen.

von Nemopuk (nemopuk)


Lesenswert?

Ich habe auch schon 16 MHz mit 3,0V gemacht, aber es ist halt nicht 
garantiert.

von Sysfs (sysfs)


Lesenswert?

Ich bewege mich ja hier noch in der "Safe Operating Area" des Graphen, 
also müsste das ja eigentlich schon garantiert sein...?

von Nemopuk (nemopuk)


Lesenswert?

Sysfs schrieb:
> also müsste das ja eigentlich schon garantiert sein...?

ja

von Sysfs (sysfs)


Lesenswert?

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.

Weiterhin leider keine Antwort vom MCU...

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Andreas S. (bastelmax)


Lesenswert?

Nimm zum Test einen neuen Atmega setze nur die Minimalbeschaltung ein
(max. 5V).
Lass auch die unbenutzten I/O Pins einfach frei - antworten sollte der
Chip über ISP.
Orientieren kannst Du Dich an der Schaltung von Gregor J.
Alles weitere wurde schon ausführlich erleutert.

von Nemopuk (nemopuk)


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
von Sysfs (sysfs)


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 :)

von Nemopuk (nemopuk)


Lesenswert?

Sysfs schrieb:
> Vielleicht habe ich nicht gut genug auf ESD geachtet und so den Chip
> getötet?

Sehr unwahrscheinlich. Die AVR sind ziemlich robust.

von Andreas S. (bastelmax)


Lesenswert?

Sysfs schrieb:
> Irgendwie ist also
> tatsächlich der MCU gestorben. Ich verstehe es nicht.

doch mehr als 5V oder lag es an Deine GND Verbindungen ?
Schön,dass es doch noch ein Erfolgserlebnis gibt und hoffendlich
daraus gelernt wurde.

von Sebastian W. (wangnick)


Lesenswert?

Sysfs schrieb:
> Irgendwie ist also tatsächlich der MCU gestorben. Ich verstehe es nicht.

Eigentlich sind die Atmega ziemlich robust. Vielleicht kann man ihm mit 
einem externen 1MHz-Takt wieder auf die Beine helfen. Einen 
12V-Programmierer hast du wohl nicht, oder?

LG, Sebastian

von Sysfs (sysfs)


Angehängte Dateien:

Lesenswert?

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

Das ist jetzt mit dem 60k Widerstand.

: Bearbeitet durch User
von Nemopuk (nemopuk)


Lesenswert?

Sysfs schrieb:
> Das ist jetzt mit dem 60k Widerstand.

Da sehe ich erfolgreiches SPI.

Welche Farbe ist VCC? Ich wollte sehen, ob die Versorgung einigermaßen 
stabil ist.

: Bearbeitet durch User
von Sysfs (sysfs)


Angehängte Dateien:

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.

von Nemopuk (nemopuk)


Lesenswert?

Sysfs schrieb:
> Sorry, da have ich VCC überlesen. Neuer Anhang.

Das sieht sehr gut aus.

Jetzt würde ich aus Neugier mal den Reset Pin kräftig auf VCC ziehen, 
z.B  mit 1k Ohm. Das Bild müsste danach immer noch genau so aussehen. 
Wenn nicht, ist vermutlich der Reset Ausgang deines Programmieradapters 
defekt.

von Sysfs (sysfs)


Lesenswert?

Nemopuk schrieb:
> Jetzt würde ich aus Neugier mal den Reset Pin kräftig auf VCC ziehen,

Hm das sieht auch sehr ähnlich aus. ich frage mich, ob ich nicht gestern 
zu einem falschen Widerstand gegriffen habe. Ich würde mir das 
zutrauen...

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.