Forum: Mikrocontroller und Digitale Elektronik Arduino Uno lässt sich über anderen Arduino programmieren aber nicht über Avrstudio


von Darth G. (darth_g)


Lesenswert?

Hallo, habe folgendes Problem:

Ich habe zwei Arduino Uno R3, alte.
Habe mir 4 neue Atmega328ps geholt und auf den einen Uno als ISP dem 
anderen (mit frischem 328p) den Bootloader aufgespielt und dann Blink um 
zu sehen ob er funktioniert.

Funktioniert.

Wenn ich den Frischgeflashten dann am PC anschliesse finde ich ihm 
Ordnungsgemäss im Gerätemanager und Avrstudio erkennt ihn auch.

Will ich dann ein Programm aufspielen, gibts ein Out of Sync - 
Aufspiel-Abbruch.

Der als Programmer funktioniert ist ein China Klon, der andere ein 
Original.

Grüße

von Georg G. (df2au)


Lesenswert?

Melden sich beide am PC mit dem gleichen COM-Port an?
Ist bei dem Original der Reset via USB aktiviert?

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


Lesenswert?

Darth G. schrieb:
> und auf den einen Uno als ISP dem
> anderen (mit frischem 328p) den Bootloader aufgespielt und dann Blink um
> zu sehen ob er funktioniert.

Wenn du per ISP Blink drauf gespielt hast, ist der Bootloader wieder 
platt.

von Darth G. (darth_g)


Lesenswert?

Georg G. schrieb:
> Melden sich beide am PC mit dem gleichen COM-Port an?
Nein, ich trenne auch den einen, wenn ich den anderen anschliesse
> Ist bei dem Original der Reset via USB aktiviert?
Das weiss ich nicht

Arduino F. schrieb:

> Wenn du per ISP Blink drauf gespielt hast, ist der Bootloader wieder
> platt.

Ja Ok, das könnte mein denkfehler sein, ich dachte nämlich der 
Bootloader hätte seinen eigenen Speicherplatz und wäre notwendig um 
überhaupt ein Programm draufzuspielen. Er scheint aber überflüssig zu 
sein wenn ich einen Hardware Programmer bzw anderen Arduino benutze, 
oder wie?

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


Lesenswert?

Darth G. schrieb:
> Er scheint aber überflüssig zu
> sein wenn ich einen Hardware Programmer bzw anderen Arduino benutze,
> oder wie?

Richtig!
Dann solltest du allerdings die Bootloader Fuses zurücksetzen, sonst 
kann Ungemach drohen wenn du die oberen 512 Byte nutzen willst.
Du kannst allerdings auch per ISP beides zusammen Hochladen.
Arduino erstellt automatisch eine zusätzliche Blink_with_Bootloader.hex 
gleich mit.

: Bearbeitet durch User
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Darth G. schrieb:

> Ja Ok, das könnte mein denkfehler sein, ich dachte nämlich der
> Bootloader hätte seinen eigenen Speicherplatz

Ja, soweit hast du richtig gedacht.

> und wäre notwendig um
> überhaupt ein Programm draufzuspielen.

Nein, das ist falsch. Ein Bootloader bietet nur einen zusätzlichen Weg, 
um ein Programm zum Target zu transferieren. Du musst begreifen, dass 
auch der Bootloader selber schon ein Programm ist.

> Er scheint aber überflüssig zu
> sein wenn ich einen Hardware Programmer bzw anderen Arduino benutze,
> oder wie?

Ja. Der "Vorteil" des Arduino-Gedöhns, über einen Bootloader zu 
funktionieren, war schon immer eher fragwürdig und ist heutzutage 
praktisch irrelevant. Weil immer mehr Targets von Hause aus Bootloader 
bieten, die im Übrigen ohne die schrägen Kompromisse der Arduino-Lösung 
auskommen...

von Darth G. (darth_g)


Lesenswert?

Danke für die Infos!
 Ich habe zwischenzeitlich den Bootloader nochmal aufgespielt und dann 
