Forum: Mikrocontroller und Digitale Elektronik m328p nicht mit Arduino IDE beschreibbar, avrdude ok


von Jörn G. (jrn_g)


Lesenswert?

Hallo,

ich kann mit USBasp meinen m328p barebone (8Mhz Xtal extern) flashen, 
aber aus Arduino IDE kann ich weder über USBasp (Hochladen mit 
Programmer), noch mit AVRisp mkII den Chip funktionierend beschreiben. 
Beim Hochladen mit Programmer bekomme ich die Nachricht "Hochladen 
abgeschlossen", der Sketch läuft aber nicht. Mit AVRisp mkII gibt es die 
Fehlermeldung "avrdude: stk500_recv(): programmer is not responding". 
Die Fuses sind nach avrdude bei E:FD, H:DE, L:FF gesetzt.

Hat jemand eine Idee, woran das liegen könnte, oder welche Angaben ich 
sonst noch liefern sollte, um das Problem zu lösen?

Vielen Dank und Gruß, Jörn

von pegel (Gast)


Lesenswert?

Kann es sein, dass die Arduino IDE die Verbindung zum Bootloader sucht 
und der nicht auf dem m328p installiert ist?

von Stefan F. (Gast)


Lesenswert?

> Die Fuses sind nach avrdude bei E:FD, H:DE, L:FF gesetzt.

Hast du wirklich den Optiboot Bootloader drauf?

Der alte Bootloader war größer, braucht andere Fuses.

Wenn du über ISP programmierst, dann wird der Bootloader üblicherweise 
gelöscht, braucht wiederum andere Fuses

Dieses Tool hilft dabei: https://www.engbedded.com/fusecalc/

von Jörn G. (jrn_g)


Lesenswert?

Ich möchte nicht ausschließen, das es Probleme mit dem Bootloader gibt. 
In Arduino IDE kann ich mit USBasp den Bootloader brennen und bekomme 
die Meldung "Hochladen abgeschlossen". Jedoch bin ich mir nicht sicher 
ob ich den richtigen Bootloader nehme, die Boardwahl steht auf "Arduino 
Uno".

von Stefan F. (Gast)


Lesenswert?

In der (halbwegs) aktuellen Arduino IDE wird für den Arduino Uno der 
neue kleine Optiboot Loader verwendet. Für Arduino Nano wird aber soweit 
ich weiß noch der größere alte Bootloader verwendet.

Da du den Bootloader mit der IDE hochladen konntest (so habe ich dich 
verstanden), ist dein Kommunikationsproblem inzwischen gelöst. Es ist 
auch davon auszugehen, dass auch die Fuses stimmen, denn darum kümmert 
sich die IDE.

Dein Sketch läuft aber immer noch nicht, also ist der vermutlich 
fehlerhaft. Zeige ihn mal.

Du solltest auch die detaillierten Ausgaben in den Einstellungen 
aktivieren und und mal die Fehlermeldungen zeigen. Denn wie du gerade 
merkst, kommen deine Informationen widersprüchlich an.

von Jörn G. (jrn_g)


Lesenswert?

Ich teste mit dem Beispiel "Blink" aus Arduino IDE. Wenn ich mit dem 
USBasp flashe nehme ich als Test:

#include <avr/io.h> // This contains the definitions of the terms used
#include <util/delay.h> // This contains the definition of delay 
function

void main()
{
DDRD = 0b00000110; // Port D2 (Pin 4 in the ATmega) made output
PORTD = 0b00000000; // Turn LED off

while(1)
{
PORTD = 0b00000100; //Turn LED on
_delay_ms(200); // delay of 200 millisecond
PORTD = 0b00000010; //Turn LED off
_delay_ms(200); // delay of 200 millisecond
}
}

von Jörn G. (jrn_g)


Lesenswert?

Stefan ⛄ F. schrieb:
> Du solltest auch die detaillierten Ausgaben in den Einstellungen
> aktivieren und und mal die Fehlermeldungen zeigen. Denn wie du gerade
> merkst, kommen deine Informationen widersprüchlich an.

Wie mache ich das? Ich suche, kann aber etwas dauern ;-)

von Stefan F. (Gast)


Lesenswert?

Jörn G. schrieb:
> Wie mache ich das?

Im ersten Menü unter "Einstellungen". Und danach kopierst du die Ausgabe 
über die Zwischenablage ins Diskussionsforum.

Strg-C (copy)
Strg-V (paste)

von Jörn G. (jrn_g)


Lesenswert?

Das was ich an Fehlermeldungen mit dem AVRisp mkII bekomme ist:

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is 
"/home/joern/.arduino/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/home/joern/.avrduderc"
         User configuration file does not exist or is not a regular 
file, skipping

         Using Port                    : /dev/ttyUSB0
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

von Stefan F. (Gast)


Lesenswert?

Jörn G. schrieb:
>          Using Port                    : /dev/ttyUSB0
> avrdude: stk500_recv(): programmer is not responding
> avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

Immerhin wissen wir jetzt, dass es um Linux geht. Das hättest du gleich 
im Eröffnungsbeitrag schrieben sollen.

