Forum: Mikrocontroller und Digitale Elektronik ATmega328P nagelneu und dennoch defekt!?


von Norbert (elektronenknecht)


Lesenswert?

Hallo,

ich habe eine Testplatine mit u.a. einem Sockel für einen ATmega328P, an 
dessen logischem Pin2 ein 12er-NeoPixel-Ring angeschlossen ist.
Stromversorgung für den µC und das NeoPixel sind einwandfrei und mit 
einem ATmega328P aus einer älteren Charge funktioniert die Schaltung und 
das Programm auch einwandfrei: mit 1 sec Leuchtdauer werden alle 12 LEDs 
des NeoPixel nacheinander grün aufleuchten gelassen.
Soweit so gut.

Nun habe ich aber zwei ATmega328P aus einer neueren Charge von 
reichelt.de bestellt, die beide nicht so funktionieren wie der alte µC.
Mit ein und demselben Programm auf ein und derselben Platine leuchten 
mit den neuen Chips alle 12 LEDs gleichzeitig und dauerhaft weiß mit 
maximaler Helligkeit. Das Programm wurde mit ein und denselben 
Parametern hochgeladen.

Die Chipkennzeichnungen sind wie folgt:

alt:
ATMEL 35473D
ATMEGA328P U
231704W

neu:
ATMEL 35473D
ATMEGA328P U
230785D

Der einzige Unterschied liegt in der Chargennummer oder wie eben die 
letzte Zeile "231705W"/"230785D" zu bezeichnen ist.

Was fällt Euch dazu ein außer: wegschmeißen/zurückgeben und bei 
(zeitlich verzögertem) Neukauf darauf hoffen, daß ich Chips aus einer 
funktionstüchtigen Charge bekomme?

von Ralph S. (jjflash)


Lesenswert?

Hier zuerst einmal die Frage:

läuft Deine Schaltung mit externem Quarz oder internem RC-Oszillator?
Sind die Fuses korrekt gesetzt ?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Norbert schrieb:
> Mit ein und demselben Programm
Auch mit den selben Fuse-Einstellungen?
So mancher ist schon an der CLKDIV8 Fuse gescheitert.

> Was fällt Euch dazu ein außer: ... darauf hoffen, daß ich Chips aus einer
> funktionstüchtigen Charge bekomme?
Ich würde den Fehler suchen. Einfach ein Oszi anschließen und schauen, 
was sich da auf dem Bus tut.

Nur aus Interesse:
> an dessen logischem Pin2
Was ist ein "logischer Pin2"?

: Bearbeitet durch Moderator
von Norbert (elektronenknecht)


Lesenswert?

Ralph S. schrieb:
> läuft Deine Schaltung mit externem Quarz oder internem RC-Oszillator?
Mit dem internen RC-Oszillator auf 8 MHz. Wie gesagt dieselben 
Uploadparameter bei altem/neuem Chip.
Bei der neuen Platine wird dann ein 16-MHz-Quarz mit zwei 22-pF-Kerkos 
in nächster Nähe des µC sein. Aber soweit ich gelesen habe, ist das ja 
nur für die Analogeingänge wichtig, oder?

Ralph S. schrieb:
> Sind die Fuses korrekt gesetzt ?
Lothar M. schrieb:
> Auch mit den selben Fuse-Einstellungen?
> So mancher ist schon an der CLKDIV8 Fuse gescheitert.
Boah, von den Fuses habe ich bisher noch keine Ahnung, bin noch nicht 
sooo tief in der Materie drin.

Lothar M. schrieb:
> Was ist ein "logischer Pin2"?
Ich meine nicht den physischen Pin am Gehäuse (da wäre es Nr. 4), 
sondern den Pin, der mit "2" in der Arduino-IDE angesprochen wird. Also 
"2/INT0/PCINT18/PD2" laut Pinout.

Lothar M. schrieb:
> Ich würde den Fehler suchen.
> Einfach ein Oszi anschließen und schauen, was sich da auf dem Bus tut.
Ein Oszi habe ich (daheim) nicht verfügbar.

von Peter D. (peda)


Lesenswert?