wird er auch von der IDE erkannt.
Man sollte also auf den Bootloader verzichten und einfach über den 
Programmer flashen, dann werden keine Fuses gesetzt und es steht auch 
mehr Speicher zur Verfügung, Richtig?
Nun wenn ich die Fuses jetzt loswerden will muss ich mit einem High 
Voltage Programmer diese entfernen? (Habe ich hier 
https://forum.arduino.cc/t/how-can-i-reset-the-fuses/367520 gelesen)

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


Lesenswert?

Darth G. schrieb:
> Nun wenn ich die Fuses jetzt loswerden will muss ich mit einem High
> Voltage Programmer diese entfernen?

Du hast doch einen ISP Programmer!
Was gefällt dir an dem nicht?

von Darth G. (darth_g)


Lesenswert?

Ja ich habe gerade nochmal nachgelesen das man dass mit einer 12V 
Batterie machen kann, hatte ich überspult.
Das Thema Fuses hat mir aber gerade noch gefehlt.

von Darth G. (darth_g)


Lesenswert?

Ok, ich habe mal gelesen 
https://www.mikrocontroller.net/articles/AVR_Fuses

Ich wusste garnicht das es soetwas überhaupt gibt :)
Habe bis jetzt nur PIC Projekte nachgebaut die haben halt einen Quarz 
und der muss da halt hin. Ich habe mir zu den 4 328p auch gleich 4 
Quarze bestellt weil ich garnicht wusste das die interne Clocks haben 
und usw.

Aber was ich jetzt nicht verstehe ist warum die Fuses die beim brennen 
des Bootloaders gesetzt worden sind so schlecht sind. Gut, sie sollen 
nur ein Kompromiss sein um wohl eine gewisse Kompatiblität oder so zu 
gewährleisten aber ich verstehe gerade nicht welcher Gefahr dieser 328p 
jetzt ausgesetzt ist.

Was ich vorhabe ist erstmal Arduino UNOs nachzubauen (mit 16MHZ Quarz) 
um damit zu experimentieren.

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Darth G. schrieb:
> ist warum die Fuses die beim brennen
> des Bootloaders gesetzt worden sind so schlecht sind.

Die sind nicht schlecht!
Die sind für den Betrieb mit Bootloader genau so nötig.

Du willst ohne Bootloader, also müssen auch die betreffenden Fuses 
wieder auf Auslieferungszustand.

Darth G. schrieb:
> aber ich verstehe gerade nicht welcher Gefahr dieser 328p
> jetzt ausgesetzt ist.

Angenommen, die Fuses stehen auf Bootloader
Angenommen der Bootloader ist gelöscht.

Es passiert jetzt:
Der Bootloader Einsprungspunkt liegt im oberen Bereich.
Genau da wird der erste Befehl nach dem Reset ausgeführt.
Steht da überall 0xff, dann wenig Problem, denn das ist ein NOP.
Und die 256 NOPs sind fix durch.
Dann erst startet das Programm.

Aber wehe dir, du nutzt den Bereich für deine Anwendung....
Dann ist die Fehlfunktion quasi sicher.

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


Lesenswert?

Darth G. schrieb:
> Ja ich habe gerade nochmal nachgelesen das man dass mit einer 12V
> Batterie machen kann, hatte ich überspult.

Du brauchst keine HV Programmierung, wenn du den Chip noch per ISP 
erreichen kannst.

von Darth G. (darth_g)


Lesenswert?

Danke für die schlüssige Erklärung, da war es ja gut das ich den Fehler 
gemacht habe, irgendwann hätte ich wohl den 328p gefetzt.

Fuses in den Auslieferungszustand verstehe ich noch nicht wie ich das 
einfach so mache, beim googeln komme ich da auf zu überfordernde 
Threads.

von Stefan F. (Gast)


Lesenswert?

Schau dir den "Engbedded Fuse Calclulator" an, der zeigt dir unter 
anderem auch die Standard Vorgaben.

Eventuell hilft dir auch mein Artikel zum Thema: 
http://stefanfrings.de/avr_verfused/

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


Lesenswert?

Darth G. schrieb:
> Fuses in den Auslieferungszustand verstehe ich noch nicht wie ich das
> einfach so mache, beim googeln komme ich da auf zu überfordernde
> Threads.
Du könntest das lernen!
Es ist alles gut dokumentiert.
Es sind nur deine eigenen freiwilligen Begrenzungen, welche dich 
hindern.

Oder es dir einfach machen: (mit der Arduino IDE)
https://github.com/MCUdude/MightyCore

Da kannst du relativ sicher den richtigen Bootloader wählen und mitsamt 
seiner Fuses brennen.
Auch bei Auswahl von "no Bootloader" muss dann einmal "Bootloader 
brennen" angestoßen werden, damit die Fuses gesetzt werden.

: Bearbeitet durch User
von Darth G. (darth_g)


Lesenswert?

Arduino F. schrieb:
> Darth G. schrieb:
>> Fuses in den Auslieferungszustand verstehe ich noch nicht wie ich das
>> einfach so mache, beim googeln komme ich da auf zu überfordernde
>> Threads.
> Du könntest das lernen!

Das will ich ja auch aber ich lande beim googeln immer in den Hi Volt 
Threads

