Forum: Mikrocontroller und Digitale Elektronik Fusebits lassen sich nicht setzen (neuer ATMEGA328P)


von Mike L. (loug)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von 900ss (900ss)


Lesenswert?

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

von Mike L. (loug)


Lesenswert?

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.
von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

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
von Mike L. (loug)


Lesenswert?

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.

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


Angehängte Dateien:

Lesenswert?

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
von Mike L. (loug)



Lesenswert?

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.

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


Lesenswert?

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
von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

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.

von Georg M. (g_m)


Angehängte Dateien:

Lesenswert?

ATmega328P Fusebits

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


Lesenswert?

Georg M. schrieb:
> ATmega328P Fusebits

Was möchtest du uns damit sagen?

von Georg M. (g_m)


Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:
> Was möchtest du uns damit sagen?
Ist einfach.

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


Lesenswert?

Georg M. schrieb:
> Ist einfach.

Was ist einfach? Hast du das Thema der Diskussion verstanden?

von 900ss (900ss)


Lesenswert?

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
von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Der ISP Sketch ist von alleine langsam genug. Steht in Quelltext.

von Heinz R. (heijz)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Ralph S. (jjflash)


Lesenswert?

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)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Ralph S. (jjflash)


Lesenswert?

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!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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 …

von Ralph S. (jjflash)


Lesenswert?

Jörg W. schrieb:
> Tja, wenn es nichts zu erzählen gibt, kann man¹ ja auch einfach mal die
> Klappe halten. :-)

:-) :-) :-)

von Mike L. (loug)


Lesenswert?

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
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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 …

von Mike L. (loug)


Lesenswert?

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.

von Heinz R. (heijz)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von 900ss (900ss)


Lesenswert?

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.

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


Lesenswert?

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
von Arduino F. (Firma: Gast) (arduinof)


Angehängte Dateien:

Lesenswert?

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
von Mike L. (loug)


Lesenswert?

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
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

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.
von Ralph S. (jjflash)


Lesenswert?

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

von Mike L. (loug)


Lesenswert?

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.

von Ralph S. (jjflash)


Lesenswert?

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 !

von Ralph S. (jjflash)


Lesenswert?

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 ?

von Mike L. (loug)


Lesenswert?

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
von 900ss (900ss)


Lesenswert?

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.

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


Lesenswert?

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.

von Mike L. (loug)


Lesenswert?

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
von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

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
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Mike L. schrieb:
> -c avrisp

Avrisp ist nicht ArduinoAsIsp.
So: Kein Erfolg.

von Mike L. (loug)


Lesenswert?

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
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von Heinz R. (heijz)


Lesenswert?

der 328P läuft sowohl mit 3,3 als auch 5V - aber 16 MHz eben nur mit 5 V

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


Lesenswert?

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
von Hugo H. (hugo_hu)


Lesenswert?

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
von Mike L. (loug)


Lesenswert?

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.

von Ralph S. (jjflash)


Lesenswert?

ich wuerde  mal gerne ein Foto der Platine sehen...

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


Lesenswert?

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
Noch kein Account? Hier anmelden.