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.
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?
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?
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.
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.
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?
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.
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
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.
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.
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!?
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.
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!
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).