> Es ist alles gut dokumentiert.

Ich suche halt einfach nach einem Skript das die default Werte vom 328p 
wieder einbrennt aber da finde ich irgendwie nichts - aus Gründen...

> Es sind nur deine eigenen freiwilligen Begrenzungen, welche dich
> hindern.
>
> Oder es dir einfach machen: (mit der Arduino IDE)
> https://github.com/MCUdude/MightyCore
>
> Da kannst du relativ sicher den richtigen Bootloader wählen und mitsamt
> seiner Fuses brennen.

Da ist der 328p aber nicht aufgelistet

> Auch bei Auswahl von "no Bootloader" muss dann einmal "Bootloader
> brennen" angestoßen werden, damit die Fuses gesetzt werden.

Stefan F. schrieb:
> Schau dir den "Engbedded Fuse Calclulator" an, der zeigt dir unter
> anderem auch die Standard Vorgaben.
>
> Eventuell hilft dir auch mein Artikel zum Thema:
> http://stefanfrings.de/avr_verfused/

Ja, habe es aber auch tatsächlich geschafft auf die Seite 290 von dem 
328p Maual zu scrollen :) Trotzdem, nützliche Informationen, werde ich 
öfters nochmal reinschauen.

von Darth G. (darth_g)


Lesenswert?

>
> Da ist der 328p aber nicht aufgelistet
>
Achso, sehe gerade Atmega32, also der 328p gehört wohl zur Familie...

von Stefan F. (Gast)


Lesenswert?

Darth G. schrieb:
> Achso, sehe gerade Atmega32, also der 328p gehört wohl zur Familie...

Nein!

Der ATmega328 ist in der Arduino IDE als Arduino UNO oder Arduino Nano 
bekannt.

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


Lesenswert?

Darth G. schrieb:
> der 328p gehört wohl zur Familie...

Nein!
Zumindest: passt nicht.

Vom gleichen Autor: (mit ATMEGA328P)
https://github.com/MCUdude/MiniCore/tree/master

-- tja---

Darth G. schrieb:
> Das will ich ja auch aber ich lande beim googeln immer in den Hi Volt
> Threads
Mein Rat:
Erst die Dokus lesen, dann können dich die Tutorials/Foren nicht mehr so 
derbe verwirren.

: Bearbeitet durch User
von Manfred P. (pruckelfred)


Lesenswert?

Darth G. schrieb:
> Ich suche halt einfach nach einem Skript das die default Werte vom 328p
> wieder einbrennt aber da finde ich irgendwie nichts - aus Gründen...

Du willst keine default-Werte, sondern die für Dich passenden 
Einstellungen.

Die A*-IDE setzt diese beim 'Brennen' des Bootloaders, man könnte also 
auch die Boards-Text passend umbauen.

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


Lesenswert?

Manfred P. schrieb:
> man könnte also
> auch die Boards-Text passend umbauen.

Das halte ich für eine weniger gute Idee!
Ich rate dazu, die originalen Dateien auch original so zu belassen.


Aber was man gut tun kann, ist eine boards.local.txt neben die originale 
boards.txt zu legen.
Denn das ist das von Arduino vorgesehene Verfahren, um eigene 
Erweiterungen unter zu bringen, z.B. einen neuen/weiteren Menü Eintrag 
für den UNO


Merke:
Einträge in boards.local.txt überschreiben/überlagern Einträge in 
boards.txt
Gleiches gilt für die platform.txt bzw. platform.local.txt
Änderungen in den Originalen werden erst beim nächsten IDE Start 
übernommen.
Änderungen in den *.local.txt Dateien, bei jedem Kompiler Lauf.

: Bearbeitet durch User
von Darth G. (darth_g)


Lesenswert?

Ich soll meine Fuses zurücksetzen weil der Bootloader diese gefährlich 
setzt
Ich soll dann aber wieder einen Bootloader flashen

Die Vorgehensweise die ich mir vorstellen kann ist das ich mit avrdude 
einfach den Chip komplett lösche und dann den Bootloader und das 
Programm brenne.

Dann sind aber die Fuses wieder mit dem Bootloader gesetzt.
Soll ich den Bootloader also mit den default Werten des Raw Chips 
ausstatten?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Darth G. schrieb:
> Soll ich den Bootloader also mit den default Werten des Raw Chips
> ausstatten?

Dies Fuses müssen zur Taktquelle passen und widerspiegeln, ob ein 
Bootloader installiert ist, oder nicht. Die Defaultwerte nutzen den 
internen 8 MHz Oszillator geteilt durch 8 und ohne Bootloader. Für 
serielle Kommunikation taugt dieser Oszillator nicht.