Da kommt mir etwas komisch vor. ttyUSB0 ist ein virtueller serieller 
Port. Ist das der richtige Port? Das kannst du herausfinden, indem du 
unmittelbar nach dem Anstecken dies eingibst:

sudo dmesg -c

Aber der originale Atmel ISP mkII (meinst du den?) wird gar nicht über 
einen virtuellen seriellen port angesprochen, sondern über libusb. 
Deswegen kannst du bei dem in der IDE auch gar keinen seriellen port 
auswählen. Wo kommt dann das "/dev/ttyUSB0" aus deiner Fehlermeldung 
her? Irgendwer muss es avrdude so mitgeteilt haben.

Mal angenommen, du hast einen anderen Programmieradapter der tatsächlich 
über einen virtuellen seriellen Port läuft, dann hast du vielleicht kein 
Recht, die Schnittstelle zu benutzen.

Schau im /dev Verzeichnis nach, welche Gruppe das Device /dev/ttyUSB0 
benutzen darf. Und dann schaust du in /etc/group nach, ob du Mitglied 
dieser Gruppe bist.

Vermutlich ist es die Gruppe "dialout". Du kannst die durch Editieren 
der Datei hinzufügen oder indem du eingibst:

sudo usermod -a -G dialout <deinUsername>

Danach musst du dich abmelden und neu anmelden.

von Stefan F. (Gast)


Lesenswert?

Ich habs: DU hast den falschen Programmieradapter eingestellt!

> Using Programmer              : arduino

Bei der richtigen Einstellung wäre die Ausgabe gewesen:

> Using Port                    : usb
> Using Programmer              : stk500v2

von Jörn G. (jrn_g)


Lesenswert?

Bezüglich der Rechte habe ich kontrolliert und alles ist richtig. 
Außerdem kann ich einen ProMini über Arduino IDE ohne Probleme 
programmieren. Bei der Ausgabe steht da ebenfalls "arduino" als 
Programmer (was aber tatsächlich nicht richtig ist).
Atmel ISP mkII (meinst du den?) - nein es sind CP2102 basierte 
Chinaprogrammer die ich nutze. Die Einstellung in Arduino IDE ist AVRisp 
mkII, was sonst auch gut funktioniert, wie mit der Programmierung des 
ProMinis gezeigt.
Der Port ist richtig: [55834.638425] usb 1-8: cp210x converter now 
attached to ttyUSB0.

von Einer K. (Gast)


Lesenswert?

Oha...

Ich merke wieder.... geballtes Unwissen....

Jörn G. schrieb:
> (8Mhz Xtal extern)
Dann ist "UNO" ganz sicher das falsche Board.
Denn der UNO hat 16MHz

Den ProMini, den gibts mit 8MHz.
Damit könnte man die ersten Experimente fahren.
Also den ProMini Bootloader per USBASP drauf, und dann deinen CP21xx 
nutzen.

Besser wäre allerdings eine andere, angepasste Boarddefinition.



Stefan ⛄ F. schrieb:
> In der (halbwegs) aktuellen Arduino IDE wird für den Arduino Uno der
> neue kleine Optiboot Loader verwendet. Für Arduino Nano wird aber soweit
> ich weiß noch der größere alte Bootloader verwendet.
Immer schon, da hat sich nie nicht was geändert.

Jörn G. schrieb:
> Die Einstellung in Arduino IDE ist AVRisp
> mkII, was sonst auch gut funktioniert, wie mit der Programmierung des
> ProMinis gezeigt.
Der Programmer ist nur interessant, wenn du den Bootloader brennst, oder 
Hochladen mit Programmer drückst.
Sonst wird dieser ignoriert, und die Serielle genutzt.

von Jörn G. (jrn_g)


Lesenswert?

Ich habe einen 16Mhz Quarz eingesetzt, den Bootloader ProMini 
erfolgreich hochgeladen und den Sketch überspielt (ProMini 16Mhz, 5V als 
Board ausgewählt). Es funktioniert.
Vielen Dank einem Gebietsfremden, naturgemäß fachlich 'geballtes 
Unwissen' in sich Tragenden, zu helfen!

von Stefan F. (Gast)


Lesenswert?

Jörn G. schrieb:
> Außerdem kann ich einen ProMini über Arduino IDE ohne Probleme
> programmieren. Bei der Ausgabe steht da ebenfalls "arduino" als
> Programmer.

"arduino" meint den Bootloader, der über den virtuellen seriellen Port 
angesprochen wird.

> Atmel ISP mkII (meinst du den?) - nein es sind CP2102 basierte
> Chinaprogrammer die ich nutze.

Was ist das genn genau? Ein simpler USB-UART Adapter, der an den 
seriellen Port des Arduino Moduls angeschlossen ist, auf dem ein 
Bootloader läuft?

Oder hast du einen ISP Programmieradapter, der zum PC hin einen CP210x 
Chip enthält? Dann muss da aber mindestens noch ein zweiter Chip drin 
sein.

> Der Port ist richtig: [55834.638425] usb 1-8: cp210x converter now
> attached to ttyUSB0.