Norbert schrieb:
> Ein Oszi habe ich (daheim) nicht verfügbar.

Man kann erstmal mit _delay_ms(1000) nur eine Blink-LED programmieren 
und dann mit einer Stoppuhr ausmessen, ob das stimmt.

von Rainer W. (rawi)


Lesenswert?

Norbert schrieb:
> Ein Oszi habe ich (daheim) nicht verfügbar.

Dann nimm einen Logikanalysator - kostet keine 10€ und ist eigentlich 
ein Muss, wenn es um Datenschnittstellen oder Kommunikation mit 
Peripherie geht.

von Benjamin K. (bentschie)


Lesenswert?

Norbert schrieb:
> Aber soweit ich gelesen habe, ist das ja
> nur für die Analogeingänge wichtig, oder?

Nein, das ist wichtig für alles was Zeitabhängig ist. Und die 
Ansteuerung der Pixel ist Zeitabhängig, denn die haben ein festes Timing 
und mit falscher Frequenz verstehen die gar nichts.

> Boah, von den Fuses habe ich bisher noch keine Ahnung, bin noch nicht
> sooo tief in der Materie drin.

Das haben die meisten hier anscheinend richtig vermutet. Das ist ein 
beliebter Fallstrick bei dem AtMegas.
Deine Annahme, "die Programmierung der beiden Kontroller ist identisch" 
ist leider so nicht richtig. Wenn die Fuses nicht gleich sind, dann ist 
es sehr gut möglich, das die Kontroller sich sehr anders verhalten, bis 
zu gar nichts machen.

Erstbeste Idee: Kopier doch die Einstellung der Fuses vom 
funktionierenden Kontroller zu den neuen rüber.

von Oliver S. (oliverso)


Lesenswert?

Norbert schrieb:
> Bei der neuen Platine wird dann ein 16-MHz-Quarz mit zwei 22-pF-Kerkos
> in nächster Nähe des µC sein. Aber soweit ich gelesen habe, ist das ja
> nur für die Analogeingänge wichtig, oder?

Diese Aussage enthält so viel verborgenes Potential für alle möglichen 
Missverständnisse oder auch Fehler, die solltest du mal näher ausführen.

Da du aber Kondensatoren schon angesprochen hast: Hast du welche an 
ALLEN Spannungsversorgungspins?

Oliver

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Norbert schrieb:
> Lothar M. schrieb:
>> Ich würde den Fehler suchen.
>> Einfach ein Oszi anschließen und schauen, was sich da auf dem Bus tut.
> Ein Oszi habe ich (daheim) nicht verfügbar.
Das Inbetriebnehmen und Debuggen solcher serieller Busse ohne Oszi oder 
Logicanalyzer ist wie "Autofahren nach Gehör": man weiß immer erst 
hinterher, dass es gekracht hat. Man weiß aber nie, wie knapp das 
insgesamt war.

Mein Tipp, falls du noch mehr in Richtung Elektronik machen willst: kauf 
dir das billigste Picosope, dann hast du für die nächsten Jahre 
ausgesorgt. Oder kauf wenigstens den billigsten LA, damit du wenigstens 
einäugig unterwegs bist, statt völlig blind.

Oliver S. schrieb:
> Hast du welche an ALLEN Spannungsversorgungspins?
Zwischen die Versorgungspins gehören die hin:
- http://www.lothar-miller.de/s9y/archives/12-Entkopplung.html

Norbert schrieb:
> Bei der neuen Platine wird dann ein 16-MHz-Quarz mit zwei 22-pF-Kerkos
> in nächster Nähe des µC sein.
Und am besten auch richtig angeschlossen:
- http://www.lothar-miller.de/s9y/archives/17-Quarz.html

von Harald K. (kirnbichler)


Lesenswert?

Lothar M. schrieb:
> kauf dir das billigste Picosope, dann hast du für die nächsten Jahre
> ausgesorgt.

Hmm. Meinst Du das 2204a mit 10 MHz Bandbreite, zwei Kanälen und 8 kS 
Speicher für 155 Euro (bzw. 125 ohne Tastköpfe)?