von Darth G. (darth_g)


Lesenswert?

Ja gut, darum geht es ja. Ich weiss ja garnicht welche Fuses und warum 
ich die setzen soll.
Also setz ich den zumindest einmal auf die 16MHZ ext. Crystal.
Den Rest halt Werkzeinstellung?

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


Lesenswert?

Darth G. schrieb:
> Ich soll dann aber wieder einen Bootloader flashen
Aus dem Kontext gerissen!


Du liest offensichtlich weder meine Texte, noch die Anleitungen welche 
ich verlinke. (oder verstehst sie nicht)

von Manfred P. (pruckelfred)


Lesenswert?

Arduino F. schrieb:
>> man könnte also
>> auch die Boards-Text passend umbauen.
> Das halte ich für eine weniger gute Idee!
> Ich rate dazu, die originalen Dateien auch original so zu belassen.

Wenn ich sowas befingere, lege ich zuvor eine Sicherungskopie an, die 
dann z.B. Boards.txt_20230930 heißen würde.

> Aber was man gut tun kann, ist eine boards.local.txt neben die originale
> boards.txt zu legen.

Danke für Deinen Hinweis auf .local, diese Variante hatte ich übersehen.

Darth G. schrieb:
> Ich weiss ja garnicht welche Fuses und warum ich die setzen soll.

Hattest Du nicht weiter vorne etwas von Fuse-Calculator geschrieben?
Ansonsten musst Du leider das Datenblatt durchkauen, was recht zäh 
werden kann.

Arduino F. schrieb:
> Du liest offensichtlich weder meine Texte, noch die Anleitungen welche
> ich verlinke. (oder verstehst sie nicht)

Scheint am Verstehen zu klemmen, aber mir fehlen Ideen, wie man da 
helfen kann.

von Darth G. (darth_g)


Lesenswert?

Arduino F. schrieb:
> Darth G. schrieb:
>> Ich soll dann aber wieder einen Bootloader flashen
> Aus dem Kontext gerissen!
>
>
> Du liest offensichtlich weder meine Texte, noch die Anleitungen welche
> ich verlinke. (oder verstehst sie nicht)

Nicht böse werden Bitte, ich schätze es das du mir Hinweise gibst, aber 
Konkret blicke ich da nicht durch und muss dann immer erst die Fragen in 
meinem Kopf abarbeiten und überlese dann auch mal was weil ich eine im 
Kopf prioritierte Frage habe die nach Antwort sucht.
Wie man die setzt, zB mit dem MightyCore oder avrdude
ist inzwischen Klarer aber die Kritieren welche ich setzen muss und 
warum, sind immer noch Trübe.

Zb. -und das habe ich gefragt- welche der Fuses die der 
Ottonormalbootloader den ich über AVRstudio benutze setzt, sind denn 
kritisch?
Die Orientierungsantwort liegt bei default Werten (wobei der 16MHZ 
gesetzt werden muss bzw kann, läuft er auf intern kann der Quarz wohl 
drauf sein, schwingt aber nur zum Spass, vermute ich ganz stark)

Hausaufgaben habe ich gemacht indem ich erstmal die avrdude Befehle 
durchgegangen bin und mir die default Werte der Fuses gedumpt habe und 
ich jetzt auch weiss wie ich die setze.
(Stefan F. schrieb:
> Schau dir den "Engbedded Fuse Calclulator" an, der zeigt dir unter
> anderem auch die Standard Vorgaben.
Mit diesen habe ich die Hexwerte dann übersetzt.)

Und das hier habe ich zu schnell gelesen und war verwirrt das der 328p 
nicht dabei war und habe nur gelesen der Bootloader muss gesetzt werden 
auch wenn du kein Bootloader verwendest, es geht aber um das setzen der 
Fuses durch den Bootloader - ohne Bootloader (CPU overload protection 
enabled, entering sleep mode)

"Auch bei Auswahl von "no Bootloader" muss dann einmal "Bootloader
brennen" angestoßen werden, damit die Fuses gesetzt werden."

Danke für den Support, ich schätze das.

von Stefan F. (Gast)


Lesenswert?

Die defaults sind auf jeden Fall ein guter Ausgangspunkt. Dann änderst 
du ggf. die Taktquelle und den DIV8 Teiler. Und wenn du einen Bootloader 
verwendest, stellst du dessen größe ein. Das war's.

Fuses die dir nichts sagen lässt du besser unverändert.

von Darth G. (darth_g)


Lesenswert?