Das bestätigt den Port, sagt aber noch nicht aus, ob du jetzt den 
Bootloader oder einen ISP Programmieradapter (und welchen) dahinter 
hast.

Mach mal einen Foto von den Teilen, dann wird das klar.

und beachte:

Arduino Fanboy D. schrieb:
> Der Programmer ist nur interessant, wenn du den Bootloader brennst, oder
> Hochladen mit Programmer drückst.

von Jörn G. (jrn_g)


Angehängte Dateien:

Lesenswert?

Wie geschrieben, ist das Problem, das der falschen Frequenz des Xtals 
geschuldet war, gelöst. Trotzdem ein Bild der beiden Programmer. Der 
USBASP mit dem ich, wie von Arduino Fanboy empfohlen, den ProMini 
Bootloader gebrannt und der CP21xx  mit dem ich anschließend den Sketch 
hochgeladen habe.

von Stefan F. (Gast)


Lesenswert?

Jörn G. schrieb:
> Trotzdem ein Bild der beiden Programmer. De

Das linke Produkt ist kein Programmieradapter sondern ein USB-UART 
Adapter!

Das rechte Produkt ist ein ISP Programmieradapter, und zwar ein USBASP 
Klon. Der wird über libusb ansprochen, er hat keinen virtuellen 
seriellen Port.

Du hast also gar keinen "AVRisp mkII".

von Jörn G. (jrn_g)


Lesenswert?

Vielen Dank der Aufklärung.

Der USBASP Klon wird über /dev/ttyS0 angesprochen.

Bei dem USB-UART hatte ich fälschlicherweise angenommen, dass ich beim 
Hochladen der Sektche "AVRisp mkII" auswählen müsste. Daher nahm ich an 
er fiele in diese Kategorie. Das ist aber, wie oben erklärt wurde, nicht 
der Fall.

von Stefan F. (Gast)


Lesenswert?

Jörn G. schrieb:
> Der USBASP Klon wird über /dev/ttyS0 angesprochen.

Das kann unmöglich sein! USBASP haben keinen seriellen Port. Auch keinen 
virtuellen.

und ttyS0 ust ein "echter" serieller Port auf dem Mainboard des PC, 
typischerweise mit 9pol Sub-D Stecker.

USBASP werden über libusb  angesprochen.

von Jörn G. (jrn_g)


Angehängte Dateien:

Lesenswert?

Danke der Information. Ich gehe davon aus, dass Du recht hast, aber 
warum zeigt dann Arduino IDE /dev/ttyS0 als Port an (siehe auch 
https://klamfx.wordpress.com/2017/05/18/geting-usbasp-v2-0-to-work-on-linux/)?

von Stefan F. (Gast)


Lesenswert?

Jörn G. schrieb:
> warum zeigt dann Arduino IDE /dev/ttyS0 als Port an

Weil du als Board den Arduino UNO eingestellt hast. Das Arduino Board 
wird über einen (virtuellen) seriellen Port angesteuert, weil es einen 
entsprechenden Bootloader enthält.

Die Arduino IDE unterscheidet nicht zwischen echten und virtuellen 
seriellen Ports. Sie bietet einfach alle zur Auswahl an.

Das ändert alles nichts daran, dass der Programmer USBASP über USB, 
nicht seriell angesprochen wird.

Hast du das verstanden?:

Arduino Fanboy D. schrieb:
> Der Programmer ist nur interessant, wenn du den Bootloader brennst, oder
> Hochladen mit Programmer drückst.


Normale Methode zum "hochladen:
1
                             Arduino Board
2
                       _____________________________
3
                      /                             \
4
PC ---> USB Kabel ---> USB-UART-Chip ---> Tx/Rx Atmega328

Aus Sicht des PC wird hierbei ein virtueller serieller Port verwendet. 
Auf dem ATmega328 muss sich ein Bootloader befinden, der das Programm 
seriell empfängt und in den Flash Speicher ablegt.

Alternative Methode "Hochladen mit Programmer":
1
                                    Arduino Board
2
                                  ____________________
3
                                 /                    \
4
PC ---> ISP Programmieradapter ---> ISP Atmega328

Aus Sicht des PC wird hierbei ein ISP Programmieradapter verwendet. Je 
nach Modell hat dieser zum PC hin eine echte serielle, eine virtuelle 
serielle oder eine reine USB Schnittstelle.

Der Programmieradapter ist mit der ISP Schnittstelle des 
Mikrocontrollers verbunden. Diese Variante funktioniert ohne Bootloader. 
Falls ein Bootloader auf dem ATmega installiert ist, geht er dabei 
verloren.

von Jörn G. (jrn_g)


Lesenswert?

Ich habe den Unterschied zwischen Programmieradapter und USB-UART 
Adapter, deren Einsatz und die Auswirkung auf den Bootlader verstanden. 
Im Prinzip alles ganz einfach, wenn man in die richtige Richtung gelenkt 
wird. Nun kann ich den ATmega328 mit beiden Adaptern ansprechen. Vielen 
Dank dafür.

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.