Da würd' ich mich ja eher nach einem gebrauchten DS1054Z umsehen, das 
dürfte kaum mehr kosten ...

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


Lesenswert?

Norbert schrieb:
> NeoPixel

Norbert schrieb:
> Mit dem internen RC-Oszillator auf 8 MHz.

Selbst wenn die Fuses stimmen, kann der interne Takt zu  weit abweichen.
Die LEDs sind da schon recht pingelig

Norbert schrieb:
> Wie gesagt dieselben
> Uploadparameter bei altem/neuem Chip.

Schade. dass die geheim bleiben.
Denn der Auslieferungszustand ist 1MHz und nicht 8

Norbert schrieb:
> Bei der neuen Platine wird dann ein 16-MHz-Quarz mit zwei 22-pF-Kerkos
> in nächster Nähe des µC sein. Aber soweit ich gelesen habe, ist das ja
> nur für die Analogeingänge wichtig, oder?
Eher selten, dass da ein exaktes Timing nötig ist.
Der Adc selber ist da recht gnädig

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Lothar M. schrieb:
> Ich würde den Fehler suchen. Einfach ein Oszi anschließen und schauen,
> was sich da auf dem Bus tut.

Kanonen und Spatzen. Dazu kommt: was nutzt es dir, rauszufinden, das 
sich da nichts tut? Oder es tut sich was, aber keiner weiss, ob das so 
richtig ist?

Ein richtig angeschlossener AVR mit Fuses ab Werk läuft. Immer.

Tut er das nicht: Schaltplan und Aufbau prüfen, dazu die 
Programmierparameter.

Ein Oszi brauchts dafür nicht. Eins  haben schadet natürlich trotzdem 
nicht.

Oliver

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Harald K. schrieb:
> Hmm. Meinst Du das 2204a mit 10 MHz Bandbreite, zwei Kanälen und 8 kS
> Speicher für 155 Euro (bzw. 125 ohne Tastköpfe)?
Ja.

> Da würd' ich mich ja eher nach einem gebrauchten DS1054Z umsehen, das
> dürfte kaum mehr kosten ...
Da brauchst du aber offenbar viel Glück und/oder viel Ausdauer.

Aber letzlich ist es egal, welches davon hier verwendet wird. Jedes der 
beiden Messgeräte (und sogar der erwähnte Saleae-Clone für 15€) ist 
besser, als blind seinen Weg auf dem seriellen Bus zu suchen.

Oliver S. schrieb:
> Lothar M. schrieb:
>> Ich würde den Fehler suchen. Einfach ein Oszi anschließen und schauen,
>> was sich da auf dem Bus tut.
> Kanonen und Spatzen.
Wenn man die Kanone mal hat, kann man damit ruhig mal auf einen Spatzen 
zielen.

> Dazu kommt: was nutzt es dir, rauszufinden, das sich da nichts tut?
Ich finde heraus, dass sich das, was sich da tut, um den Faktor 8 zu 
langsam tut.

> Ein richtig angeschlossener AVR mit Fuses ab Werk läuft. Immer.
Du bist offenbar noch jung und dein Glaube an das Gute im Menschen 
felsenfest und unerschütterlich...  ;-)

: Bearbeitet durch Moderator
von Harald K. (kirnbichler)


Lesenswert?

Lothar M. schrieb:
> Jedes der
> beiden Messgeräte (und sogar der erwähnte Saleae-Clone für 15€) ist
> besser, als blind seinen Weg auf dem seriellen Bus zu suchen.

Das definitiv, das unterschreibe ich sogar blind ...

von Norbert (elektronenknecht)


Lesenswert?

Ok, ich gucke mich nach einem Logikanalysator um.

Ich habe (bei der neuesten Platinenversion) zwischen OSC1 und OSC2 
(physische Pins 9 und 10) das 16-MHz-Quarz geklemmt und jeweils einen 
22-pF-Kerko zwischen OSC1/OSC2 und GND geklemmt. Bei der aktuellen 
Version sind diese drei Bauteile noch nicht implementiert.

