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.

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.