Moin,
ich möchte aus Bequemlichkeit mal einen Arduino Nano verwenden, statt
einen "nackten" AVR wie bisher zu programmieren. Ich möchte aber meine
IDE weiter verwenden.
Mir ist noch nicht ganz klar was es jetzt bedeutet, einen Bootloader zu
haben. Was muss ich beachten?
- Kann ich die TX/RX Pins verwenden, die auch zur Kommunikation mit dem
USB Controller dienen?
- Brauche ich ein spezielles Makefile, oder kann ich mein Makefile
verwenden, welches vorher mit C / Avrdude zusammen gut gearbeitet hat?
- Muss der Compiler irgendwie wissen, dass ein Bootloader vorhanden ist?
Ich habe den ATMega238P hiermit bereits zum Antworten bekommen:
Die Arduinos haben auch die ISP Anschlüsse nach außen geführt. Kannst
den Arduino also ganz normal via AVR Debugger programmieren. Damit wird
auch der Bootloader gelöscht. Den kann man bei Bedarf aber auch wieder
mit dem AVR flashen.
Google --> Arduino Bootloader --> Adafruit
Just plug in the USB cable, then press the reset just before you start
avrdude. If you need an avrdude tutorial, check out this page.
Use -b 19200 to set the baud rate to 19200
The device signature reads dont seem to work so you'll want to use
-F
The programmer type is avrisp
The device type is -p m168
The port is whatever the FTDI chip shows up as
Adrian E. schrieb:> Ich sagte doch bereits, dass avrdude erfolgreich mit dem Nano> kommuniziert.
Was erwartest du. Auf dem Nano Board sitzt ein ganz gewöhnlicher
ATmega328, auf den jemand einen Bootloader draufgespielt hat, der sich
(u.a.) über die Arduino IDE nutzen lässt, z.B. mit AVRdude.
Adrian E. schrieb:> Ich möchte aber meine IDE weiter verwenden.
Wenn du ein bisschen konkreter sagen würdest, welche IDE du dein eigen
nennst, wäre es einfacher, zu sagen, ob z.B. Visual Micro dir weiter
helfen würde.
Okay, meine konkreten Fragen werden einfach ignoriert. Zum Beispiel, ob
ich genau so kompiliere, wie wenn ich keinen Bootloader verwende und per
ISP auf den Chip schreibe. Ist ja mal wieder super Stimmung, hier im
Forum.
Wolfgang schrieb:> Wenn du ein bisschen konkreter sagen würdest, welche IDE du dein eigen> nennst, wäre es einfacher, zu sagen, ob z.B. Visual Micro dir weiter> helfen würde.
Ich verwende Geany mit avr-gcc und avrdude.
> Was muss ich beachten?
Der Bootloader liegt am Ende des Flash Speichers und ist durch Fuses vor
dem Überschrieben geschützt. Also brauchst du eigentlich gar nichts
weiter beachten, außer dass er die verfügbare Menge vom Flash Speicher
reduziert.
> Kann ich die TX/RX Pins verwenden
Ja, denn zwischen AVR und USB-UART sind 1kΩ Widerstände. Deine externe
Beschaltung kann die Signale dominieren (muss natürlich genug Strom
liefern können).
> Brauche ich ein spezielles Makefile?
Nein.
Wenn du den Chip per ISP Schnittstelle programmierst, wird der
Bootloader in der Regel gelöscht. Dann musst du die Fuses entsprechend
umstellen. Wenn du den Chip per Bootloader über die USB Schnittstelle
programmierst, lässt du die Fuses besser so wie sie sind.
Geany Arduino schrieb:> Wieso fragt man hier im Forum, wenn man Google nutzen kann?
Betonung auf "wenn man Google nutzen kann". Es gibt Leute die können das
nicht und diskutieren lieber stundenlang um weniger Input zu bekommen
als wenn man gegoogelt hätte
Stefanus F. schrieb:> Weil man vor allem als Anfänger manche Fachwörter noch nicht versteht> oder sie nicht kennt und deswegen nicht die "guten" Seiten findet.
Und weil man sich beim Googeln häufig durch zig Seiten wühlen muss auf
denen die eigene, wenn auch einfache, Frage nicht beantwortet wird.
Die Hochnäsigkeit mit der man in diesem Forum konfrontiert wird ist
immer wieder erstaunlich.
Timmo H. schrieb:> Es gibt Leute die können das> nicht und diskutieren lieber stundenlang um weniger Input zu bekommen> als wenn man gegoogelt hätte
Ich war nicht derjenige der diesen Thread mit unnötigen Beiträgen in die
Länge gezogen hat.
@ Stefanus F:
Danke!
Adrian E. schrieb:> Okay, meine konkreten Fragen werden einfach ignoriert. Zum Beispiel, ob> ich genau so kompiliere, wie wenn ich keinen Bootloader verwende und per> ISP auf den Chip schreibe.
Wenn schon faul, dann richtig: Schreibe in der gewohnten Umgebung, aber
überlasse Kompilieren / Hochladen der Arduino-IDE. Es hält Dich niemand
davon ab, vorher in Deiner Umgebung einen Compilerlauf zu machen und
Fehler zu bereingen. Unter A*-IDE sitzt gcc, also warum nicht?
Wenn man in der A-IDE den Haken "Externen Editor verwenden" setzt, liest
das Ding jedesmal die Datei neu ein.
Wenn Du den Upload partout nicht mit der A*-IDE machen willst, wirst Du
wohl deren Steuersequenz nacherfinden müssen, sie beginnt auf jeden Fall
mit einem Reset.
Einmal die Datei \Arduino_IDE\hardware\arduino\avr\boards.txt anschauen
schadet nicht, es gibt aber noch deutlich mehr Beschreibungsdateien.
Geany Arduino schrieb:> Wieso fragt man hier im Forum, wenn man Google nutzen kann?
Weil viele einfach zu blöd sind, eine Google-Anfrage so zu formulieren,
daß auch sinnvolle Ergebnisse kommen.
Wenn man Google einfach nur "Arduino" zum Fraß vorwirft, passiert genau
sowas.
Allerdings frage ich mich, wie man mit dieser Herangehensweise überhaupt
sinnvoll programmieren will, wenn man schon bei einer so simplen Sache
wie Google seine Gedanken nicht geordnet formulieren kann....
Adrian E. schrieb:> Kompilieren wie gewohnt und hochladen mit avrdude funktioniert aber> soweit gut. Avrdude kennt auch das flag-c arduino
Dann verstehe ich Deine Fragestellung nicht mehr. Lädst Du per ISP oder
erlaubt Dein "flag arduino" schon seriellen Zugriff?
Manfred schrieb:> Adrian E. schrieb:>> Kompilieren wie gewohnt und hochladen mit avrdude funktioniert aber>> soweit gut. Avrdude kennt auch das flag-c arduino>> Dann verstehe ich Deine Fragestellung nicht mehr. Lädst Du per ISP oder> erlaubt Dein "flag arduino" schon seriellen Zugriff?
Meine Fragestellung ist von Stefanus beantwortet worden. Ich weiß jetzt,
dass es nicht zu Problemen kommen kann, wenn ich meinen Code für einen
AVR mit Bootloader genau so kompiliere wie zuvor.
Adrian E. schrieb:> - Kann ich die TX/RX Pins verwenden, die auch zur Kommunikation mit dem> USB Controller dienen?
Du kannst sie nur zur Kommunikation mit dem USB-UART Chip nutzen. Ist
aber trivial. Einfach am PC im Terminalprogramm die gleiche Baudrate
einstellen wie am AVR und es funktioniert direkt. Das ist m.M.n. der
größte Vorteil dieser Arduino-Boards, daß man den UART-Kanal zur
Entwicklungsumgebung gratis hat.
> - Brauche ich ein spezielles Makefile, oder kann ich mein Makefile> verwenden, welches vorher mit C / Avrdude zusammen gut gearbeitet hat?
Wenn du den Arduino-Krempel weglassen willst, mußt du ein paar Variablen
im Makefile passend setzen (im wesentlichen NO_CORE=Yes). Du schreibst
nicht, auf welcher Plattform du unterwegs bist, aber für Linux gibt es
ein Package "arduino-mk", das genau dafür gedacht ist, den AVR auf dem
Arduino "nackt" zu verwenden.
> - Muss der Compiler irgendwie wissen, dass ein Bootloader vorhanden ist?
Dem Linker sollte man sagen, daß er 2KB weniger Flash hat. Dann ist
sichergestellt, daß das HEX File den Bootloader nicht überschreibt. Bei
Verwendung von Arduino-mk werden die Arduino-Linkerskripte verwendet,
die genau das tun.
Hier mal das "Blink" Beispiel unter Verwendung von arduino-mk.
Compilieren mit "make", flashen mit "make upload".
blink.c
Bei den AVRs kann man den Bootloader so schreiben, daß die Applikation
nichts davon wissen muß, d.h. sie startet ganz normal an Adresse 0x0000.
Das geht auch für die ATtiny und den ATmega48.
Um den Bootloader zu starten gibt es 2 Möglichkeiten:
1. Der Bootloader fragt einen Pin ab.
2. Der Bootloader wartet nach jedem Reset einige Sekunden, ob ein
Kommando reinkommt. Dann erst startet er die Applikation.
Harry L. schrieb:> Geany Arduino schrieb:>> Wieso fragt man hier im Forum, wenn man Google nutzen kann?>> Weil viele einfach zu blöd sind, eine Google-Anfrage so zu formulieren,> daß auch sinnvolle Ergebnisse kommen.> Wenn man Google einfach nur "Arduino" zum Fraß vorwirft, passiert genau> sowas.
Zur Ehrenrettung der Frager: Gerade zum Thema Arduino gibt es eine
gefühlte halbe Million "Anfänger-Tutorials" mit einem Fritzing-Bild,
einer LED, zwei Sensoren und den Worten "Bootloader" und "ohne" im Text,
die genau beschreiben, wie ein Draht an die Stiftleiste anzuschließen
ist und die recht gute SEO betreiben. Die relativ wenigen Seiten, die
darüber hinaus gehen, gehen daher in den Suchergebnissen häufig unter.
MfG, Arno
...der zum Beispiel schon stundenlang den Rückgabetyp von analogRead()
in der ESP-Arduino-Umgebung gesucht hat - manchmal ja schon relevant,
wenn das Ergebnis z.B. an ein snprintf weitergegeben werden soll...
> schon stundenlang den Rückgabetyp von analogRead()> in der ESP-Arduino-Umgebung gesucht hat
Das ist für Arduino Doku typisch. Ich habe mir inzwischen angewöhnt,
eine
"richtige" IDE zu benutzen, die zeigt mir das dann schon an.
Aber eigentlich gehört so etwas in die Doku - ist meine Meinung dazu.
Ich wette, die Arduino Macher merken das gar nicht, weil sie ihre eigene
nicht-IDE nicht benutzen.
Arno schrieb:> ...der zum Beispiel schon stundenlang den Rückgabetyp von analogRead()
funktioniert so etwas wie:
printf("%d", sizeof(analogRead()))
?
Da hat man zwar die Information signed/unsigned noch nicht, aber das
dürfte sich bei analogRead anhand der Werte ja ergeben/sehen lassen.
Stefanus F. schrieb:>> schon stundenlang den Rückgabetyp von analogRead()>> in der ESP-Arduino-Umgebung gesucht hat>> Das ist für Arduino Doku typisch. Ich habe mir inzwischen angewöhnt,> eine> "richtige" IDE zu benutzen, die zeigt mir das dann schon an.>> Aber eigentlich gehört so etwas in die Doku - ist meine Meinung dazu.> Ich wette, die Arduino Macher merken das gar nicht, weil sie ihre eigene> nicht-IDE nicht benutzen.
Typisches Arduino Bashing....
Drauf hauen, ohne die Augen auf zu machen.
Natürlich ist der ESP, kein Arduino.
Die Arduino Leute für die angeblich schlechte Doku der Erweiterung für
den ESP verantwortlich zu machen ist arg vermessen.
Ja, grenzt schon an Dummheit.
Wenn nicht sogar Absicht dahinter steckt.
In der Arduino Referenz
https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
Steht ganz klar:
> Returns> int(0 to 1023)
Wenn das einer nicht lesen kann, dann hilft auch keine Fettschrift mehr.
analogRead() liefert also einen int
Die Produzenten der Integration von weiteren/fremden Boards, werden
diesen Rückgabewert übernehmen, wenn denn dieser exotische µC das kann.
Ein externer Intergrationdokumentierer wird Abweichungen vom original
Framework dokumentieren, und nicht jedem Depp die Welt erklären.
PS:
Wem die original Arduino Doku nicht gefällt, der/die/es ist sicherlich
herzlich willkommen diese zu verbessern.
Wem die ESP Doku nicht gefällt, für den gilt das gleiche. Das Zeugs
liegt auf GitHub.
Selbst der Quellcode der Arduino IDE findet sich auf GitHub.
Safari schrieb:> funktioniert so etwas wie:> printf("%d", sizeof(analogRead()))> ?
Nein!
Da fehlt ein Parameter
Wenn, dann sizeof(analogRead(A0))
So stimmt wenigstens die Syntax, in soweit, dass der Kompiler durchläuft
1
voidtest()
2
{
3
autovar=analogRead(A0);
4
Serial.println(sizeof(var));
5
}
Liefert auf einem UNO: 2
Wird auf dem ESP 4 liefern.
ungetestet
Arduino Fanboy D. schrieb:> In der Arduino Referenz> https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/> Steht ganz klar:>> Returns>> int(0 to 1023)> Wenn das einer nicht lesen kann, dann hilft auch keine Fettschrift mehr.
Ist doch schon Scheisse!
Bei AVR ist int 16bit, bei STM32 32bit usw...
Hinzu kommt, daß int Vorzeichen-behaftet ist und der ADC nur positive
Werte liefern kann.
Genau dafür gibts uint16_16
Die Arduidioten sollten erstmal Programmieren lernen!
Harry L. schrieb:> Ist doch schon Scheisse!
Ja, so funktioniert Bashing.
Scheiße schreien, obwohl Datentype und Wertebereich klar dokumentiert
sind.
Und natürlich jegliche Kompetenz absprechen.
Kommt auch immer wieder gut.
Erst war scheiße, dass es angeblich nicht dokumentiert wurde.
Jetzt sind die Programmierer scheiße und Idioten.
Nebenbei:
Historisch gesehen kommt das Arduino Framework aus der Processing Ecke.
Versucht weitgehende Kompatibilität damit zu erhalten.
Processing ist Java, und kennt kein unsigned int oder uint16_t
----
Harry L. schrieb:> Hinzu kommt, daß int Vorzeichen-behaftet ist und der ADC nur positive> Werte liefern kann.
Ach neee.....
Das ist ja schon eine etwas dreiste Lüge.
Es gibt einige AVR, welche Spannungsdifferenzen messen können
(auch wenn Arduino das nicht per Framework unterstützt)
Aber dass ein AVR ADC keine negativen Werte liefern kann, ist in der
allgemeinen Aussage gelogen.
----
Aber das interessiert doch sowieso keinen, der unbedingt was zum
schlechtreden braucht.
Also hackt weiter darauf rum
ohne mich.
---
Nachtrag:
https://de.wikipedia.org/wiki/Kompetenzstufenentwicklung
Die Leute auf dem niedrigsten Kompetenzlevel reißen das Maul am
weitesten auf, ohne zu merken, wie sehr sie sich dabei blamieren.
Du machst ja deinem Nickname alle Ehre...
Setz mal deine rosarote Arduino-Brille ab!
Arduino Fanboy D. schrieb:> Processing ist Java, und kennt kein unsigned int oder uint16_t
Ach, und ich dachte, das wäre C(++)...
Erst schreibst du:
Arduino Fanboy D. schrieb:> In der Arduino Referenz> https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/> Steht ganz klar:>> Returns>> int(0 to 1023)
Und dann kann das plötzlich doch negativ werden ?!?
WTF????
Arduino Fanboy D. schrieb:> Das ist ja schon eine etwas dreiste Lüge.> Es gibt einige AVR, welche Spannungsdifferenzen messen können> (auch wenn Arduino das nicht per Framework unterstützt)
Merkst du noch was???
Wundert mich gar nicht, daß bei so krausen Gedankengängen nur
beschissener Code heraus kommt.
Hallo Adrian E..
Am besten Du vergisst das mit dem umsteigen.
Arduino ist was für Anfänger die hoffentlich später mal richtig
Programmieren lernen. Für was anders ist das Projekt auch nicht
gestartet worden.
Ich habe mich mal daran versucht, weil es einige Libs gab die ich
brauchte.
Bis die mal so liefen das man die benutzen konnte hätte ich das gleich
selber schreiben können.
Den Bootloader davon nutze ich aber gerne, auch einige Boards von denen
setzte ich sehr gerne ein.
Nur programmieren würde ich die Teile weiter unter einer guten IDE mit
Debugger, dann geht der Bootloader aber nicht mehr!
Uli
Uli schrieb:> Am besten Du vergisst das mit dem umsteigen.> Arduino ist was für Anfänger die hoffentlich später mal richtig> Programmieren lernen. Für was anders ist das Projekt auch nicht> gestartet worden.
Wieder einer, der antwortet ohne den TE auch zu lesen. Er will auf die
Arduino-Platinen umsteigen, seinen AVR aber trotzdem ohne den
Arduino-Mittelbau programmieren. Und das ist durchaus sinnvoll. Zum
einen, weil man die Nanos aus China billiger bekommt als hierzulande
einen ATMega328 allein. Den USB-UART kriegt man dann noch dazu.
Wow! Ich wollte den Tab gerade schließen, da sehen ich doch noch eine
Million neuer Antworten. Und sogar ein paar in denen niemand persönlich
beleidigt wird.
Arno schrieb:> Zur Ehrenrettung der Frager: Gerade zum Thema Arduino gibt es eine> gefühlte halbe Million "Anfänger-Tutorials" mit einem Fritzing-Bild,> einer LED, zwei Sensoren und den Worten "Bootloader" und "ohne" im Text,> die genau beschreiben, wie ein Draht an die Stiftleiste anzuschließen> ist und die recht gute SEO betreiben. Die relativ wenigen Seiten, die> darüber hinaus gehen, gehen daher in den Suchergebnissen häufig unter.>> MfG, Arno
Danke! Exakt so sah mein Google Erlebnis aus.
Wenn es hier nicht doch ein paar echt kompetente und verständnisvolle
Leute gäbe, hätte ich diesem Forum schon vor Jahren den Rücken
zugekehrt.
Was macht die Option NO_CORE = Yes im Makefile? Bei meinen ersten Tests
habe ich folgende Optionen angepasst und das hat funktioniert:
Stefanus F. schrieb:>> Was macht die Option NO_CORE = Yes im Makefile?>> Zeige mal das Makefile dann kann ich sehen, was es damit anstellt.https://pastebin.com/drjZdcWe
NO_CORE kommt in diesem Makefile gar nicht vor.
Adrian E. schrieb:> Was macht die Option NO_CORE = Yes im Makefile?
Schrieb ich doch: die sorgt dafür, daß der Arduino-Kruscht weder
compiliert noch zu deinem Projekt gelinkt wird. Da du den AVR ja direkt
programmieren wolltest, ist das genau das, was du willst.
Uli schrieb
>Am besten Du vergisst das mit dem umsteigen.>Arduino ist was für Anfänger die hoffentlich später mal richtig>Programmieren lernen.
Nicht ganz. Es ist auch was für Profis wie mich, die schon 30 Jahre lang
Mikrocontroller programmieren und denen es zu dumm ist, jedes mal die
Zeit in die Inbetriebname einer neuen Toolchain zu stecken.
Bei Bedarf wird Hardware benutzt, für die es eine Arduino Framework gibt
oder es wird eine Library angepasst, weil man aus langer Erfahrung weiß,
wo man hin greifen muss und wann sich der Einsatz für welchen Zweck
lohnt.
Probleme mit den Arduinos hat hier eher das Mittelmaß, welches die Stufe
zur Meisterschaft noch nicht erklommen hat.
>Ich habe mich mal daran versucht, weil es einige Libs gab die ich>brauchte.>Bis die mal so liefen das man die benutzen konnte hätte ich das gleich>selber schreiben können.
q.e.d.
Stefanus F. schrieb:> [...] Wenn du den Chip per ISP Schnittstelle programmierst, wird der> Bootloader in der Regel gelöscht. Dann musst du die Fuses entsprechend> umstellen. [...]
Wieso? Ich mache das genau so aber habe an den Fuses nichts geändert.
Oder ist das nur die Empfehlung, um den vollen Speicher beschreiben zu
können?
Viele Grüße
Max
Wenn dein Code in den Bootloaderbereich ragt, wird das mit wundersamem
Verhalten bestraft.
Ansonsten werden vom Prozessor sizeof(Bootloader) viele Nops
durchlaufen. Also der Start verzögert.
Bootloader löschen, aber die Fuses dafür stehen lassen, halte ich für
schlampige Arbeit.
Der Kram kann einem auf die Füße fallen, muss aber nicht.
Adrian E. schrieb:> Okay, meine konkreten Fragen werden einfach ignoriert.
an deinen Texten ist nichts konkret, du beantwortest ja nicht mal Fragen
Max B. schrieb:> Wieso? Ich mache das genau
und fast einen Monat später kommt nichts konkretes!
glaubst hier sitzen Hellseher die wissen welche IDE du benutzt?
Adrian E. schrieb:> Ich möchte aber meine> IDE weiter verwenden.
ich habe auch keine Lust alle deine Beiträge noch mal zu untersuchen,
Salami mag ich nur auf Pizza, aber nicht so lieblos hingerotzt wie deine
Fragen.
Joachim B. schrieb:> Max B. schrieb:>> Wieso? Ich mache das genau>> und fast einen Monat später kommt nichts konkretes!
Also ich habe heute das erste Mal in diesem Thread gepostet...
Viele Grüße
Max