Beide GNDs (Pin 8 und 22) am µC sind mit dem Minuspol der 
Spannungversorgung verbunden.
VCC, AVCC und AREF (Pin 7, 20 und 21) sind mit 5 V DC verbunden und 
zwischen VCC und GND klemmt ein 100-µF-Elko.
Lothar schreibt hier aber von 100-nF-Kerkos!? Hoppala!? Arg schlimm!?

Arduino F. schrieb:
> Norbert schrieb:
>> Wie gesagt dieselben
>> Uploadparameter bei altem/neuem Chip.
> Schade. dass die geheim bleiben.
> Denn der Auslieferungszustand ist 1MHz und nicht 8
Ich habe beim Boardmanager "DIY ATmega*8" von James Sleeman installiert.
- als Board "ATmega328/P/PB" ausgewählt
- Processor Version "Atmega328P"
- Processor Speed "(8 MHz intern)
- Use Bootloader "No"
- LTO "enabled"
- BrownOut "2,7 V"
- Rest "Standard"

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Oliver S. schrieb:
> Ein richtig angeschlossener AVR mit Fuses ab Werk läuft. Immer.

Aber eben mit 1 MHz und nicht mit 8 oder 16.

Arduino F. schrieb:
> Die LEDs sind da schon recht pingelig

Um dein "pingelig" in Zahlen zu fassen:
Auf Abweichung unter 150ns legen die WS2812B Wert - sagt das Datenblatt.

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Norbert schrieb:
> Ich habe beim Boardmanager "DIY ATmega*8" von James Sleeman installiert.
> - als Board "ATmega328/P/PB" ausgewählt
> - Processor Version "Atmega328P"
> - Processor Speed "(8 MHz intern)
> - Use Bootloader "No"
> - LTO "enabled"
> - BrownOut "2,7 V"
> - Rest "Standard"

Sieht soweit richtig aus!
Allerdings muss man bei der Arduino IDE ein einziges mal auf Bootloader 
brennen drücken, damit auch die Fuses richtig gesetzt werden. Selbst 
wenn man keinen Bootloader verwendet.
Ohne wirds auch der Quarz nicht tun.

Norbert schrieb:
> Lothar schreibt hier aber von 100-nF-Kerkos!? Hoppala!? Arg schlimm!?

An jeden der Versorgungspins gehört ein 100nF Kerko.
Wie viele Elkos du da unterbringst ist fast egal, einer sollte reichen.

Norbert schrieb:
> VCC, AVCC und AREF (Pin 7, 20 und 21) sind mit 5 V DC verbunden
Aref wird nicht mit Vcc verbunden, Das macht der intern, wenn gefordert.
Aber Aref sollte ebenfalls einen 100nF Kerko bekommen.

: Bearbeitet durch User
von Norbert (elektronenknecht)


Lesenswert?

Arduino F. schrieb:
> Allerdings muss man bei der Arduino IDE ein einziges mal auf Bootloader
> brennen drücken, damit auch die Fuses richtig gesetzt werden. Selbst
> wenn man keinen Bootloader verwendet.
> Ohne wirds auch der Quarz nicht tun.
Ha! Es geht nun!
Ich erinnere mich dunkel, irgendwann mal den Bootloader auf dem "alten 
Chip" gebrannt zu haben. War mir dessen aber gar nicht mehr bewußt.
Danke für den Hinweis!

Wegen der 100-nF-Kerkos gucke ich dann mal bei der nächsten Version der 
Platine, bisher scheint es wie gewollt zu funktionieren. Verbessern geht 
aber natürlich immer. Auch hierfür danke schön!

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Oliver S. schrieb:
> Kanonen und Spatzen. Dazu kommt: was nutzt es dir, rauszufinden, das
> sich da nichts tut? Oder es tut sich was, aber keiner weiss, ob das so
> richtig ist?

Man würde die falsche Bitrate sofort sehen (falls es daran scheitert).

Beitrag #7861962 wurde vom Autor gelöscht.
von Oliver S. (oliverso)


Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:
> falls es daran scheitert

Was es bei dem Fehlerbild aber nicht tut.

Und wie die Lösung ja gezeigt hat, wars ein Ebene 8 Problem. Dafür 
brauchts kein Oszi...

Oliver

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.