ah, stimmt, klar, Highbyte und Lowbyte passen ja bei unsigned char (0...255) zusammen rein.
Nur wenn man signed char (-128...+127) hat, braucht man bei 174 zwei Byte.
Druckbare Version
ah, stimmt, klar, Highbyte und Lowbyte passen ja bei unsigned char (0...255) zusammen rein.
Nur wenn man signed char (-128...+127) hat, braucht man bei 174 zwei Byte.
Ja.
HeSt versucht was zu verstehen. Deshalb noch mal die Betonung, um Unsicherheit zu beseitigen. Und das Pallaver am Rande hilft ihm auch nicht weiter.
MfG
He Leute!
Langsam! Keine Seitenhiebe wegen mir !!!
Ich hab schon verstanden.
Die Auslegung von DEZIMAL war mir in diesem Sinne nicht geläufig.
Darum habe ich im Post #116 ja geschrieben: "reden wir aneinander vorbei?"
Dem war defacto so.
Ich meinte mit "dezimal" NUMMERN/ZIFFERN (123...)!
Gespeichert wird in dual, angezeigt in Hex um einstellig zu bleiben.
Und "Ziffern" (0,1,2,...) kann ein Display nicht darstellen, sondern nur in "Textform" als $30,$31, ....
Das war eben die Ungereimtheit.
Jeder meinte mit "dezimal" was anderes.
Ich werd mal alles durcharbeiten, was ich an Erklärungen erhalten hab.
Wird ein bisschen dauern, muss auch wieder mehr was anderes tun als nur hier rumgrübeln ... ;)
Ja das ist es eben. Du kennst Zahlen als Schrift, wie Du schreibst. So existieren sie in Deiner Vorstellung und deswegen meinst Du diese Zahlen. Aber der Computer kennt eben eine andere "Schrift" für Zahlen und die ist erst mal binär. Die hexadezimale Darstellung bildet eine bestimmte Bit-Menge ab. Mit 4 Bit lassen sich Werte von 0 bis 15 abbilden: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E und F. Danach kommen 8 Bit, die aus jeweils 4 Bit bestehen: 4Bit|4Bit (z.B.: 0A, 12, B3). Dann fasst man zweimal 8 Bit zu 16 Bit zusammen: 8Bit|8Bit. Und so geht das dann vom Prinzip immer weiter. So kommt man irgendwann zu Datentypen, die 32 Bit umfassen oder noch mehr sogar.
Du musst Dich auf jeden Fall intensiv mit dem Rechnen in Maschinensprache auseinandersetzen. Ich finde, das ist jetzt das Wichtigste an allem. Sonst kommst Du immer wieder in Schwierigkeiten und verschiedene Dinge nicht verstehen zu können. Das gehört aber zum Grundverständnis. - Du hast Dir ganz schön was vorgenommen. :)
MfG
Ein Zündgedanke war im #116er schon dabei nur in der Weiterführung gings in die falsche Richtung.
Können wir uns auf Zeichen einigen ?
Diese Zeichen sind im LCD als ZEICHENVORRAT hinterlegt welche dann über eine ADRESSE angesprochen und dargestellt werden kann.
Das das LCD keine Ziffern darstellen kann ist eher nicht richtig, es kanns ja, nur du meinst eher die Umsetzung von Zahl -> Mensch -> µC -> LCD -> Zahl passiert.
Diesen Gedankengang hatte ich damals auch wie stellt ein LCD etwas da, bis mir jmd sagte das vieles fest vordefiniert wird was einfach dann abgerufen wird.
https://de.wikipedia.org/wiki/Americ...on_Interchange
Hab es mir schon gedacht das da ein Denkfehler vorlag. Mit signed vollkommen recht. ;) Ging auch nicht gegen dich...
@Moppi danke für die Unterstützung
Jep das hat ja schon den Hauch einer Definition. ;)
eine "Ziffer" ist ein Zeichen (für die Darstellung einer Stelle einer Zahl), ist aber selber keine Zahl ! 8)
(Eine "Zahl" ist Konstrukt, das sich in verschiedenen Zahlensystemen mit verschiedenen Ziffern schriftlich darstellen lässt)
Ziffern sind genau das, was die ASCII Codes 48...57 plus ggf. zusätzlich weitere Buchstaben (für andere Zahlensyteme) repräsentieren.
@avr_racer
Hab mich mit deinem "Mathe.asm" Programm auseinander gesetzt.
Vieles ist mir jetzt klar(er), alles noch nicht ...
Was ich gefunden hab, hab ich dir bereits in der PN geschrieben.
Was mir noch nicht klar ist, wozu die SWAPs in HEX_DEC gut sein sollen?
Das macht die Umwandlung in ASCII schwieriger!
Beispiel:
34515: 03 40 05 15 (besser: 03 04 05 01 05 ohne swap und ZE getrennt)
Wie kann ich ZE gemeinsam in ASCII umwandeln/anzeigen?
Da ich die Ziffern am LCD einzeln ausgebe, müssen die getrennt sein.
Das ist zumindest mein Gedankengang.
Oder liege ich hier falsch?
ich fürchte, du hast immer noch nicht verstanden, dass du eine auf dem µC gespeicherte Zahl (z.B. 0xAE) nicht direkt in ASCII als Dec Zahl ausgeben kannst, denn weder 0xA noch 0xE sind Dezimalziffern.
also musst du erst durch eine Reihe von Rechenoperationen (Division, Modulo) eine Dezimalsystem-Stellen-Zerlegung erzeugen (Hunderter, Zehner, Einer, hier also: 1*100 + 7*10 + 4*1)
und erst DIESE kannst du dann (per ASCII offset=48 ) als Ziffern ausgeben (1 7 4 , einzeln oder gemeinsam als string).Code:Hunderter: 0xAE/100
Zehner: (0xAE mod 100) / 10
Einer: (0xAE mod 100) mod 10
Ich hab sehr wohl verstanden WIE Ziffern/Zahlen/Zeichen angezeigt werden können!
Offenbar kann ich mich nicht so ausdrücken, dass ihr das so versteht, wie ich es meine!
Die Rechenoperationen sind bis auf die ASCII-Umwandlungen durch (34515).
Diese Registerinhalte 03 04 05 01 05 (15 bereits getrennt) müssen klarerweise noch in ASCII umgewandelt werden um sie anzeigen zu können.
Es geht nur darum, dass die einzelnen Register nurmehr mit $30 addiert werden müssen, dann kann man sie einzeln anzeigen.
Aber 40 oder 15 mit $30 addiert ergibt kein anzeigbares Zeichen!! Zumindest nicht die Ziffer, die es sein soll!
Also auf "low-nibble" = 04!
Und 15 trennen auf 01 05!
Hast mich jetzt??
sorry, leider nein.Zitat:
Hast mich jetzt??
Alle ASCII-Zeichen ab dec 48 ($30) sind anzeigbar, und natürlich dürfen es dezimal nur die Werte 48-57 sein (48+0 bis 48+9).
Wschl muss es dir ein asm-Progger erklären.
Damit ich die Zahl 34515 auf dem LCD anzeigen kann, muss ich jede einzelne Ziffer dieser Zahl (jede Ziffer steht in einem eigenen Register) in anzeigbare Zeichen umwandeln = Ziffer + $30:
3 = $33, 4 = $34, 5 = $35, 1 = $31 und 5 = $35.
Entweder ich geb das zusammengefasst als String aus (wobei ich nicht weiß, wie ich das zu einem String zusammenstellen kann) oder eben jedes einzeln.
Ein "03" oder "05", .... wie es im Register steht ist nicht anzeigbar!
Jetzt??
nein, sorry, ich muss mich ausklinken, (edit) deine Rechnungen sind sogar ok (so rechne ich selber ja auch), aber dein Problem ist für mich als C-Programmierer so als wäre es in sumerischer Keilschrift geschrieben ;)Zitat:
Jetzt??
:) Ist ja auch gut !! :)
avr_racer verstehts schon ;)
letzter Versuch - kannst du direkt nacheinander die Konstanten
$30
$31
$32
$33
$34
ausgeben?
Wenn nein, funktioniert deine lcd-Ausgabe nicht.
Wenn ja, hast du dich vlt oben verrechnet bei der Dezimalstellen-Zerlegung...
Alle $xx ja,
§33 ist nicht anzeigbar.
C und Assembler sind nicht identisch!!
Vergiss es! ;)
typo, sollte ntl $33 heißen.
Aber dann liegt wohl der 2. Fall vor (Rechenfehler)
C erzeugt denselben Maschinencode wie asm und rechnet mit denselbern Registerwerten.
PN
Der Swap dient der Zuordung der richtigen Stelle
1Mio, 100tsder, 10tsder, Tausender, Hunderter, Zehner, Einer.
Das hängt davon ab wie man es betrachtet. Wenn ich rechne möchte ich das Ergebnis als ganzes sehen um evtl Fehler usw zu erkennen und spart Bytes. Somit habe ich eine reine Zahlenroutine nur für die Ausgabe von Zahlen.
Wenn man jeder Ziffer der einzelnen Stellen jeweils ein Byte zuordnet kann man das gern machen um es dann mit $30 zu addieren um es quasi als LCD-Ziffer schon parat und abrufbereit zu haben, erfordert je nach Ergebnis aber eben schonmal bis zu 10byte.
Problem wirds geben wenn man das zu früh macht und evtl mit dem Ergebniss weiter rechnen muss...
Ich spare mir das indem ich dafür eine reine Zahlenroutine habe die dann High/Lowbyte auftrennt und $30 dazu addiert
Nun ich nehme an das ZE als Buchstaben zu betrachten sind und Buchstaben brauchen nicht mehr gewandelt werden.
Mach mal einen Doppelklick auf ein Register, dort hast du jetzt mehrere Möglichkeiten einen Wert einzugeben und in HEX/DEZ/OCT/BIN/TEXT darstellen zu lassen. Also klicke mal TEXT an und gebe Z oder E ein. Dann klickst auf Bin oder HEX oder DEZ, da steht dann der Zahlenwert im jeweiligen Zahlensystem. Mal einen Wert von E oder Z als BIN anzeigen lassen und nix machen
Wechsel zur PDF des LCD. Dort ASCII-Tabelle suchen und mal die UPPER und LOWER 4Bit ansehen und vergleichen nun sollte eigentlich ein EUREKA die Synapsen befeuern ;)
Selbst dein Bildschirm beinhaltet diesen Zeichensatz.
absolut korrekt.
40 als DEZ + $30 = $58 in binär 0101 1000 und sollte eigentlich das X sein
15 als DEZ + $30 = $3F in binär 0011 1111 und sollte eigentlich das ? sein
$40 + $30 = $70 in binär 0111 0000 müsste das p sein
$15 + $30 = $45 in binär 0100 0101 müsste das E sein
Die erste Spalte, also $00 bis $0F, sind die Adressen für eigens zu erstellende Zeichen im CHARAKTER-ROM... Heißt du würdest jetzt im Zeichenvorrat-Ram deine eigenen Zeichen adressieren...
Als Assembler "String" wäre das eine Schleife.
Heißt du könntest diese Zahl im RAM ablegen um die Register frei zu machen somit dann gesichert. Und schreibst dir eine Unterroutine wo du dir die gesicherte Zahl in dein/e Register schreibst, $30 dazu addieren gefolgt von LCD_DATA. Vorher solltest du eine Adresse (00 bis 0F) + $80 für Zeile 1 oder für Zeile 2 ($40 bis $4F) + $80 definieren auf die bzw ab die das LCD mit dem setzen der Zeichen beginnen soll.
1. Adresse auf LCD setzen mit LCD_Command
2. Zeichen/Ziffer laden + bearbeiten
3. Zeichen mit LCD_DATA an LCD senden
4. bei weiteren Zeichen Sprung zu 2 solange bis EndeBedingung erkannt wurde die musst du dann für dich kreieren
*LACHT*
Ich möchte euch allen für eure Hilfe und Geduld danken!
Programm ist fertig - umgewandelt. :)
Ein paar kleine Schreib- und Definitionsfehler waren noch drin.
Die LCD-Funktionen hab ich - soweit mit dem T24 auf dem Miniboard möglich - getestet.
Schaut alles gut aus.
Demnächst wird die Platine entworfen.
Dann gehts weiter ...
Bei diesem Projekt hab ich wieder viel gelernt! Und auch die Scheu vor einem LCD verloren ;)
Es ist doch viel einfacher damit, wenn man immer wieder - zumindest anfangs - an ein paar Parametern "drehen" muss ...
PS:
Hab bei meiner alten MC20 Funke das LCD (ist um einiges größer als das neue 1602er) entfernt und bei meinem T24 Test probiert - läuft einwandfrei :)
Bin wieder da ...
Frage:
Wie schalte ich ein LCD aus/ab, damit es keinen Strom mehr zieht - also nichts mehr verbraucht???
Der Grund - eine etwas kuriose Sache:
Ich hab ein Labornetzgerät, das ich zum Testen auf 5V und 65mA eingestellt hab.
Ich möchte das LCD nur dann in Betrieb haben, wenn ich Werte/Parameter anzeigen oder ändern, oder des Solarpanel manuell steuern will.
Schalte ich VDD (+) ab (gegen -), geht die Spannung etwas in die Knie = die Schaltung zieht mehr Strom.
Lege ich VDD oder VSS "floating" (also nirgendwo angeschlossen), bleibt zwar die Spannung stabil, dafür bleibt die Anzeige am LCD aktiv, wenn auch ein bisschen schwächer.
Der Suntracker wird an einem Akku betrieben.
Der Akku wird zwar bei genügend Sonnenenergie immer wieder geladen, aber trotzdem möchte ich den Stromverbrauch so gering wie möglich halten.
Die Schaltung wird zudem nachts oder bei zu wenig Sonnenenergie schlafen gelegt.
Sonst schaut's einstweilen gut aus :)
[edit]
Rätsel gelöst!
Solange am Datenport des LCD irgend ein Bit ein ist (=+):
1. Wenn VDD (+) gegen VSS (-) geschaltet wird, fließt offenbar über den Datenport Strom.
Deshalb auch der Spannungseinbruch (Sicherheitsschaltung des Labornetzgerätes).
2. Wenn VDD (+) oder VSS (-) "floating" sind, bekommt das LCD über den Datenport noch genug Strom um die Anzeige (schwächer) aufrecht zu erhalten.
Lösung:
Alle Bits des Datenport auf aus (-) setzen, dann VDD auf aus (-) und alles ist gut ;)
[endedit]
Hey hallo,
Es gibt ein extra Befehl was das LCD bzw nur die Anzeige selbst ausschaltet. Muss dann aber trotzdem mit Spannung versorgt werden.
Wenn du das LCD komplett spannungslos machst, muss es auch neu initalisiert werden.
Spanung anlegen an ein Bauteil was in der Versorgungsspannung weggeschaltet ist, sollte man tunlichst vermeiden aussser das DB erlaubt es.
Ja, ich weiß. Mach ich auch bevor ich das LCD stromlos setze.
Ist auch klar.
Nun, das weiß ich nicht. Aber warum sollte es ein Problem sein, wenn man das LCD von der Versorgungsspannung kappt??
Es funktioniert jedenfalls einwandfrei.:)
Okay war mir nicht sicher dir es bewusst war/ist...
LCD ausschalten per Befehl und nicht stromlos schalten Verbrauch wenige µA....
LCD bleibt eingeschaltet Strom ca. max. 3mA ohne LED-Beleuchtung.
Einige Pins/IC mögen eben die Kriechstöme nicht die an den Pins wirken wenn die UB fehlt. Je nach Schaltungsart können diese Kriechströme Umwege über die +Rail nehmen und somit weitere Teile des IC versorgen womit dieser aber nicht richtig funktioniert...
Nun, es sind keine "Kriechströme", es ist der Strom durch die Substratdioden. Diese entstehen bei der Herstellung des Chips und werden vom Marketing gerne als ESD-Schutzdioden verkauft. In manchen Datenblättern ist ein Diagramm einer typischen I/O-Struktur, da sind sie eingezeichnet. Deswegen findet man vielfach auch die Angabe, daß die Spannung an einem I/O Pin nicht größer als die Versorgung + 0,5V oder nicht kleiner als GND - 0,5V sein darf, damit diese Dioden nicht anfangen zu leiten. Ist dann auch noch ein Abblockkondensator am Chip, bildet das einen Halbbrückengleichrichter, der selbst aus wechselden Signalen eine unzuverlässige Versorgung erzeugt. I/O Pins ohne diese Dioden sind schwerer (teurer) herzustellen und werden daher extra beworben, z.B. mit "over the rail".
MfG Klebwax
Ok, danke für die Erklärungen!
Da ich alle Pins des LCD-Ports am µC für und somit auch die des LCDs auf GND lege, sollte es zu keinen der oben beschriebenen Problemen kommen.
So, ein Problem, das ich seit Tagen zu klären versuche ...
Ich komm nicht dahinter :(
Deshalb bitte ich um eure Hilfe.
Das angehängte Progrämmchen ist ein Auszug aus meinem SunTracker Projekt.
Es soll in einer Schleife die Spannungen am LCD anzeigen und aktuell halten.
Angezeigt wird in der zweiten Zeile links der 8-Bit ADCH-Wert im ADLAR-Modus und
rechts der umgerechnete Wert im 10-Bit Modus in Volt (Basis: 15V = 1024).
Funktioniert super, ABER NUR DANN , wenn die in der Routine DSPVALS die zwischen den beiden ;???? Zeilen stehenden Befehle aktiv sind.
Werden die Befehle für die Anzeige im 8-Bit Modus deaktiviert, funktioniert die 10-Bit Anzeige/Umrechnung nicht mehr.
Beim ersten Durchlauf wird zwar die richtige Spannung angezeigt, aber nicht mehr aktualisiert. Die Schleife läuft zwar, aber warum vom ADC nichts mehr kommt oder woran es sonst liegt ????????????
Poti auf ADC7 hängen oder welchen ihr auch immer testen wollt/könnt.
Kann mir da jemand weiter helfen?
Hallo,
1. Warum erst SAVR pushen und dann das SREG sichern in einer normalen Unterroutine ? Register SAVR dient der bloßen Sicherung was der Stack genauso machen könnte und man so wieder ein Register frei hätte falls benötigt.
Sonst nur notwendig wenn man mit Interrupts arbeitet und z.B. Rechenoperatonen durchführt dann muss/sollte das SREG in der ISR gesichert werden wie folgt:
2.Code:in Register , SREG
PUSH Register
Prgrammcode
POP REGISTER
Wenn du den ADC jedesmal nach der Wandlung deaktivierst:Code:WADC: ;Schleife bis Messung
sbic ADCSRA,ADSC ;abgeschlossen = ADSC=0
rjmp wadc
cbi ADCSRA,ADEN ;ADC ausschalten
out SREG,savr
pop savr
ret
1. braucht der ADC jedesmal bei der ersten Wandlung 25 Zyklen alle weiteren ca 13 Zyklen
2. das erste Ergebniss ist meist Müll
3. Die Wandlungsgeschwindigkeit sollte zwischen 50kHz - 200kHz betragen, bei dir ist es 7812,5Hz
4. Erst alles einstellen und dann ADEN auf 1 setzen ist ungünstig da Spannungsreferenz und Kannalum/einstellung nicht angenommen werden!!!!
Also richtig
Wenn man dann in den Sleep wechseln will wird vor dem Sleep der ADC deaktiviert und nach dem Sleep neu initalisiert.Code:ADC_Init:
1. ADEN setzen
2. Kanal auf GND setzen
3. Referenz einstellen
4. Testwandlung starten, auslesen, Ergebniss verwerfen
ret
WADC:
1. Kanal GND auf Kanal X setzen
2. Wandlung anstoßen
3. Wandlungszeit warten
4. Ergebnis auslesen
(5. Kanal X auf Kanal GND setzen aber kein muss)
ret
3. Wann wird denn ein Key gepresst ?
Lass die Routine komplett durchlaufen und mach die Keyabfrage ausserhalb dieser Routine (Wahrscheinlich auch beabsichtigt)Code:rjmp bri ;loop until any key pressed
Ebenso bau dir mal eine Zeitverzögerung ein sonst springen deine Werte auf dem LCD zu stark.
4. Vorsichtig mit irgenwelchen Sprungadressen dieser Art mit dem jetzigen Wissensstand!
Verbesserungsvorschlag:Code:rjmp pc-1
Ein weiterer Hinweis betrifft:Code:Init:
1. STACK
2. Power
3. PORTS
4. ADC_INIT (ADEN = 1, REF = 5V, Chanel = 11111, Testwandlung
5. LCD_ON
Hauptprogramm:
0. 150ms warten
1. Pinabfrage(SBIS/SBIC ?) wenn Bedingung erfüllt Sprung zu 2. sonst 3.
2. dspvals
3. rjmp Hauptprogramm
dspvals:
dein Programm
ret
Was keinerlei Nährwert hat und kann komplett in allen Routinen entfernt werden.Code:push savr
in savr,SREG
.
.
.
.
out SREG,savr
pop savr
Hi,
DANKE, dass du dir die Mühe gemacht hast, das Progrämmchen durchzusehen!
Das Register ersparst du dir nicht, man braucht es sowieso in den ISRs.
Deinen Vorschlag zur Sicherung nehme ich an.
Gut. Verstanden.
Allerdings hab ich nirgendwo im Datenblatt gelesen, dass die erste Messung Müll ist (beim Tiny13 wird z.B. dezidiert darauf hingewiesen). Zudem ist es zumindest bei dieser Routine egal, weil sowieso laufend gemessen und nur angezeigt wird.
Zu 3. An der Wandlungsgeschwindigkeit kann es nicht liegen. Sie ändert sich nicht, ob nur eine Wandlung oder beide erfolgen (8Bit+10Bit). Bei beiden funktioniert es ja und die 8Bit alleine auch. Weiter runter drehen kann man nicht. /128 ist der größte Teiler!
Was meinst du bei 4. mit "erst alles einstellen"?
Wie soll ich den Kanal auf GND setzen, wenn da Dauerspannung anliegt?
In dieser Testroutine gar nicht. Wird im Gesamtprogramm abgefragt. Der Kommentar ist beim Kopieren mitgegangen ...
Werd deine Vorschläge einbauen. Mal sehen, wie weit sie Wirkung zeigen.
Komm allerdings erst in 10 Tagen dazu ...
Doch meistens schon bzw du kannst es doppelt nutzen einmal ausserhalb der ISR und innerhalb der ISR. Frage hast du denn im Originalcode ISR in der Benutzung?
Ja eben nicht wenn du nach der Wandlung sofort den ADEN = 0 setzt danach passiert mit dem ADC gor nix mehr der ist AUS.
Naja du undersamplest eben deshalb soll ja diese Sample/Abtastfreweunz bei 50kHz bis 200kHz liegen damit der Hold-Kondensator nicht zu stark belastet wird. Und zum Ende der Wandlung das Ergebnis verfälschen kann.
Wenn du schläfst kannst du denn Daten aufnehmen also aktiv lernen ? (Der Mensch kanns schon ;) nur die Digitaltechnik nicht wenn was ausgeschaltet wurde) oder anders kannst du was auf CD schreiben wenn der Motor abgeschaltet wird der die CD bewegt ?
Im AVR ist nur EIN Wandler enthalten der durch umschalten der Eingänge auf die verschiedenen Pins zwischen verschiedenen Spannungen messen kann oder eben auf Kanal GND/Bandgabspannung wird der Eingang des Wandlers gelegt.
Hoffe du nimmst es mir nicht übel wenn ich meine das auch hier wieder Grundlagen zum ADC im AVR fehlen...;)
Noch ein Hinweis dein Text ist im Moment ein mix aus Spagehtticode und halbsinnvoller Routinen, zumindest könnte man noch weitere Teile in Unterroutinen auslagern um so die "mittleren Routinen" lesbarer zu gestalten...
15 Forums-Seiten, um was auf LCD auszugeben ... Per Arduino wären das 3 Zeilen Code....
***duck-und-weg-renn*** :p
Und wer hat wohl die Bibliotheken geschrieben das ein User evtl es in 3 Zeilen schafft ?? Denn hinter diesen 3 Zeilen, in Hochsprache, stehen gute 250 Zeilen in ASM. Dazu stellt sich die Frage wieviel der Premiumprogrammierer von der Hardware überhaupt verstanden hat...:rolleyes:
Der Seitenhieb ist schon ganz schön heftig und extremst unfair. Zu den 15 Seiten die ersten 7 kannste mal subtrahiern....
das war 1.) nicht unfair gemeint, sondern ironisch (und zugegeben: ein wenig stichelnd), deswegen das2.) [Besserwisser /ein] sind die Libs in ganz legalem C und C++ geschrieben, nicht in asm, und darauf kam es mir eigentlich an [Besserwisser /aus], undZitat:
***duck-und-weg-renn*** :p
3.) ist es ja gerade das schöne, die Hardware ansteuern zu können, ohne sich um die ganzen vertrackten low-level -details kümmern und sie auch noch verstehen zu müssen 8)
es sollte hier keine Diskussion über Arduino-User werden...
Der Sinn der Arduino-IDE besteht gerade darin, alle von Arduino unterstützten Boards nicht ohne, sondern MIT der Arduino-IDE weitestgehend Plattform-unabhängig v.a. auch von nicht-IT-Profis programmieren zu können, u.a. mit Hilfe der zur Verfügung stehenden Libraries. Genau dafür wurde das Arduino (ursprünglich "Wiring") Konzept entwickelt.
Auf diese Weise lassen sich z.B. das LCD 1602 oder 2004 oder auch OLEDs oder andere TFTs mit jedem beliebigen Arduino inkl. weiteren 3rd party Boards (Uno, Mega, Nano, Zero, Due, aber auch M4, ESP8266 oder ESP32 u.a.m.), alle grundsätzlich mit identischem Sourcecode programmieren (Arduino verwendet C/C++11), und auch externe Editoren können in diese IDE eingebunden werden.
Durch Nutzung der Libs vereinfacht sich der nötige eigene Code für verschiedenste Devices erfreulicherweise auf nur sehr wenige Zeilen, und Arduino-Uno-AVR-Code sieht dabei überhaupt nicht anders aus als Arduino-Due-ARM-ATSAM3X8E-Code - und genau das sind die erwünschten Riesen-Vorteile.
Generell ist aber C/C++ immer Library-basiert, das fängt schon bei libc, stdio, stdlib oder stdint an und ist beliebig endlos erweiterbar, das ist das C-Konzept, das per Sprachdefinition nur rund 20 reservierte keywords oder statements vordefiniert hat: der Rest steht immer in Libs.
Eine Arduino-Programmierung völlig außerhalb der Arduino IDE samt API Libs entspricht gerade NICHT dem Arduino-Konzept, und dein Arduino-User-Bashing ist also völlig offtopic und irrelevant.
Du solltest vielleicht mal den Fortlauf des Threads im Auge behalten, meine Argumentation bezieht sich auf Dein "falsch: man kann schon -
muss es aber gar nicht" - man kann eben nicht!
mfg
Achim
Es geht doch um nichts als um die philosophische Betrachtung von Möglichkeiten etwas zu entwickeln, gestern, heute und morgen wohl noch ganz anders.
Dafür sind harte Bezeichnungen eher übertrieben.