Hallo zusammen, langsam weiss ich nichtmehr weiter und würde mich über euren Rat freuen. Ich habe einen neuen ATMEGA328P auf Platine mit ISP und ohne externen Quarz. Ein Arduino UNO dient als ISP. Über die Arduino IDE konnte ich bisher noch garnicht auf den Mega zugreifen (avrdude: Device signature = 0x000000 avrdude: Yikes! Invalid device signature.), allerdings über AVRDUDE und AVRDUDESS (>>>: avrdude.exe -c arduino -P COM3 -b 115200 -p m8 Detected 1e950f = ATmega328P). Laut AVRDUDESS stehen alle Fuse-Bits auf 0x00. Soweit ich der Anleitung des Mega entnommen habe, sollten diese auf L 0x62, H 0xD9, E 0xFF und LB 0xFF stehen. Möchte ich diese jedoch programmieren, erhalte ich die Fehlermeldung: >>>: avrdude.exe -c arduino -p m328p -P COM3 -b 115200 -U lfuse:w:0x62:m -U hfuse:w:0x00:m -U efuse:w:0x00:m Processing -U lfuse:w:0x62:m Reading 1 byte for lfuse from input file 0x62 Writing 1 byte (0x62) to lfuse *** failed Error: unable to write lfuse (rc = -1) Habt ihr noch eine Idee was ich ausprobieren kann? Ich komme leider aus der Welt der Arduinos mit fertigen Bootloadern...
Mike L. schrieb: > Ich komme leider aus der Welt der Arduinos mit fertigen Bootloadern... Ich mag mich irren, aber ich denke, dass "-c arduino" eben genau dafür da ist, über den Bootloader eines Arduino mit dem Chip zu reden. Wenn du den Arduino als Programmiergerät benutzt, musst du ein "-c <irgendwas>" entsprechend dem angeben, was die Firmware, die du auf dem Arduino laufen hast, als Protokoll implementiert.
Ich denke er hat den UNO als Programmer der wie ein Arduino angesprochen werden will?! Mit -v AVRDUDE mal geschwätziger stellen. Ob das auch in der IDE geht, weiß ich nicht. Dann könnte man noch die Bitrate mit -B (??) etwas runterdrehen. Der 328P läuft ja nicht mit "full Speed".
900ss schrieb: > Ich denke er hat den UNO als Programmer der wie ein Arduino angesprochen > werden will?! Genau. > Mit -v AVRDUDE mal geschwätziger stellen. Ob das auch in der IDE geht, > weiß ich nicht. > > Dann könnte man noch die Bitrate mit -B (??) etwas runterdrehen. Der > 328P läuft ja nicht mit "full Speed". Laut ISP Sketch läuft der UNO mit 19200 Baud. Stelle ich die Abfrage mit 19200, erhalte ich folgende Ausgabe: Using Port : COM3 Using Programmer : arduino Overriding Baud Rate : 19200 AVR Part : ATmega328P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00 Programmer Type : Arduino Description : Arduino Hardware Version: 2 Firmware Version: 1.18 Topcard : Unknown Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us avrdude.exe: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.02s avrdude.exe: Device signature = 0x000000 (retrying) Reading | ################################################## | 100% 0.02s avrdude.exe: Device signature = 0x000000 (retrying) Reading | ################################################## | 100% 0.02s avrdude.exe: Device signature = 0x000000 avrdude.exe: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check. avrdude.exe done. Thank you. Bei 115200 Baud erhalte ich diese Ausgabe: Using Port : COM3 Using Programmer : arduino Overriding Baud Rate : 115200 AVR Part : ATmega328P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00 Programmer Type : Arduino Description : Arduino Hardware Version: 3 Firmware Version: 4.4 Vtarget : 0.3 V Varef : 0.3 V Oscillator : 28.800 kHz SCK period : 3.3 us avrdude.exe: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude.exe: Device signature = 0x1e950f (probably lgt8fx328p) avrdude.exe: safemode: lfuse reads as 0 avrdude.exe: safemode: hfuse reads as 0 avrdude.exe: safemode: efuse reads as 0 avrdude.exe: safemode: lfuse reads as 0 avrdude.exe: safemode: hfuse reads as 0 avrdude.exe: safemode: efuse reads as 0 avrdude.exe: safemode: Fuses OK (E:00, H:00, L:00) avrdude.exe done. Thank you.
Beitrag #7796101 wurde vom Autor gelöscht.
Ich vermute, dass du nicht mit deinem Target sprichst, sondern mit dem Bootloader des Arduino Uno. Der Bootloader spricht das gleiche Protokoll (stk500) wie der ISP Sketch, allerdings ohne Zugriff auf die Fuses. Wenn du als Target einen anderes ATmega Modell verwenden würdest, wäre das sofort anhand der angezeigten Device-ID offensichtlich. Das Problem kommt daher, dass der Arduino Uno beim Öffnen des virtuellen COM Portes einen Reset macht und in der ersten Sekunde danach im Bootloader Modus läuft. Am einfachsten löst man das Problem, indem man einen Kondensator mit 10 µF oder mehr an Reset+Gnd des Arduino Uno anschließt. Dadurch wird der kurze Reset-Impuls unterdrückt. "The 10µF electrolytic capacitor connected to RESET and GND of the programming board is needed only for the boards that have an interface between the microcontroller and the computer's USB, like Mega, UNO, Mini, Nano." https://docs.arduino.cc/built-in-examples/arduino-isp/ArduinoISP/
:
Bearbeitet durch User
Sherlock 🕵🏽♂️ schrieb: > Ich vermute, dass du nicht mit deinem Target sprichst, sondern mit dem > Bootloader des Arduino Uno. Der Bootloader spricht das gleiche Protokoll > (stk500) wie der ISP Sketch, allerdings ohne Zugriff auf die Fuses. Wenn > du als Target einen anderes ATmega Modell verwenden würdest, wäre das > sofort anhand der angezeigten Device-ID offensichtlich. Hast recht gehabt, ich hab mein Target einmal abgeklemmt und bekomme das gleiche Ergebnis... Das mit dem Kondensator habe ich probiert, allerdings bekomme ich in AVRDUDE dann bei 19200 Baud das gleiche Ergebnis und bei 115200 Baud "not in sync". Bei AVRDUDESS funktioniert mit Kondensator die Kommunikation garnichtmehr.
Hast du den Reset Eingang des Targets mit Pin 10 des Arduino Uno verbunden? Zeige Fotos vom Aufbau. Nimm die niedrige Baudrate. Für 115200 Baud brauchst du einen Arduino Uno mit Quarz, die meisten Board haben aber nur einen Keramik Resonator, die sind dafür nur mit Glück präzise genug.
:
Bearbeitet durch User
Sherlock 🕵🏽♂️ schrieb: > Den ISP Sketch hast du aber installiert, oder? > > Probiere einen viel größeren Kondensator. > > Hast du den Reset Eingang des Targets mit Pin 10 des Arduino Uno > verbunden? > > Nimm die niedrige Baudrate. Für 115200 Baud brauchst du einen Arduino > Uno mit Quarz, die meisten Board haben aber nur einen Keramik Resonator, > die sind dafür nur mit Glück präzise genug. ISP Sketch ist installiert, das ist das Einzige was funktioniert, sonst läuft nix...Reset Eingang ist verbunden - ich habe jetzt 10uF, 47uF und 100uF durch, bei allen das gleiche Ergebnis: Using Port : COM3 Using Programmer : stk500v1 Overriding Baud Rate : 19200 AVR Part : ATmega328P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : STK500 Description : Atmel STK500 Version 1.x firmware Hardware Version: 2 Firmware Version: 1.18 Topcard : Unknown Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.02s avrdude: Device signature = 0x000000 (retrying) Reading | ################################################## | 100% 0.03s avrdude: Device signature = 0x000000 (retrying) Reading | ################################################## | 100% 0.02s avrdude: Device signature = 0x000000 avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check. avrdude done. Thank you. Chip-Löschung fehlgeschlagen: Hochladefehler: exit status 1 Kann ich am uC Kontrollieren ob der überhaupt funktioniert? Spannungen liegen an, aber das muss ja nix heißen. Habe mal gehört, dass der an einem Pin ein Taktsignal ausgeben soll, sobald der mit Spannung versorgt wird.
3,3V passt nicht zum Arduino Uno. Der hat nämlich 5V. Die Pins 11, 12, 13 sind der "old style wiring". Hast du den ISP Sketch entsprechend konfuriert?
:
Bearbeitet durch User
Mike L. schrieb: > Habe mal gehört, dass der an einem Pin ein Taktsignal ausgeben soll, > sobald der mit Spannung versorgt wird. Nein, dazu müsste man ihn erst programmieren. Zur ersten Kontrolle liest man die Device ID via ISP aus. Vielleicht kaufst du dir besser einen fertigen ISP Adapter, dann hast du nicht zwei Probleme gleichzeitig. Aber kaufe einen der 3,3V unterstützt, bzw welche Spannung du brauchst. Die billigen USBASP Sticks haben fast alle den Fehler, dass sie zwar einen 3,3V Regler enthalten, aber die Signale haben trotzdem 5V.
Mike L. schrieb: > Stelle ich die Abfrage mit 19200 Ich hatte -B (Bitrate/Bitclock) nicht -b (Baudrate) gemeint (und geschrieben). Aber hat sich ja eh erledigt :)
:
Bearbeitet durch User
Der ISP Sketch ist von alleine langsam genug. Steht in Quelltext.
Es ist länger her, hat aber meist problemlos funktioniert Ich habe mit einem UNO als ISP nackte Chips incl. Bootloader gefläsht - hierzu vor dem Flashen die Shift-Taste drücken? Probleme mit 3,3V 5V und 8 16 MHz sind ausgeschlossen? Hier eine gute ANleitung: https://docs.arduino.cc/built-in-examples/arduino-isp/ArduinoISP/ Sind die 328P neu? Nicht das die evtl. auf externen Oszillator umgestellt wurden? - hierfür gibt es dann auch einen speziellen ISP-Sketch der den Takt zur Verfügung stellt
Sherlock 🕵🏽♂️ schrieb: > Vielleicht kaufst du dir besser einen fertigen ISP Adapter, dann hast du > nicht zwei Probleme gleichzeitig. Wäre jetzt auch mein Vorschlag gewesen.
Hmm, soooo schlecht ist doch der Arduino als Programmer gar nicht. Bei mir hier läuft ein STK500V2 seit Jahren problemlos. So, ich gehe schlicht davon aus, dass der TO das Beispielsketch von Arduino auf den UNO geladen hat. Dieser Sketch macht dann aus dem UNO einen - AVRISP - Programmer - mit 19200 Bd Um jetzt mit dem UNO einen Chip zu flashen muß man das dem AVRDUDE sagen, dass der Programmer nun nicht mehr Arduino(bootloader) heißt, sondern eben avrisp. Verbindung Arduino zum zu flashenden ATmega328p Also:
1 | Arduino-Anschluss | ATmega328p (28pol) |
2 | ------------------------------------------------ |
3 | Arduino 13 (PB5 - SCK) => Pin 19 (PB5 - SCK) |
4 | Arduino 12 (PB4 - Miso) => Pin 18 (PB4 - Miso) |
5 | Arduino 11 (PB3 - Mosi) => Pin 17 (PB3 - Mosi) |
6 | Arduino 10 (PB2) => Pin 1 (reset) |
7 | |
8 | An Pin 1 einen Widerstand 10kOhm nach +Vcc schalten |
9 | (Pop-Up Widerstand) |
Aufruf von avrdude in der Kommandozeile dann: avrdude -c avrisp -p atmega328p -P COM3 -b 19200 -B5 Danach sollte AVRDUDE das angeschlossene Target melden (oder im Falle von AVRDUDE Version 8.0 beendet AVRDUDE sich selbst ohne eine weitere Meldung)
Ralph S. schrieb: > oder im Falle von AVRDUDE Version 8.0 beendet AVRDUDE sich selbst ohne > eine weitere Meldung Dagegen würde ein "-v" helfen, um mehr zu erzählen.
Jörg W. schrieb: > Dagegen würde ein "-v" helfen, um mehr zu erzählen. :-) mache ich ja schon, ich hab nur noch nicht alle meine Scripts umgestellt... und manchmal schaue ich erstaunt: was ist da denn los! Nur um festzustellen: Nix ist los!
Ralph S. schrieb: > Nur um festzustellen: Nix ist los! Tja, wenn es nichts zu erzählen gibt, kann man¹ ja auch einfach mal die Klappe halten. :-) ¹ also AVRDUDE in diesem Falle – nicht, dass sich jemand auf die Krawatte getreten fühlt …
Jörg W. schrieb: > Tja, wenn es nichts zu erzählen gibt, kann man¹ ja auch einfach mal die > Klappe halten. :-) :-) :-) :-)
Ralph S. schrieb: > Um jetzt mit dem UNO einen Chip zu flashen muß man das dem AVRDUDE > sagen, dass der Programmer nun nicht mehr Arduino(bootloader) heißt, > sondern eben avrisp. Danke für den Tipp, so kann es natürlich nicht funktionieren, wenn ich das nicht ändere. Beim ersten ATMEGA328P habe ich dennoch avrdude: Device signature = 0x000000 erhalten. Ich habe dann einen neuen eingelötet und nun erhalte ich: avrdude: Device signature = 0x1e950f (probably m328p) avrdude: safemode: lfuse reads as 62 avrdude: safemode: hfuse reads as D9 avrdude: safemode: efuse reads as FF avrdude: safemode: lfuse reads as 62 avrdude: safemode: hfuse reads as D9 avrdude: safemode: efuse reads as FF avrdude: safemode: Fuses OK (E:FF, H:D9, L:62) Scheint also zu funktionieren. Wie geht es jetzt weiter? Ich würde mir ungerne durch rumprobieren den zweiten auch zerschießen...
:
Bearbeitet durch User
Mike L. schrieb: > Ich würde mir ungerne durch rumprobieren den zweiten auch > zerschießen... Zerschossen ist der vermutlich nicht, du wirst nur durch das Aktivieren des Bootloaders irgendwie nicht mehr die gewünschte Firmware drauf haben oder sowas. Flash die doch mal neu. "safemode"? Long since gone. Du könntest ja ruhig mal eine neuere AVRDUDE-Version benutzen. Nicht dein eigentliches Problem, schon klar, aber es sind auch Bugs gefixt worden …
Jörg W. schrieb: > "safemode"? Long since gone. Du könntest ja ruhig mal eine neuere > AVRDUDE-Version benutzen. Nicht dein eigentliches Problem, schon klar, > aber es sind auch Bugs gefixt worden … Welche ist denn die aktuelle? Ich habe bisher 6.4. als aktuellste gefunden. Ich habe mir testweise folgendes auf den uC geladen, um die Funktion der WS2812B-B/T zu kontrollieren:
1 | #include <Adafruit_NeoPixel.h> |
2 | |
3 | #define PIN 30 // Pin für die WS2812B
|
4 | #define NUMPIXELS 9 // Anzahl der LEDs
|
5 | |
6 | Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); |
7 | |
8 | void setup() { |
9 | strip.begin(); |
10 | strip.setPixelColor(0, strip.Color(255, 0, 0)); // Setze die erste LED auf Rot |
11 | strip.show(); // Anwenden der Änderungen |
12 | }
|
13 | |
14 | void loop() { |
15 | // Nichts weiter machen
|
16 | }
|
Data-Pin und Pixel sind angepasst, Übertragung läuft ohne Fehlermeldung. Allerdings leuchten die LEDs nicht. Versorgungsspannung (5V) liegt an den LED an, 3,3V am uC. Auf der Datenleitung ist mit dem Oszi nichts erkennbar, daher vermute ich mal, dass der uC noch nicht richtig läuft.
Mike L. schrieb: > Scheint also zu funktionieren. Wie geht es jetzt weiter? Ich würde mir > ungerne durch rumprobieren den zweiten auch zerschießen.. In der Arduino IDE mit der Maus auf "hochladen" - dann die Shifttaste drücken Der Text ändert sich von "hochladen" zu "hochladen mit Programmer" Der vermeintlich defekte ist vermutlich nicht defekt sondern steht auf 8 / 16MHz oder auf externer Oszilator Ich würde statt der WS2812 über die serielle Schnittstelle schauen was passiert - gibt genügend Programme wo hier was ausgeben
Mike L. schrieb: > Welche ist denn die aktuelle? Ich habe bisher 6.4. als aktuellste > gefunden. Dann hast du einiges verpasst, inzwischen sind wir bei 8.0, und da gibt's sogar eine GUI mit dabei. Die würde ich noch ein wenig als experimentell bezeichnen, sollte aber grundsätzlich funktionsfähig sein – im Gegensatz zu all den anderen GUIs versucht sie nicht, irgendwie das Kommandozeilentool zu interpretieren, sondern sie setzt darunter direkt auf der libavrdude auf.
Jörg W. schrieb: > im Gegensatz zu all den anderen GUIs versucht sie nicht, irgendwie das > Kommandozeilentool zu interpretieren, sondern sie setzt darunter direkt > auf der libavrdude auf. Bei AVRDUDESS gefiel mir, dass die Kommandozeile für AVRDUDE mit angegeben wird. Dann brauche ich nur schnell probieren für den richtigen Parameter, wenn es mal klemmt beim manuellen Aufruf von AVRDUDE :) Wenn das bei dem neuen GUI auch so ist, wäre das natürlich toll. Ich nutze AVRDUDE in makefiles und die GUI halt wenn ich gerade keinen makefile habe und keinen schreiben möchte. Gegen die Lib spricht hingegen nichts. Allerdings die Trennung von GUI und Programmer-Funktion ist schon gut. Gerade unter Linux arbeiten ja viele Tools mit GUI so.
Mike L. schrieb: > #define PIN 30 // Pin für die WS2812B Watt is datt? Da wird ein Arduino Pin erwartet! 30 gibts beim m328p nicht. Also darfst du auch keine Funktionalität erwarten.
:
Bearbeitet durch User
900ss schrieb: > Wenn das bei dem neuen GUI auch so ist, wäre das natürlich toll. Das ist bei allen (mir bekannten) Arduino IDEs der Fall. Sieht manchmal anders aus, ist aber vorhanden-
:
Bearbeitet durch User
Arduino F. schrieb: > Mike L. schrieb: >> #define PIN 30 // Pin für die WS2812B > > Watt is datt? > Da wird ein Arduino Pin erwartet! > 30 gibts beim m328p nicht. > > Also darfst du auch keine Funktionalität erwarten. Hast recht, wäre der PD0, also Pin 0. Was ich nicht verstehe ist, wenn ich eine -v Abfrage mache, erhalte ich: AVR device initialized and ready to accept instructions Device signature = 1E 95 0F (ATmega328P, ATA6614Q, LGT8F328P) Möchte ich ein Sketch hochladen kommt: AVR device initialized and ready to accept instructions Device signature = 00 00 00 (retrying) Device signature = 00 00 00 (retrying) Device signature = 00 00 00 Error: invalid device signature Error: expected signature for ATmega328P is 1E 95 0F - double check connections and try again, or use -F to carry on regardless
:
Bearbeitet durch User
Mike L. schrieb: > Was ich nicht verstehe ist, wenn ich eine -v Abfrage mache, erhalte ich: > AVR device initialized and ready to accept instructions > Device signature = 1E 95 0F (ATmega328P, ATA6614Q, LGT8F328P) > > Möchte ich ein Sketch hochladen kommt: > AVR device initialized and ready to accept instructions > Device signature = 00 00 00 (retrying) > Device signature = 00 00 00 (retrying) > Device signature = 00 00 00 > Error: invalid device signature > Error: expected signature for ATmega328P is 1E 95 0F > - double check connections and try again, or use -F to carry on > regardless Ohne konkrete Kommandozeile ist das eine Null Aussage.
:
Bearbeitet durch User
Beitrag #7796605 wurde vom Autor gelöscht.
Mike L. schrieb: > Ich habe mir testweise folgendes auf den uC geladen, um die Funktion der > WS2812B-B/T zu kontrollieren: Grundsätzlich: Der ATmega328p ist nicht wirklich eine schnelle MCU. Um mit diesem WS2812 Leuchtdioden zu betreiben sind unterschiedliche Autoren für die Arduino-Libs den Weg über Assembler gegangen um die noch ansteuern zu können. Das ganze Arduino Framework in Verbindung mit AVR Controllern baut darauf auf, dass die Controller mit 16 MHz betrieben werden. Mike L. schrieb: > Ich habe einen neuen ATMEGA328P auf Platine mit ISP und ohne externen > Quarz. Ohne externen Quarz ist die maximale Frequenz die mit einem Mega328 machbar ist eben nur 8 MHz (und ich glaube - ich weiß es nicht gaaaanz genau - dass das für den Betrieb mit WS2812 Leuchtdioden nicht schnell genug ist). Zudem: Wenn das ein fabrikneuer Mega328 ist und du die Fuses bisher in Ruhe gelassen hast, dann läuft der im Moment mit 1 MHz und internem Takt => das ist definitiv zu langsam für den Betrieb mit WS2812. Wie man die Fuses einstellt kannst du hier abfragen: https://www.engbedded.com/fusecalc/ Dort wählst du deinen ATmega328p aus. Hier ist jedoch absolute Vorsicht geboten, weil du mit falschen Einstellungen bei den Fuses du dir den Zugang zum Controller sperren kannst und du den Controller nur mit einem "Hochvolt-Programmer" wieder in den ISP-Modus bekommst. Namentlich darfst du die Fuses mit der Bezeichnung: - RSTDISBL - SPIEN nicht verändern. Tust du das, wirst du dich wie oben beschrieben aussperren! Zusätzlich, wenn du den Controller ohne Quarz verwenden willst, darfst du bei der Taktquelle für CKSEL0 bis CKSEL3 keine Einstellung machen, die einen externen Taktgeber oder Quarz erfordert! (und du dich dann ebenfalls aussperrst) Die Einstellungen der Fuses für 8Mhz interner Takt für den Mega328 sind (je nach Startup-Time) bspw.: -U lfuse:w:0xd2:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m Diese Einstellung setzt den 328er auf 6CK/14CK +4.1ms nach einem Spannungsanlegen oder Reset. Aufruf von AVRDUDE in der Kommandozeile ist dann: avrdude -c avrisp -p com3 -P atmega328p -B 10 -b 19200 -U lfuse:w:0xd2:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m Danach läuft dein 328er eben mit 8Mhz. Allerdings bezweifle ich, dass das ausreichend für WS2812 ist (abgesehen davon dass die Libraries -wie oben gesagt- von Arduino für 16MHz ausgelegt ist und ganz speziell bei WS2812 das Timing der LED's durch Zählen der Dauer von Prozessortakten in Assembler ist). Sei also eher gnädig - wenn du mit Arduino spielen willst - und spendiere deinem ATmega einen Quarz und 2 Lastkondensatoren (27pF wären hier gut).
Arduino F. schrieb: > Ohne konkrete Kommandozeile ist das eine Null Aussage.
1 | C:\Users\Dell 7200\Downloads>avrdude -c arduino -p m328p -P COM4 -b 19200 -v -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h |
2 | Avrdude version 8.0 |
3 | Copyright see https://github.com/avrdudes/avrdude/blob/main/AUTHORS |
4 | |
5 | System wide configuration file is C:\Users\Dell 7200\Downloads\avrdude.conf |
6 | |
7 | Using port : COM4 |
8 | Using programmer : arduino |
9 | Setting baud rate : 19200 |
10 | AVR part : ATmega328P |
11 | Programming modes : SPM, ISP, HVPP, debugWIRE |
12 | Programmer type : Arduino |
13 | Description : Arduino bootloader using STK500 v1 protocol |
14 | HW Version : 2 |
15 | FW Version : 1.18 |
16 | Topcard : Unknown |
17 | |
18 | AVR device initialized and ready to accept instructions |
19 | Device signature = 1E 95 0F (ATmega328P, ATA6614Q, LGT8F328P) |
20 | |
21 | Processing -U lfuse:r:-:h |
22 | Reading lfuse memory ... |
23 | Writing 1 byte to output file <stdout> |
24 | 0xe2
|
25 | |
26 | Processing -U hfuse:r:-:h |
27 | Reading hfuse memory ... |
28 | Writing 1 byte to output file <stdout> |
29 | 0xda
|
30 | |
31 | Processing -U efuse:r:-:h |
32 | Reading efuse memory ... |
33 | Writing 1 byte to output file <stdout> |
34 | 0xfd
|
35 | |
36 | Avrdude done. Thank you. |
Scheint zu funktionieren. Beim übertragen der .hex Datei dann:
1 | C:\Users\Dell 7200\Downloads>avrdude -c avrisp -p m328p -P COM4 -b 19200 -U flash:w:simple.ino.hex:i |
2 | Reading 2426 bytes for flash from input file simple.ino.hex |
3 | Writing 2426 bytes to flash |
4 | Writing | ################################################## | 100% 2.36 s |
5 | Reading | ################################################## | 100% 1.64 s |
6 | Warning: flash verification mismatch |
7 | device 0x00 != input 0x0c at addr 0x0000 (error) |
8 | Error: flash verification mismatch |
9 | |
10 | Avrdude done. Thank you. |
Manchmal funktoniert es aber auch, siehe:
1 | C:\Users\Dell 7200\Downloads>avrdude -c avrisp -p m328p -P COM4 -b 19200 -U flash:w:simple.ino.hex:i |
2 | Reading 2426 bytes for flash from input file simple.ino.hex |
3 | Writing 2426 bytes to flash |
4 | Writing | ################################################## | 100% 2.35 s |
5 | Reading | ################################################## | 100% 1.65 s |
6 | 2426 bytes of flash verified |
7 | |
8 | Avrdude done. Thank you. |
Die WS2812 leuchten mitlerweile auch, allerdings nicht wirklich nach dem Programm...ich habe eher das Gefühl, dass der PD0 noch auf Kommunikation konfiguriert ist und nicht als DO.
Mike L. schrieb: > Processing -U lfuse:r:-:h > Reading lfuse memory ... > Writing 1 byte to output file <stdout> > 0xe2 > Processing -U hfuse:r:-:h > Reading hfuse memory ... > Writing 1 byte to output file <stdout> > 0xda > Processing -U efuse:r:-:h > Reading efuse memory ... > Writing 1 byte to output file <stdout> > 0xfd Diese Einstellung ist schon mal für 8MHz interner Takt. Wenn das Flashen nicht immer funktioniert liegt das entweder an deiner Kabelverbindung oder aber der ISP-Takt ist zu schnell. Den kannst du heruntersetzen indem du ein -B 5 in der Parameterliste von AVRDUDE hinzufügst. Mike L. schrieb: > Die WS2812 leuchten mitlerweile auch, allerdings nicht wirklich nach dem > Programm...ich habe eher das Gefühl, dass der PD0 noch auf Kommunikation > konfiguriert ist und nicht als DO. Dein Mikrocontroller fühlt mit dir ... (und macht trotzdem nicht das, was du willst!) Wie gesagt, die Arduino-Lib ist für 16MHz ausgelegt und dann funktioniert das ganze nicht so wirklich !
Außerdem seh ich gerade: Mike L. schrieb: > C:\Users\Dell 7200\Downloads>avrdude -c arduino -p m328p -P COM4 -b > 19200 -v -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h > Avrdude version 8.0 > Copyright see https://github.com/avrdudes/avrdude/blob/main/AUTHORS > System wide configuration file is C:\Users\Dell > 7200\Downloads\avrdude.conf > Using port : COM4 > Using programmer : arduino > Setting baud rate : 19200 > AVR part : ATmega328P > Programming modes : SPM, ISP, HVPP, debugWIRE > Programmer type : Arduino > Description : Arduino bootloader using STK500 v1 protocol > HW Version : 2 > FW Version : 1.18 > Topcard : Unknown Du verwendest jetzt als Programmer wieder einen Bootloader????? Hast du deinem Mega328 einen 19200 Bd Bootloader geflasht und programmierst den Chip jetzt nicht mehr über avrisp (Firmware des UNO's als "Chefe") sondern direkt über eine serielle Schnittstelle ?
Ralph S. schrieb: > Du verwendest jetzt als Programmer wieder einen Bootloader????? Hast du > deinem Mega328 einen 19200 Bd Bootloader geflasht und programmierst den > Chip jetzt nicht mehr über avrisp (Firmware des UNO's als "Chefe") > sondern direkt über eine serielle Schnittstelle ? Ne nicht gewollt, ich übernehme das aus versehen manchmal. Dennoch bleibt mein Hauptproblem, dass ich nicht verstehe, warum die Übertragung über ISP eine Zeit lang funktioniert und dann wieder nicht - ich glaube ich warte echt bis morgen der ISP Programmer ankommt. Einen Bottloader brauche ich nicht, da das Programm eh nur ein mal drauf kommt und da nixmehr verändert werden soll. Aktuell ist wieder nixmehr...
1 | C:\Users\Dell 7200\Downloads>avrdude -c avrisp -p m328p -P COM4 -b 19200 -v |
2 | Avrdude version 8.0 |
3 | Copyright see https://github.com/avrdudes/avrdude/blob/main/AUTHORS |
4 | |
5 | System wide configuration file is C:\Users\Dell 7200\Downloads\avrdude.conf |
6 | |
7 | Using port : COM4 |
8 | Using programmer : avrisp |
9 | Setting baud rate : 19200 |
10 | AVR part : ATmega328P |
11 | Programming modes : SPM, ISP, HVPP, debugWIRE |
12 | Programmer type : STK500 |
13 | Description : Serial Atmel AVR ISP using STK500 |
14 | HW Version : 2 |
15 | FW Version : 1.18 |
16 | Topcard : Unknown |
17 | SCK period : 0.0 us |
18 | XTAL frequency : 7.372800 MHz |
19 | |
20 | AVR device initialized and ready to accept instructions |
21 | Device signature = 00 00 00 (retrying) |
22 | Device signature = 00 00 00 (retrying) |
23 | Device signature = 00 00 00 |
24 | Error: invalid device signature |
25 | Error: expected signature for ATmega328P is 1E 95 0F |
26 | - double check connections and try again, or use -F to carry on regardless |
27 | |
28 | Avrdude done. Thank you. |
Das kam jetzt nachdem ich die Fuses wie von dir beschrieben ändern wollte - sobald ich dran gehe, übernimmt der das ein Mal und dann ist nixmehr....vielleicht habe ich ja auch aus Versehen die Fuses vom UNO geändert...
:
Bearbeitet durch User
Arduino F. schrieb: > Das ist bei allen (mir bekannten) Arduino IDEs der Fall. Das weiß ich wohl. Ich nutze Arduino allerdings, wenn ich sonst keinen Weg sehe oder wenn ich glaube, ein einfacher Test von <platzhalter> geht dmit schnell. Ich bin da kein Fan von um es mal freundlich auszudrücken.
Was ist mit der Spannung? Auf die Frage bist du nicht eingegangen. Laut Schaltplan läuft dein Board mit 3,3V aber der Arduino0 Uno hat 5V Pegel.
Sherlock 🕵🏽♂️ schrieb: > Was ist mit der Spannung? Auf die Frage bist du nicht eingegangen. > > Laut Schaltplan läuft dein Board mit 3,3V aber der Arduino0 Uno hat 5V > Pegel. Ja, das stimmt - nicht optimal, da gab es verschiedene Meinungen zu...bei manchen hat es funktioniert (die Eingänge können das wohl ab), bei anderen nicht. Den Programmer der die Tage kommt, kann 3,3V und 5V, dann sollte das Thema erledigt sein. Ich kann ja aktuell garnix einschätzen, da zu viele Baustellen.
:
Bearbeitet durch User
Wenn du deinem 3,3V Mikrocontroller gewaltsam 5V rein drückst, wird seine Stromversorgung instabil. Mich wundert nicht, dass einer schon nicht mehr ansprechbar ist. Was man auch bedenken sollte: Die ESD Schutzdioden (die in dem Fall wirksam werden) sollen laut einer Application Note von Atmel nur mit weniger als 1 mA belastet werden. Dein Arduino Uno liefert aber mehr als das 20 Fache! Spannungsteiler könnten helfen.
:
Bearbeitet durch User
Sherlock 🕵🏽♂️ schrieb: > Spannungsteiler könnten helfen. Kurioserweise gibt der UNO laut Oszi und Multimeter auf den Pins 11 und 12 (MISO, MOSI) nur ca. 2,7V im Maximum aus. Beim Multimeter hätte ich jedacht naja, nicht schnell genug... Spannungsteiler mit ca. 3MOhm und 6MOhm brachte auch nix - da bin ich mir aber unsicher, ob die nicht zu groß waren. Wie dem auch sei, andere Ardunios kann ich mit dem UNO als ISP und dem Tipp von Arduino F ansprechen. Bei meinen beiden erhalte ich nur:
1 | C:\Users\Dell 7200\Downloads>avrdude -c arduino_as_isp -P COM3 -b 19200 -p m328p -v |
2 | Avrdude version 8.0 |
3 | Copyright see https://github.com/avrdudes/avrdude/blob/main/AUTHORS |
4 | |
5 | System wide configuration file is C:\Users\Dell 7200\Downloads\avrdude.conf |
6 | |
7 | Using port : COM3 |
8 | Using programmer : arduino_as_isp |
9 | Programmer baud rate : 19200 |
10 | AVR part : ATmega328P |
11 | Programming modes : SPM, ISP, HVPP, debugWIRE |
12 | Programmer type : STK500 |
13 | Description : AVR as programmer with Arduino-as-ISP FW |
14 | HW Version : 2 |
15 | FW Version : 1.18 |
16 | Topcard : Unknown |
17 | SCK period : 0.0 us |
18 | XTAL frequency : 7.372800 MHz |
19 | |
20 | AVR device initialized and ready to accept instructions |
21 | Device signature = 00 00 00 (retrying) |
22 | Device signature = 00 00 00 (retrying) |
23 | Device signature = 00 00 00 |
24 | Error: invalid device signature |
25 | Error: expected signature for ATmega328P is 1E 95 0F |
26 | - double check connections and try again, or use -F to carry on regardless |
27 | |
28 | Avrdude done. Thank you. |
Das anlegen von einem 8MHz Signal am TOSC2 bringt keinen Unterschied (falls ich aus Versehen Fuses verstellt habe). Mal sehen ob es mit dem richtigen ISP mit 3,3V anders aussieht, aber ich glaube ich bestelle mir schonmal ein paar neue...
:
Bearbeitet durch User
Mike L. schrieb: > Spannungsteiler mit ca. 3MOhm und 6MOhm brachte auch nix - da bin ich > mir aber unsicher, ob die nicht zu groß waren. Auf jeden Fall sind die zu groß. Rechne mal durch mit einigen 10 pF kapazitiver Last, was du da für Signalverzögerungen bekommst. Nimm 3 und 6 kΩ.
der 328P läuft sowohl mit 3,3 als auch 5V - aber 16 MHz eben nur mit 5 V
Mike L. schrieb: > Kurioserweise gibt der UNO laut Oszi und Multimeter auf den Pins 11 und > 12 (MISO, MOSI) nur ca. 2,7V im Maximum aus. Das ist in der Tat kurios, deutet auf eine fehlerhafte Stromversorgung hin. Damit sind alle mögliche Fehlfunktionen denkbar. Alleine der USB-UART Chip braucht schon ungefähr 5V. Der AVR kommt mit weniger aus, aber stabil sollte die Spannung schon sein. Das ist sie vermutlich nicht, denn du hast schließlich kein 2,7V Netzteil verwendet (oder?). Instabile Stromversorgung kann durchaus auch dazu führen, dass Fuses falsch gesetzt werden. Vermutung: Dein Arduino Board ist kaputt, es hat gar keine eigene Spannungsversorgung mehr. Stattdessen wird es parasitär über die USB Signale oder die ISP Signale deines Targets versorgt. Beide haben 3,3V Pegel. Diese fließen durch die ESD Schutzdioden (vom USB-Chip oder AVR auf dem Uno Board) nach VDD. An den Dioden fallen 0,6V ab, bleiben noch 2,7V übrig. So sind die ESD Schutzdioden im AVR geschaltet:
1 | +--|>|------- VDD (soll 5V, ist 2,7V) |
2 | | |
3 | 3,3V Signal -----+------------ Port vom µC |
4 | | |
5 | +--|<|------- GND |
> Spannungsteiler mit ca. 3MOhm und 6MOhm brachte auch nix
Das muss viel niederohmiger sein. Zum Beispiel 220 und 470 Ohm an den
drei Signalen vom Uno zum Target. MISO (vom Target zum Uno) darf keinen
Spannungsteiler haben, war schon klar, oder?
1 | 220Ω |
2 | 5V ---[===]---+---------- 3,4V |
3 | | |
4 | |~| |
5 | |_| 470Ω |
6 | | |
7 | GND |
Zeige mal Fotos vom Aufbau. Messe die Versorgungsspannung (5V) des Arduino Boardes ohne Target. Schließe das Target an und messe die Versorgungsspannung erneut, dieses mal vom Uno und vom Target. Wenn du ein Oszilloskop hast, messe beide Versorgungsspannungen vor und während des Programmiervorgangs, und zeige uns die Bilder.
:
Bearbeitet durch User
Mike L. schrieb: > andere Ardunios kann ich mit dem UNO als ISP und dem > Tipp von Arduino F ansprechen. Möglicherweise ist ja der "betrachtete Arduino" defekt? Lötstellen etc. Den würde ich aussortieren und für kleines Geld 1 oder mehrere andere kaufen. Ah Sherlock war schneller ...
:
Bearbeitet durch User
Neue ATMEGA328P eingelötet und es läuft. Was es war kann ich nicht sagen -ab Werk defekt?, 3,3V/5V Problematik (obwohl es aktuell so auch funktioniert), im Reflow zu heiß geworden?... Die WS2812 lassen sich für meinen Fall mit 8MHz gut ansteuern - für Videobilder o.ä. kanns wohl aber zu langsam sein - in der neuen Platine plane ich zumindest einen Quarz ein und dann kann man nachträglich immernoch hochrüsten falls nötig. Hab zwar noch ein Problem mit dem I2C aber dafür gibts einen neuen Thread. Frohes Fest euch.
ich wuerde mal gerne ein Foto der Platine sehen...
Ralph S. schrieb: > ich wuerde mal gerne ein Foto der Platine sehen... Die sind doch geheim! Vermutlich befürchtet er danach eine Flut von Feedback.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.