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
Kann es sein, dass die Arduino IDE die Verbindung zum Bootloader sucht und der nicht auf dem m328p installiert ist?
> 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/
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".
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.
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 } }
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 ;-)
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)
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
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.
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
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.
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.
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!
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.
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.
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".
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.
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.
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/)?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.