Stefan F. schrieb:
> Die defaults sind auf jeden Fall ein guter Ausgangspunkt. Dann änderst
> du ggf. die Taktquelle und den DIV8 Teiler. Und wenn du einen Bootloader
> verwendest, stellst du dessen größe ein. Das war's.
>
> Fuses die dir nichts sagen lässt du besser unverändert.

Dann wäre da wieder die Frage: Brauch ich den DIV8 Teiler? Kann ich den 
"zum Spass" setzen und sehen was passiert? Welchen der 8 verschiedenen 
Möglichkeiten der 16MHZ Quarz Konfiguration wähle ich aus? Das hat 
irgendwas mit Latenz zu tun...

Ich hatte nicht vor diese Fragen zu stellen, sie sind erstmal Irrelevant 
da ich überhaupt "noch" nicht weiss was und wofür brauch ich wann, die 
oder jene Konfiguration.

Da Fakto, sich über Fuses setzen zu informieren = Rattenschwanz

Manfred P. schrieb:
> Arduino F. schrieb:
>> Du liest offensichtlich weder meine Texte, noch die Anleitungen welche
>> ich verlinke. (oder verstehst sie nicht)
>
> Scheint am Verstehen zu klemmen, aber mir fehlen Ideen, wie man da
> helfen kann.

Ich sehe keine verlinkten Anleitungen.

Ich habe Oben schon erwähnt das ich mit dem Thema Fuses überfordert bin.
Ich bin Dankbar einen Einblick dazu erhalten zu haben, das man diese mit 
Achtung zu behandeln hat, da sie nicht ungefährlich und äusserst 
relevant sind.
Aber, es gibt ja auch ein Missverständnis.
Ich muss meinen externen Programmer nicht benutzen um 328ps zu 
programmieren, die Intention war eigentlich bloss erstmal Fabrikneue 
328ps mit Bootloader auszustatten.
Was ich nicht wusste ist, ist dieser erstmal mit Bootloader versehen, 
dann muss man ihn auch direkt über USB seriell verwenden. Praktischer 
wäre das natürlich ohne aber auch eben nicht weil man eben viel mehr 
Verständnis für den Chip aufbringen muss.
Insofern liegt meine Lösung jetzt einfach darin meine Chips ganz normal 
über USB zu programmieren.
Danke 👍

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


Lesenswert?

Darth G. schrieb:
> Ich sehe keine verlinkten Anleitungen.
Hier:
Arduino F. schrieb:
> Vom gleichen Autor: (mit ATMEGA328P)
> https://github.com/MCUdude/MiniCore/tree/master

Darth G. schrieb:
> Ich habe Oben schon erwähnt das ich mit dem Thema Fuses überfordert bin.
Das könnte man alles lernen.
Ist auch gar nicht so wirklich schwierig.
Muss man sich allerdings mal drauf einlassen.
Aber solange du dich selber für überfordert erklärst, wird das dank 
Autosuggestion allerdings wahrscheinlich nix.

Darth G. schrieb:
> Insofern liegt meine Lösung jetzt einfach darin meine Chips ganz normal
> über USB zu programmieren.
Dann ist ja auch ok...

von Darth G. (darth_g)


Lesenswert?

Arduino F. schrieb:
> Darth G. schrieb:
>> Ich sehe keine verlinkten Anleitungen.
> Hier:
> Arduino F. schrieb:
>> Vom gleichen Autor: (mit ATMEGA328P)
>> https://github.com/MCUdude/MiniCore/tree/master
>
> Darth G. schrieb:
>> Ich habe Oben schon erwähnt das ich mit dem Thema Fuses überfordert bin.
> Das könnte man alles lernen.
> Ist auch gar nicht so wirklich schwierig.
> Muss man sich allerdings mal drauf einlassen.
> Aber solange du dich selber für überfordert erklärst, wird das dank
> Autosuggestion allerdings wahrscheinlich nix.

Ist nicht so. Ich verstehe es nicht auf Anhieb und solange ich unsicher 
bin setze ich da auch Nix sondern orientiere mich an 
Anwendungsbeispielen die mir aber erstmal unter kommen müssen. Ich weiss 
jetzt schonmal dass, das Thema wichtig ist und habe mein Auge drauf und 
schaue was andere wann machen.

Ich werde mich auch mit dem Minicore befassen und es sind dort auch 
Infos die gewisse Sachen erläutern nur ab wann man eine Fuse wo setzt 
kommt doch eben stark auf den Anwendungsfall an und das wirft bei mir 
mehr Fragen auf als ich stellen möchte.

Also kurz, das Thema ist notiert und beschäftigt mich wird nur eine 
Weile dauern bis die Groschen fallen.

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.