Forum: Mikrocontroller und Digitale Elektronik I2C Display einfache Frage


von Karl B. (gustav)


Lesenswert?

Soweit bin ich jetzt schon:
Adresse 78 (Rumgehexe mit der 3C schon erledigt.)
Befehle zum Initialisieren der Reihe nach eingegeben:
0x8D, 0x14, 0x20, 0x8D, 0x14, 0xAF
Dann zeigt mir das Display schon einmal Rauschen, bzw. kryptische 
Zeichen Zeile für Zeile. Das scheint aber unvollständig.
Dem Datenblatt des Controllers SSD1315 kann ich keinen Hinweis 
entnehmen,
dass schon "Charakters" über ASCII abrufbar sind, wie man es vom 
HD44780- Standard so gewohnt war.

Also einfache Frage:
Eine "schöne" Initialisierungsroutine scheint das Teil auch nicht zu 
brauchen. Steht jedenfalls nichts direkt so im Datenblatt.
Andersherum. Man wird nicht umhin kommen, die Libraries ausführlich zu 
Hilfe zu nehmen.
Mehr wollte ich nicht wissen.
Oder könnt Ihr mir eine supereinfache Initialisierungsroutine verraten.
Wollte nur - wie gehabt - Buchstaben und Ziffern "normal" darstellen 
lassen.
(Vorerst, nicht gleich mit etwas Komplizierten Graphischem beginnen.)

Bis dann
Vielen Dank für Antwort schon einmal.

ciao
gustav

von Joachim B. (jar)


Lesenswert?


von Harald K. (kirnbichler)


Lesenswert?

Karl B. schrieb:
> Dem Datenblatt des Controllers SSD1315 kann ich keinen Hinweis
> entnehmen, dass schon "Charakters" über ASCII abrufbar sind,
> wie man es vom HD44780- Standard so gewohnt war.

Man darf "Zeichen" sagen. Und nein, sind sie nicht. Das ist einer der 
wesentlichen Unterschiede zwischen einem Graphik- und einem Textdisplay.

Du musst jeden einzelnen Bildpunkt selbst von Hand setzen. Dafür gibt es 
natürlich "Libraries", die das übernehmen, mit nachezu beliebigen 
Zeichensätzen und -Größen.

von Sebastian R. (sebastian_r569)


Lesenswert?

Karl B. schrieb:
> Mehr wollte ich nicht wissen.

Dein Beitrag enthält keine einzige Frage.

von Joachim B. (jar)


Lesenswert?

https://github.com/libdriver/ssd1315
https://forum.arduino.cc/t/ssd1315/695280
include Zeichensatz in u8g2 LIB
DisplayOLED.setFont(u8g2_font_ncenB08_tr); // choose a suitable font

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Karl B. schrieb:
> Adresse 78 (Rumgehexe mit der 3C schon erledigt.)

Warum nennt das Datenblatt auf S.15 dann als Slave Adresse die 0x3C bzw. 
0x3d, je nach SA0 Bit?
("...“SA0” bit provides an extension bit for the slave address. Either 
“0111100” or “0111101”, can be selected as the slave address of 
SSD1315".)

Da hast du wohl noch das R/W-Bit mit reingemischt und alles um ein Bit 
verschoben. Elementare Bitoperationen als Hexerei zu bezeichnen, hört 
sich so an, als ob du die Arbeitsweise des I2C noch nicht ganz 
verinnerlicht hast.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Rainer W. schrieb:
> Da hast du wohl noch das R/W-Bit mit reingemischt und alles um ein Bit
> verschoben.

das ist das größte "Problem" bei verschiedenen LIBs erst Recht wenn man 
mischt!
Da hilft es nur Stück für stück durchforsten und selber bauen.

von Rainer W. (rawi)


Lesenswert?

Joachim B. schrieb:
> das ist das größte "Problem" bei verschiedenen LIBs erst Recht wenn man
> mischt!

Elementare Bitoperationen als Hexerei zu bezeichnen, hört sich etwas 
befremdlich an.
Die I2C-Spezifikation spricht bezüglich der Adresse eine klare Sprache 
und alles, was sich I2C nennt, sollte sich an die dort verwendeten 
Begrifflichkeiten halten. In Fig.9 (S.13) sind die Signale sogar 
bildlich dargestellt und die Bits genau bezeichnet.
https://www.nxp.com/docs/en/user-guide/UM10204.pdf

Notfalls hilft ein kleiner Logikanalysator, der einem die Signale auf 
dem Bus darstellt und dekodiert, so dass man sofort sieht, was dort 
gesendet wird und ob das Ack vom Slave kommt - ganz unabhängig von 
möglicherweise irreführenden Interfacebeschreibungen irgendwelcher Libs 
oder deren Fehlinterpretation.

: Bearbeitet durch User
von Crazy Harry (crazy_h)


Lesenswert?

Sebastian R. schrieb:
> Dein Beitrag enthält keine einzige Frage.

Doch nur kein Fragezeichen .... hier ein paar zum selber setzen: 
????????

von Jack V. (jackv)


Lesenswert?

Karl B. schrieb:
> Man wird nicht umhin kommen, die Libraries ausführlich zu
> Hilfe zu nehmen.

So machen es in der Tat die allermeisten Leute. Und wenn du nun noch 
verraten hättest, welche μC-Plattform du nutzt, hätte dir auch jemand 
die ebenfalls ungestellte, aber vermutlich vorhandene Frage beantworten 
können, welche man da am besten nimmt, und wie man sie nutzt.

von Joachim B. (jar)


Lesenswert?

Rainer W. schrieb:
> Joachim B. schrieb:
>> das ist das größte "Problem" bei verschiedenen LIBs erst Recht wenn man
>> mischt!
>
> Elementare Bitoperationen als Hexerei zu bezeichnen, hört sich etwas
> befremdlich an.

das habe ich nicht geschrieben, und warum zitierst du micht?

Tatsache bleibt, viele Arduinos LIBs zählen I²C bis 127, R/W Bit 
ausgeblendet und wer sich ans Datenblatt hält der berücksichtigt selber 
das R/W Bit und kann auf die Nase fallen so wie ich am Anfang, denn in 
Datenblätter steht nichts von Arduino, oft nicht mal was von extendet 
I²C
https://rn-wissen.de/wiki/index.php?title=I2C#10-Bit-Adressierung

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


Lesenswert?

Joachim B. schrieb:
> Tatsache bleibt, viele Arduinos LIBs zählen I²C bis 127,

Nicht eher alle?
Da die meist zu Grunde liegende Wire das eben auch so tut.

Und laut dem NPX Dokument ist die Sichtweise auch voll ok so.
7 Adressbit und ein R/W Bit.
Das R/W Bit liegt im gleichen Byte, aber heißt nicht, dass es ein 
Adressbit ist.

von Nemopuk (nemopuk)


Lesenswert?

Joachim B. schrieb:
> denn in Datenblätter steht nichts von Arduino

??????

Arduino macht es richtig, entsprechend der I2C Spezifikation. Verwirrung 
stiften nur die Leute, die aus der 7 Bit Adresse ein verschobenes Byte 
machen.

Dass man auf der Schnittstelle die Adresse zusammen dem R/W Flag 
kombiniert ist klar. Diese Kombo soll man aber niemals Adresse nennen. 
Du kannst es gerne "erstes Byte" nennen.

von Jens B. (dasjens)


Lesenswert?

Sebastian R. schrieb:
> Karl B. schrieb:
>> Mehr wollte ich nicht wissen.
>
> Dein Beitrag enthält keine einzige Frage.

Na dann passt doch alles.

von Harald K. (kirnbichler)


Lesenswert?

Nemopuk schrieb:
> Verwirrung stiften nur die Leute, die aus der 7 Bit Adresse
> ein verschobenes Byte machen.

Hatten wir das nicht kürzlich erst?

Beitrag "Re: I2CLCD Library für HD44780 LCDs"

von Joachim B. (jar)


Lesenswert?

Arduino F. schrieb:
> Joachim B. schrieb:
>> Tatsache bleibt, viele Arduinos LIBs zählen I²C bis 127,
>
> Nicht eher alle?
> Da die meist zu Grunde liegende Wire das eben auch so tut.

OK, du weißt ja da besser bescheid und hast mir auch schon helfen 
können, ich wollte mich mangels Wissen in ALLEN LIBs nicht zu weit 
vorwagen.

von Rainer W. (rawi)


Lesenswert?

Joachim B. schrieb:
> das habe ich nicht geschrieben, und warum zitierst du micht?

"Elementare Bitoperationen ..." ist auch kein Zitat von dir, sonst wäre 
es als Zitat gekennzeichnet gewesen.

> Tatsache bleibt, viele Arduinos LIBs zählen I²C bis 127, R/W Bit
> ausgeblendet ...

I²C Adresse bis 127 entspricht der I²C-Spezifikation. NXP (damals noch 
Philips) hat das 1982 mit Einführung des Bus so festgelegt. Da ist kein 
Bit ausgeblendet. Um 10-Bit Adressen geht es hier gerade nicht. Die sind 
zwar auch spezifiziert, spielen für den Display Controller des TO aber 
keine Rolle.

: Bearbeitet durch User
von Jack V. (jackv)


Lesenswert?

Nix für ungut, aber ich glaube, die Adresse hatte der TE schon, weswegen 
ihn der Diskussionszweig dazu vermutlich nicht weiterbringt.

„Rumgehexe“ hätte ich im gegebenen Kontext auch eher als mehr oder 
weniger gelungenes Wortspiel „Dec → Hex“ interpretiert, also auch nicht 
unbedingt etwas, das noch weiterer Diskussion bedürft hätte.

von Rainer W. (rawi)


Lesenswert?

Jack V. schrieb:
> „Rumgehexe“ hätte ich im gegebenen Kontext auch eher als mehr oder
> weniger gelungenes Wortspiel „Dec → Hex“ interpretiert, ...

Bestimmt nicht, 0x78 = 0x3C shl 1. Mit dezimal ist da nichts im Spiel.

: Bearbeitet durch User
von Jack V. (jackv)


Lesenswert?

Zumindest scheint er sein Display ansprechen zu können, weswegen ich 
mich ein wenig nach dem Sinn der Diskussion zu den Adressen gefragt 
hatte.

von Andreas S. (bastelmax)


Lesenswert?

Da gibt es doch im Web für Arduino Bastler unzählige Beispiele.
Auf die schnelle diesen Link gefunden :
https://wiki.seeedstudio.com/Grove-OLED-Display-0.96-SSD1315/
Ich würde generell bei einen unbekannten Display bzw. I2C Device
mit einen I2C Scanner zuerst die Adresse ermitteln und dann
weitere Versuche unternehmen - so stellst Du auch die Funktionsfähigkeit 
Deines Aufbaues sicher.
Und noch etwas : ein OLED ist nicht mit einen HD44780 Display
vergleichbar (auch anders herum nicht).
Manche sind damit gescheitert ein angeblich HD44780 kompatibles
OLED plug & play gegen ein LCD Display auszutauschen.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Jack V. schrieb:
> Nix für ungut, aber ich glaube, die Adresse hatte der TE schon, weswegen
> ihn der Diskussionszweig dazu vermutlich nicht weiterbringt.

Mir ging es darum, ob bereits ein Charakter ROM vorhanden ist, das 
einfach mit ASCII angesprochen werde kann. Oder nicht. Neben der 
pixelweisen Ansteuerung à la "User definded Characters".
Und, ob eine Initialisierungsroutine nötig ist.

Hatte die Werte oben aus einem Youtube Video.
(Das ist aber so unnötig kompliziert aufgebaut, dass einem nach 30 
Minuten mühsamem Zuschauens die Lust vergeht.)
Hatte noch festgestellt, dass Anschlüsse für SCL und SDA Pin auf dem 
Display selbst verdreht sind gegenüber dem PCF8574A-Portadapter.
(Zur Not kann man ja den Stecker testweise umdrehen.)

Dachte am Anfang, könnte einfach das vorhandene Programm ein wenig 
abändern. (Programm 1 im Anhang.)

Also einfach alles Unnötige rausremmen und dafür:
ldi temp, 0x8D ....etc
twiout...
reinsetzen. (Wie oben bereits gepostet)

OK. Man sieht schon einmal etwas.
Aber jetzt müsste noch mehr an Programmcode kommen.
Bzw. Initialisierung.
Das war noch die nächste Frage.

Und ja, die zahllosen Arduinolibraries hatte ich schon entdeckt.
Wollte es aber lieber ein wenig simpler haben. So, dass ich es nicht nur 
blind ohne Sinn und Verstand abkopiere, sondern auch ein Lerneffekt 
entsteht.
Danke schon einmal für Eure zahlreichen Antworten.

ciao
gustav

von Joachim B. (jar)


Lesenswert?

Karl B. schrieb:
> Mir ging es darum, ob bereits ein Charakter ROM vorhanden ist

offensichtlich ja nicht, das wurde beantwortet mit dem Datenblatt.

von Andreas S. (bastelmax)


Lesenswert?

Karl B. schrieb:
> nd ja, die zahllosen Arduinolibraries hatte ich schon entdeckt.
> Wollte es aber lieber ein wenig simpler haben.

Als Anfänger nimm lieber die Librarys - ein OLED ist komplizierter als
ein Standard HD44780 LCD zum laufen zu bringen.
Das erkennst Du schon an den umfangreicheren DB gegenüber den LCD.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Aber Pixeltexte selber schreiben, etc. das wird umfangreicher.
Ich versuche, mit dem Target Attiny4313 etwas Vernünftiges 
hinzubekommen.
Die empfohlenen Libraries sind ja auf die ATIMEGAs fixiert. Das wird so 
nichts mit copy and paste.
Aber für ganz primitive Darstellung müsste es auch mit dem Attiny 
klappen.
Der SSD1315 braucht nebenbei bemerkt auch Zeitschleifen zwischen den 
Kommandos.
Die Umschaltung von Kommando auf Daten (hex00 auf hex40) scheint so eine
Sache, die momentan nicht auf Anhieb geklappt hat.
Und Pins SDA und SCL auch sind nicht vertauscht. Das stimmt schon 
einmal.
Werde weiter berichten.

bis dann

ciao
gustav

von Joachim B. (jar)


Lesenswert?

Karl B. schrieb:
> Aber Pixeltexte selber schreiben, etc. das wird umfangreicher.

du könntest ja auch die LIB für Pixeltext kompilieren und zulinken, so 
kompliziert ist das nicht, richtigen Prozessoer ausgewählt 
vorausgesetzt.

von Harald K. (kirnbichler)


Lesenswert?

Andreas S. schrieb:
> Als Anfänger nimm lieber die Librarys - ein OLED ist komplizierter als
> ein Standard HD44780 LCD zum laufen zu bringen.

Der essentielle Unterschied ist nicht OLED gegenüber LCD, sondern 
Graphikdisplay gegenüber Textdisplay.

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

So, jetzt habe ich mich einmal hingesetzt (und wieder einmal viel zu 
viel Zeit vertan für Dinge die nicht für mch sind, nur weil ich diesen 
Thread gelesen habe).

Zum einen bin ich erstaunt: Karl B. ist seit 2008 dabei, hat über 8000 
Threads geschrieben und es gibt Probleme mit SSD1315 und I2C und 
scheinbar Displays allgemein.

Dann hab ich die Postings gelesen und es wird sich über I2C ausgelassen 
und darüber ob eine 7 Bit Adresse plus r/w Bit korrekt ist, oder ob es 
eine 8 Bit Adresse gibt. Was grundsätzlich eine Frage des I2C und nicht 
des Displays ist.

Wie andere hier schon angemerkt haben, fasse ich mal kurz die Infos 
zusammen, die für Karl dann wichtig sind:

- ein Display mit SSD1315 Display ist ein graphisches Display, es hat 
keinen eingebauten Zeichensatz, der einfach abgerufen werden kann
- ein Display mit SSD1306 Controller ist sehr ähnlich und unterscheidet 
sich relativ wenig vom 1315, der 1315 ist gewissermaßen ein Upgrade auf 
einen SSD1306. Die Initialisierungssequenz der beiden unterscheidet sich 
etwas und, nimmt an ein 128x64 Pixel großes Display an, dann läuft ein 
und der selbe Code auf beiden Displays
- ein Standard-Display mit HD44780 Controller ist ein reines Textdisplay 
welches die Bitmaps der Ascii-Zeichen im HD44780 mit abgelegt hat, 
weshalb diese einfach so abrufbar sind. Grundsätzlich hat dieses Display 
entweder eine 4-Bit oder eine 8-Bit parallele Datenkommunikation. Wenn 
ein solches Display über I2C angesprochen wird, hat es einen I2C I/O 
Expander (i.a.R einen PCF8574), der diese auf eine parallel 
Kommunikation umsetzt.
- für das OLED-Display muß also zwingend ein Array her, dass die Bitmaps 
des Fonts, mit dem auf das Display geschrieben werden soll beinhaltet.
- will man bspw. den Asciisatz der Zeichen 32 (Leerzeichen) bis 127 min. 
darstellen können, benötigt es bei einem 8x8 Pixel Font 96 Zeichen zu je 
8 Byte = 768 Byte Speicherbedarf. Möchte man das auf einem ATtiny2313 
machen, der nur 2048 Byte hat, wird das sehr schnell sehr knapp.

Da Karl B. ursprünglich nicht den Controller genannt hat, den er 
verwenden möchte, habe ich mal aus meinen Sourcen das extrahiert, was 
benötigt wird, um auf einem solchen Display einen Text ausgeben zu 
können.

Damit mein Demo-Programm auf so ziemlich jeder Mikrocontrollerplattform 
laufen soll, habe ich bewußt auf ein Hardware I2C-Verzichtet und dieses 
mittels Bitbanging realisiert.

Im Demo kann jetzt unterschieden werden, ob das Programm auf einem 
AVR-Controller, einem STM8-Controller oder einem anderen laufen soll 
(Präprozessor Defines). Bei mir habe ich diese Datei temporär so 
erweitert, dass ich meine Sourcen für Systeminitialisierung und 
GPIO-Behandlung eingebunden habe (die auf meiner Platte liegen) und so 
lief ein OLED-Display auch auf einem CH32V003, einem STM32F030  F103  
F411.

Hier jedoch nur die Datei, bei der AVR und STM8 eingebunden sind. Bei 
Verwendung für AVR ATmega328 und AVR-GCC als Compiler, hat das erzeugte 
Kompilat bei mir eine Dateigröße von 1396 Byte. Ram-Bedarf zeigt es mir 
an 12 Bytes, wobei der tatsächliche Bedarf minimal höher sein dürfte, 
weil Ram-Belegung innerhalb Funktionen nicht einbezogen werden. 
Grundsätzlich sollte es hier tatsächlich möglich sein, das OLED 
tatsächlich an einem ATtiny2313 zu betreiben, wobei dann für das 
tatsächliche Anwenderprogramm nicht mehr viel übrig bleibt.

Der größte Teil in der Source meines Demos nimmt die Unterscheidung der 
Controller ein.

Für die, die das tatsächlich auf einem STM8 laufen lassen möchten: der 
verwendete Compiler ist natürlich SDCC.

Sollte Bedarf daran bestehen, aufzuzeigen wie das an CH32V003 (mit 
Framework CH32fun) oder mit einem STM32 aussieht (hier dann libopencm3, 
keine HAL und kein CubeMx), dann kann ich da hier gerne auch posten, 
allerdings bin ich der Überzeugung, dass man sich mittel Copy and Paste 
aus diesem Demo schnell etwas lauffähiges zusammenklicken kann.

Viele Grüße,
Ralph

PS: die angehängte Datei stm8s.h ist etwas selbst zusammen getragenes 
und wurde von mir aus den Datenblätter erstellt und ist unvollständig, 
sie war für meine Programme ausreichend und wurde, wenn etwas gefehlt 
hatte das meine Programme benötigt haben, erweitert. Sie ist also nichts 
offizielles aus irgendeiner wie auch immer gearteten Quelle

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Der essentielle Unterschied ist nicht OLED gegenüber LCD, sondern
> Graphikdisplay gegenüber Textdisplay.

... du hast es auf den Punkt gebracht und in deiner Aussage deutlich 
prägnanter als ich (und warst schneller im Posten als ich).

Ich habe auch zuviel Zeit für das Demoprogramm benötigt (hrmpf... knapp 
über 2 Stunden sind es dann geworden)

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> ... du hast es auf den Punkt gebracht

Naja, das hab' ich etwas ausführlicher schon in der zweiten Antwort in 
diesem Thread hier geschrieben.

Beitrag #8015449 wurde vom Autor gelöscht.
von Joachim B. (jar)


Lesenswert?

Ralph S. schrieb:
> So, jetzt habe ich mich einmal hingesetzt

schick, nur warum Platz verschwenden?
Ich finde 5x7 charsets (6x8 mit Pixelzwischenraum) sparsamer und nutze 
ich gerne beim Nokia Display.

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

... so, aus lauter "Jux und Dollerei" habe ich in meinem Sammelsurium 
nachgesehen, ob ich richtig liege und es dort noch ein paar ATtiny2313 
gibt und tatsächlich habe ich noch eine halbe Stange der Chips gefunden.

Früher waren die mal sehr günstig, deshalb hatte ich damit hantiert 
(grundsätzlich ist es etwas her dass ich überhaupt etwas mit AVR gemacht 
habe).

Dann habe ich im Netz nachgesehen, was denn heute ein ATtiny2313 kostet 
und mir verwundert die Augen gerieben: zwischen 2,00€ und 4,50€ ist da 
alles dabei und für mich muß ich sagen, dass das für die 
Leistungsfähigkeit absolut heute nicht mehr zeitgemäß ist und bei 
neueren Entwicklungen doch der Chip zu wechseln ist, selbst ein 
mittlerweile STM8 ist hier preislich noch deutlich besser als 
ATtiny2313. Alternativen in einem 20 pol. Gehäuse wären hier, preislich 
aufsteigend: CH32V003, STM32F030, STM8S103, ATtiny1604 (AVR-series0)

Wie dem auch sei, der TO hatte  hier etwas von einem ATTiny2313 
geschrieben und ich wollte sehen, ob das OLED-Display auch an einem 
2313er funktioniert... und siehe da, es funktioniert.

Im  Anhang findet ihr den Code, ausschließlich für einen ATtiny2313, 
befreit von der Präprozessorsteuerung eines anderen Controllers und ich 
habe eine kleine Ausgabefunktion für Integerzahlen hinzugefügt.

Das ganze belegt 1624 Byte Flashspeicher.

Ein Makefile zum Übersetzen und Flashen des Controllers habe ich auch 
hinzugefügt, der ATtiny hat Fusesettings: LOW: 0xE4, HIGH: 0xDF, EXT.: 
0xFF. Dieses entspricht einem Takt von 8 MHz intern, der Chip benötigt 
also keinen externen Quarz.

Wer es brauchen kann: bitte bedienen!

Gruß,

Ralph

von Ralph S. (jjflash)


Lesenswert?

Joachim B. schrieb:
> schick, nur warum Platz verschwenden?
> Ich finde 5x7 charsets (6x8 mit Pixelzwischenraum) sparsamer und nutze
> ich gerne beim Nokia Display

Na ja, man kann den Font ja auch ersetzen und das putchar leicht 
anpassen. Nokia Displays (haben SPI-Interface) sind ja mittlerweile eher 
rar geworden und sind von der Anzeigefläche größer als das OLED-Display, 
bei weniger Pixeln.

Was beim Nokiadisplay mit 5x7 Font noch relativ gut zu lesen ist, ist 
beim OLED Display schon richtig richtig klein. Selbst der 8x8 Font ist 
noch klein. Da ich hier aber nicht den oft verwendeten Font nehme, 
sondern einen aus Anno dazumal extrahierten Font der CGA-Grafik eines 
Amstrad PC1512 ist der dennoch gut zu lesen.

5x7 will ich mir auf OLED nicht antun. Allerdings: tu dir keinen Zwang 
an!

von Maxim B. (max182)


Lesenswert?

1
#define sda_low()   { i2c_port &= ~(1<<sda_bit); i2c_ddr |= (1<<sda_bit); }
 wäre besser auf
1
#define sda_low()   do{ i2c_port &= ~(1<<sda_bit); i2c_ddr |= (1<<sda_bit); }while(0)
 zu ersetzen.
Noch besser wäre Port immer auf "0" zu lassen und Ganze nur mit DDR 
machen. Pullup von AVR braucht man kaum, I2C hat immer eigene.

von Joachim B. (jar)


Lesenswert?

Ralph S. schrieb:
> 5x7 will ich mir auf OLED nicht antun. Allerdings: tu dir keinen Zwang
> an!

der Vorteil vom Pixeldisplay ist auch das man frei Hochformat oder 
Querformat wählen kann.

Beim Nokia Charset habe ich mich vor 10 Jahren Byte für Byte durch die 
Sourcen "gekämpft" aber heute mag ich nicht mehr. Das Alter hinterläßt 
halt Spuren.

von Maxim B. (max182)


Lesenswert?

Joachim B. schrieb:
> der Vorteil vom Pixeldisplay ist auch das man frei Hochformat oder
> Querformat wählen kann.
Und auch daß man GLEICHZEITIG deutschen ÄÖÜäöüß und kyrillischen 
verwenden kann.

von Ralph S. (jjflash)


Lesenswert?

Maxim B. schrieb:
> #define sda_low()   do{ i2c_port &= ~(1<<sda_bit); i2c_ddr |=
> (1<<sda_bit); }while(0)

Das hatte ich zuvor sogar so gehabt, aber ohne das do-while funktioniert 
es eben auch und dann hat mir das optisch nicht so gut gefallen.

Der Compiler generiert für beide Versionen denselben Code.

Ich werde testen, ob es genügt, den Port ein einziges mal auf 0 zu 
setzen und dann so zu belassen und das Umschalten der Pins nur noch mit 
DDR zu realisieren.

Grundsätzlich war das hier sehr schnell realisiert.

von Maxim B. (max182)


Lesenswert?

Ralph S. schrieb:
> Ich werde testen, ob es genügt, den Port ein einziges mal auf 0 zu
> setzen und dann so zu belassen und das Umschalten der Pins nur noch mit
> DDR zu realisieren.

Ich habe vor kurzem eine fremde (chinesische) Bibliothek so geändert, wo 
direkt Port beschrieben wurde und ACK nur nachgebildet. Einfach "Port" 
auf "DDR" geändert und invertiert.

do{...}while(0) sind besonders bei verschachtelten #define sinnvoll - 
wenn man nicht lieber auf inline Funktionen setzt.

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

Den Versuch mit dem Setzen der Portpins einmalig auf 0 und umschalten 
nur über DDR habe ich gemacht und funktioniert:
1
#define i2c_setpins_low() { i2c_port &= ~(1<<sda_bit); i2c_port &= ~(1<<scl_bit); }
2
3
#define sda_high()  (i2c_ddr &= ~(1<<sda_bit))
4
#define sda_low()   (i2c_ddr |= (1<<sda_bit))
5
6
#define scl_high()  (i2c_ddr &= ~(1<<scl_bit))
7
#define scl_low()   (i2c_ddr |= (1<<scl_bit))
8
9
#define sda_read()  (i2c_pinr & (1<<sda_bit))

und in der main dann:
1
i2c_setpins_low();
2
oled_init();

Läuft genauso und spart zudem dann 8 Byte an Flashspeicher :-)
(ich bin ja sonst auch geizig mit Flashspeicherverbrauch, aber auf 8 
Byte habe ich dann doch nicht geschaut)

Allerdings werde ich mir das so merken und bei Bitbanging Sachen bei 
denen ein PullUp vorhanden ist, werde ich das - egal auf welcher 
Controllerfamilie - dann so handhaben.

Vielen Dank für den Tip (man lernt auch nach x-Jahren noch immer etwas 
dazu, was eigentlich relativ einfach ist. Man macht halt Dinge, die man 
immer so gemacht hat, und weil sie funktionieren überdenkt man das dann 
nicht mehr, sondern benutzt es einfach nur noch!

von Maxim B. (max182)


Lesenswert?

Ralph S. schrieb:
> Vielen Dank für den Tip

Gerne. Ich experimentiere jetzt mit STM32H723 und mit Arduino GIGA, aber 
auch ATMega1284P bleiben in Griff.

Macro für GIGA sehen ähnlich aus:
1
/* SET Pin */
2
#define SET_D_(port,pin)    (port->BSRR = (1UL<<pin))
3
#define SET_D(portpin)      SET_D_(portnummerzuportzeiger(STM_PORT(portpin)),STM_PIN(portpin))
4
5
/* RES Pin */
6
#define RES_D_(port,pin)    (port->BSRR = (1UL<<(pin+16)))
7
#define RES_D(portpin)      RES_D_(portnummerzuportzeiger(STM_PORT(portpin)),STM_PIN(portpin))
8
9
/* OUT Pin */
10
#define OUT_D(portpin,x)      do{if ((x&1)==0) RES_D(portpin); else SET_D(portpin);}while(0)
11
12
/* Pin Is Clear */
13
#define PIC_D_(port,pin)    (((port->IDR) & (1UL<<(pin))) == 0)
14
#define PIC_D(portpin)      PIC_D_(portnummerzuportzeiger(STM_PORT(portpin)),STM_PIN(portpin))
15
16
/* Pin Is Set */
17
#define PIS_D_(port,pin)    (((port->IDR) & (1UL<<(pin))) != 0)
18
#define PIS_D(portpin)      PIS_D_(portnummerzuportzeiger(STM_PORT(portpin)),STM_PIN(portpin))
19
20
/* Input Pin */
21
#define INPUT_D(portpin)          ((PIS_D(portpin)) ? 1 : 0 )
GIGA hat mich wegen TFT verführt. Aber vieles kann man nur mit selbst 
gebauten Funktionen und #define erreichen (so wie SPI2, 3 und 6). 
Glücklicherweise stört nichts, HAL und direkte Zugang zu Register auch 
aus Arduino zu nutzen.

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

Maxim B. schrieb:
> Gerne. Ich experimentiere jetzt mit STM32H723 und mit Arduino GIGA, aber
> auch ATMega1284P bleiben in Griff.

:-) das ganze auf einem Blackboard STM32H723VGT6 ?

Das evaluiere ich zur Zeit auch. Für 13 Euro ist das ein gigantisches 
Teil, allerdings hantiere ich dort mit libopencm3 ... und bin noch am 
schwer am "kämpfen". Grundsätzlich habe ich noch nicht wirklich eine 
Anwendung dafür, ein STM32F411 / F407 sind bisher absolut mehr als 
ausreichend für meine Dinge gewesen.

Mich reizt am H7 vordergründig der imensens Flashspeicher. Zudem, wenn 
ich das Datenblatt richtig lese, legt er nicht die üblichen Waitstates 
beim Flashspeicher lesenein (ich kann natürlich auch gründlich 
täuschen), was das ganze Kind extrem beschleunigen würde gegenüber einem 
F4.

Im Moment bastle ich auch an meiner Spielekonsole und lege dort im Flash 
meine Spiele ab, bisher habe ich hier 7 Spiele am laufen, die ich auch 
tatsächlich spiel (ich muß endlich mal ein PCB in sauber machen).

Auf einem H7 hätte ich Speicher ohne Ende und Grafiken wären extrem 
schnell berechnet.

Aber wie gesagt: dort bin ich noch sehr am evaluieren und ich bin erst 
einmal froh, dass ich UART und SPI hinbekomme, so dass ich dort ein 
SPI-TFT betreiben kann.

Für den TO hier bin ich am Überlegen, ob man nicht aus einem CH32V003 im 
I2C-Slave Mode betrieben, einen Textdisplayadapter mit einem 
OLED-Display machen kann.

Dann könnte man mit einem solchen SLAVE die Codes für ein HD44780 
interpretieren und das dann an ein OLED schicken. Nach außen würde es 
dann keinen Unterschied machen, ob ein ein HD44780 Textdisplay über 
einen I2C-Adapter (mit PCF8574) oder über einen CH32V003 I2C-Slave 
Adapter mit einem OLED betreibe. Das OLED wäre damit zu einem 
Textdisplay degradiert.

von Maxim B. (max182)


Angehängte Dateien:

Lesenswert?

Ralph S. schrieb:
> :-) das ganze auf einem Blackboard STM32H723VGT

Ich habe Board selber entworfen. Gerade aus China gekommen - um mit GIGA 
besser spielen zu können. Alles was ich brauche: MIDI-Buchsen (ich habe 
viele Musikinstrumente mit MIDI), zwei Poti mit Mitte-Null (z.B. um 
Tempo und Tonhöhe zu ändern, das wird bequemer als über Menu und Touch), 
Funkmodul (falls in Giga eingebautes Wifi zu kurzsichtig wird) und noch 
Kleinigkeiten. Giga wird TFT nach oben angeschlossen und alle Pins gut 
zugänglich.

Was Geschwindigkeit von Giga betrifft: ich habe Vergleich mit Arduino 
MEGA2560 und TFT 3,5'' über 8bit Parallelbus gemacht. Ein Zeichen auf 
dem Bildschirm macht Giga um 70x schneller.

Leider kann SD-Card nicht in 4bit-Modus angeschlossen werden: dafür 
notwendige Kontakte sind für externe Flash und SRAM verbraucht. Aber 
vielleicht kann man das tolerieren, da USB-Wechselspeicher möglich ist, 
anzuschließen. Ähnlich wie bei Arduino Mega2560 kann man USARTs nur als 
UARTs benutzen, ohne CLK. Dabei ist nur SPI5 auf äußere Pins geführt. 
Wertvollere (da 32 bit kann, und SPI5 nur 16 bit, kritisch bei 
NSS-Automatik: z.B. wenn 2x MAX7219 in Serie angeschlossen) SPI1 kann 
man über Pins in der Mitte haben. Beide sind mit Arduino-Funktionen 
zugänglich. Über Manipulationen mit Register kann man noch SPI2 und 3 
(auf Kosten von DAC) und SPI6 (ohne NSS) bekommen, aber Funktionen muß 
man dafür selber schreiben.

Ansonsten könnten viele fertigen LIBs viel Zeit sparen.

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

oha, da hast du eine schöne Platine zum experimentieren. Daumen nach 
oben,

Du hast also einen orginalen Giga-Arduino und betreibst das auch unter 
Arduino?

Ich habe nur ein China-Board und war interessiert, wie gut das Ding ist 
(Spieltrieb halt).

Mit Arduino hantiere ich immer nur allerhöchst sporadisch und das auch 
niemals für mich selbst. Im Moment etwas mehr, weil ich "Libraries" für 
den CH32V003 schreibe, da viele Arduino Programme (meistens sind die für 
AVR) darauf nicht laufen.

Mich würde nur mal kurz interessieren, wie viel Flashverbrauch der Giga 
für ein einfaches Blinkprogramm benötigt (obschon das fast schon egal 
ist, weil das Teil sowieso sehr sehr viel davon hat).

Viel Spaß beim Werkeln.

von Maxim B. (max182)


Lesenswert?

Ralph S. schrieb:
> Du hast also einen orginalen Giga-Arduino und betreibst das auch unter
> Arduino?

Jain. Teilweise mit Arduino, teilweise mit HAL.
Selbst könnte ich BGA kaum löten. Ich kann höchstens TQFP mit 0,5 mm 
Raster.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Ralph S. schrieb:
> Den Versuch mit dem Setzen der Portpins einmalig auf 0 und umschalten
> nur über DDR habe ich gemacht und funktioniert:
> ...
Das Entwicklungsrisiko dabei war quasi Null. Das ist die klassische 
Vorgehensweise, um einen Port mit Push-Pull Ausgang als Open-Drain zu 
nutzen. ;-)

: Bearbeitet durch User
von Karl B. (gustav)


Lesenswert?

Erstmal vielen Dank für die ausführlichen Antworten.
Die Fragen sind also beantwortet.
1. Kein Charakter-ROM, das mit ASCII Steuerwort angesprochen werden 
kann.
Das ist jetzt sonnenklar.
Dann Tabellen erstellen, die an "User defined Charakters" erinnern.
Es ging noch um die Frage, ob Verweis auf Tabelle genügt, oder beim 
"Schreibvorgang" pro Zeichen (Charakter) wirklich jedes Pixel einzeln 
angesprochen werden muss.
Also Spalte und Zeile. Punkt für Punkt.
Dafür ist mir die Angabe der Befehlsfolge extrem wichtig.
Genau  das , was @jjflash schrieb, suchte ich:
oled_cmd(0xae);  // display off
oled_cmd(0x20);  // set memory addressing mode
oled_cmd(0x00);  // horizontal addressing mode
etc...
Und:
Bitmap eines 8x8 Pixel Zeichensatzes

Nochmals danke dafür.
Jetzt geht es weiter.

Und, wie gesagt, wenn es dann über die Grundlagen hinausgeht, man ein 
Projekt ohne viel Hexerei realisieren möchte, sieht es so aus, dass man 
um
Installation der Arduino-IDE2.3.8, evtl. Arduino Nano o.ä. nicht 
herumkommt.

Bis bald,
und nochmals ein großes Dankeschön an alle, die sich die Mühe gemacht 
hatten, hier ausführlich zu antworten.

ciao
gustav

von Ralph S. (jjflash)


Lesenswert?

Karl B. schrieb:
> Und, wie gesagt, wenn es dann über die Grundlagen hinausgeht, man ein
> Projekt ohne viel Hexerei realisieren möchte, sieht es so aus, dass man
> um
> Installation der Arduino-IDE2.3.8, evtl. Arduino Nano o.ä. nicht
> herumkommt.

Natürlich kommt man da drum herum, das ganze was ich dir hier gepostet 
habe ist ohne Arduino gemacht. Alles mit Makefile, Text mit Texteditor 
(bspw. Geany o.ä.). Aufgesetzte Toolchain, Geany ruft Makefile auf !

von Karl B. (gustav)


Lesenswert?

Ralph S. schrieb:
> Natürlich kommt man da drum herum,

Ging dann um weitere Anwendungen, denn das Target Attiny wird dann doch 
wohl zu knapp bezüglich Speicherplatz etc.

ciao
gustav

von Ralph S. (jjflash)


Lesenswert?

Karl B. schrieb:
> Ging dann um weitere Anwendungen, denn das Target Attiny wird dann doch
> wohl zu knapp bezüglich Speicherplatz etc.

Was hättest du denn gerne für ein Target. Grundsätzlich auch: willst du 
das wirklich in Assembler machen ????

Alleine das Referenzieren der Bitmaptabele der Fonts und die spätere 
Ausgabe ist nicht wirklich lustig. C / C++ ist da schon sehr hilfreich, 
Arduino ist es eher weniger, weil der Overhead den Arduino da erzeugt 
(ich bin da gerade an einem anderen "Projekt" mit CH32V003) ist da schon 
enorm und frißt gut Speicher.

von Joachim B. (jar)


Lesenswert?

Maxim B. schrieb:
> Joachim B. schrieb:
>> der Vorteil vom Pixeldisplay ist auch das man frei Hochformat oder
>> Querformat wählen kann.
> Und auch daß man GLEICHZEITIG deutschen ÄÖÜäöüß und kyrillischen
> verwenden kann.

oder ein hochgesetztes ° für °C oder -> und <- und up/down Pfeile 
einsetzen kann, Pixeldisplays sind schon geil und die Methode es 
platzsparend im Flash statt im Ram unterzubringen ist auch geil, doof 
nur wenn Flash und RAM ausgehen (ATmega328*) deswegen mag ich den m128p

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

Joachim B. schrieb:
> doof
> nur wenn Flash und RAM ausgehen (ATmega328*) deswegen mag ich den m128p

Falls ich nicht zu viele Pins bei AVR brauche, nehme ich immer 
ATmega1284P. 128 k Flash, 16 k SRAM, JTAG möglich. Auch 0,8 mm Raster 
ist lötfreundlicher als 0,5 mm Raster von mega2560.

von Maxim B. (max182)


Lesenswert?

Ralph S. schrieb:
> Mich würde nur mal kurz interessieren, wie viel Flashverbrauch der Giga
> für ein einfaches Blinkprogramm benötigt (obschon das fast schon egal
> ist, weil das Teil sowieso sehr sehr viel davon hat).

Egal was ich mache, mindestens 111k Flash und 47k SRAM gleich weg.
"Sketch uses 111384 bytes (5%) of program storage space. Maximum is 
1966080 bytes.
Global variables use 47504 bytes (9%) of dynamic memory, leaving 476120 
bytes for local variables. Maximum is 523624 bytes."

Auch bei Arduino mit AVR ist das nicht viel anders: System braucht Init.

Andere Seite wäre interessant zu klären:
Mit AVR ist Arduino-Art, mit Pins zu hantieren, zeitaufwendig, das ist 
Preis für die Möglichkeit, Pins als Var zu geben. Deshalb wird die 
Arbeit mit Pins über direkte Port-Anweisungen (z.B. über Makro, 
Hauptsache alle Berechnungen schon von Compiler gemacht) deutlich 
schneller.
Ob das so mit Arduino mit STM32 bleibt, ist unklar: STM32 kommt auf 
Register sowieso über Zeiger, so ist CPU gemacht. Könnte sein, das 
"digitalWrite" fast genau so schnell gemacht wird wie auch GPIOA->ODR |= 
(1UL<<5) . Zwar wird bestimmt auch hier atomare Variante über BSRR etwas 
schneller. Auch habe ich nicht gefunden, wie man mit Arduino-Funktionen 
die Pins einstimmen kann: push-pull oder open-drain, Alternate function, 
speed - alles kann man direkt über Register machen.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Maxim B. schrieb:
> Auch habe ich nicht gefunden, wie man mit Arduino-Funktionen
> die Pins einstimmen kann: push-pull oder open-drain

Wie schnell hättest du es denn gerne und um welchen µC geht es?

von Nemopuk (nemopuk)


Lesenswert?

Maxim B. schrieb:
> Auch habe ich nicht gefunden, wie man mit Arduino-Funktionen
> die Pins einstimmen kann: push-pull oder open-drain, Alternate function,
> speed - alles kann man direkt über Register machen.

So geht das:
1
  pinMode(PB1, OUTPUT); // push-pull
2
  pinMode(PB1, OUTPUT_OPEN_DRAIN);

Es gibt keine Arduino Funktion, um die Alternate Funktion eines Pins 
einzustellen. Das ist Aufgabe der jeweiligen Library, in deinem Fall 
Wire:
1
#include "Wire.h"
2
3
void setup() {
4
  Wire.begin(PA8,PA9);
5
  Wire.setClock(100000);
6
}

Quelltext und Beispiele: 
https://github.com/stm32duino/Arduino_Core_STM32

Doku: https://github.com/stm32duino/Arduino_Core_STM32/wiki und 
https://docs.arduino.cc/language-reference/en/functions/communication/wire/

> alles kann man direkt über Register machen.

Nicht ganz: Du kannst die Interrupt-Handler des Cores nicht durch eigene 
ersetzen. Zum Beispiel den vom USB Interface.

: Bearbeitet durch User
Beitrag #8015936 wurde vom Autor gelöscht.
von Maxim B. (max182)


Angehängte Dateien:

Lesenswert?

Danke für Info!
Z.Z. löte ich die Platine für Giga. Bisher könnte ich nicht so viel mit
Giga machen, da mit TFT zusammen alles schwer zugänglich war. Und ohne
TFT sehe ich in Giga wenig Sinn.

Ich möchte nach Möglichkeit Funktionen von Arduino benutzen. Aber ich
möchte auch versuchen, SPI2, SPI3 und SPI6 zugänglich zu machen. Dafür
muß ich aber Alternate Funktionen umschalten. Aber Hauptgrund für Giga
ist Wunsch, fertige Libs zu nutzen, deshalb zu viel in dieser Richtung
plane ich nicht. Volle Freiheit werde ich auf einer anderen Platine
haben, mit H723, die auch schon bereit zum Löten ist. Dann natürlich
HAL. Und vielleicht auch einige Libs, die ich mit Giga erproben werde.
Auf der Platine mit H723 habe ich externe SRAM und FRAM über Octo-SPI
vorgesegen. Ob es damit wirklich gut klappt, bleibt noch eine Frage.

Mit Giga ist für mich noch interessant, ob ich den zweiten, F4-Kern
irgendwie sinnvoll verwenden kann.

von Nemopuk (nemopuk)


Lesenswert?

Nimm für die I2C Pull-Up Widerstände besser 2,2 kΩ. Deine geplanten 10 
kΩ sind für viele Fälle zu hochohmig. Es soll mindestens 1 mA fließen.

Das "Arduino Giga R1 Wifi" Board ist ja sau teuer!

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

Nemopuk schrieb:
> Das "Arduino Giga R1 Wifi" Board ist ja sau teuer!

Nur ca. dreimal teurer als "echte" Arduino Mega2560. Dafür (was TFT 
betrifft) ca. 70x schneller und mehr Speicher und viel anderes.

Nemopuk schrieb:
> Nimm für die I2C Pull-Up Widerstände besser 2,2 kΩ. Deine geplanten 10
> kΩ sind für viele Fälle zu hochohmig. Es soll mindestens 1 mA fließen.

Viele Module haben eigene I2C Pull-Up. Deshalb habe ich auch diese 10k 
über Lötbrücken angeschlossen. Über I2C4 geht schon sowieso RGB-LED auf 
der TFT-Platine, so gibt es dort schon diese Widerstände.

: Bearbeitet durch User
von Nemopuk (nemopuk)


Lesenswert?

Maxim B. schrieb:
> Nur ca. dreimal teurer als "echte" Arduino Mega2560

Die sind auch sau teuer. Die alten ATmegas sind leistungsmäßg und 
finanziell nicht mehr zeitgemäß.

Vergleiche mal damit:
https://de.aliexpress.com/w/wholesale-stm32h7-board.html
https://de.aliexpress.com/w/wholesale-esp32-module.html

> Viele Module haben eigene I2C Pull-Up

Ja, und die sind meistens ebenfalls zu hochohmig.

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

Nemopuk schrieb:
> Die sind auch sau teuer.

Kuck mal bei Mouser, was STM32H747 kostet. Alleine, ohne externe 
Speicher, ohne WIFI-Modul, ohne Platine... Giga kostet nur 1x Tanken, so 
ist das heute...

Ich habe bei Ebay H723-Module gekauft. Aber ohne Schaltplan kann ich 
damit wenig anfangen (Schaltplan habe ich leider nirgendwo gefunden). In 
jedem Fall ist das nur H723 + Quarz, + Möglichkeit 0,5 Pin-Raster nicht 
löten zu müssen, wer das nicht kann. Mehr ist das nicht.

Nemopuk schrieb:
> Die alten ATmegas sind leistungsmäßg und
> finanziell nicht mehr zeitgemäß.
Vor allem bin ich geärgert, daß die Entwickler alles Mögliche getan 
haben, damit man USART nicht in SPI-Mode benutzen kann. Keiner von vier! 
Aber das bleibt auch bei Giga so.

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

.... hm, irgendwie - like ever - driftet irgendwann jeder Thread zu 
einem anderen Thema ab, auch wenn ich das Thema relativ spannend finde.

Ich finde den Arduino Giga auch sau-teuer (und um ehrlich zu sein wußte 
ich gar nicht, dass es diesen gibt).

Ich habe ein Board, wo ein STM32H723 drauf ist, vllt. werde ich auch 
einmal ausprobieren, wie sich dieses unter der Arduino IDE verhält, aber 
grundsätzlich mag ich das mit der Arduino IDE eigentlich nicht machen.

Interessant wäre hier für mich, wie komplett ist ein offizieller Arduino 
Core ältumgesetzt.

Mein Spieltrieb kennt hier fast keine Grenzen, bspw. hatte ich mir einen 
Arduino Uno R4 besorgt (Reneasas Controller), nur um zu sehen, wie der 
Core sich verhält und um zu sehen, wie gut der ist... und nach 2 Stunden 
spielen liegt der jetzt in der Ecke und ist uninteressant für mich.

Arduino mache ich meisgtens nicht und als "normales" Controllerboard war 
hier jedes STM32F4 Board besser...

Aber wie gesagt: irgendwann driftet jeder Thread ab (und ich bin ja 
nicht ganz unschuldig) und hoffe, dass der TO seine Infos zu seinem 
Display bekommen hat. Allerdings hat er sich immer noch nicht geäußert 
gehabt dazu, auf welcher Platform nach einem Attiny2313 er das betreiben 
will.

:-) grundsätzlich schon ein krasser Unterschied: von einem Tiny2313 zu 
einem STM32H7 ... die sind ja fast gleich... sozusagen

von Maxim B. (max182)


Lesenswert?

Ralph S. schrieb:
> Arduino mache ich meisgtens nicht und als "normales" Controllerboard war
> hier jedes STM32F4 Board besser...

Wirklich etwas kann man erst mit einem eigenen Board machen. Einer 
braucht mehr ADC, anderem sind USARTs mit CLK lieber, ein Dritter kann 
ohne PSSI nicht leben... Und alles zusammen kaum möglich, auch wenn 
LQFP-208...

HAL für STM32 ist auch etwas wie Arduino, nur etwas komplizierter 
aufgebaut.

Gestern habe ich eine Mega falsch "verfüßt". Wie kann man schnell einen 
Takt machen? Mit einer Arduino-Nano habe ich das in ein paar Minuten 
gemacht.
1
void setup() {
2
  // put your setup code here, to run once:
3
  pinMode(9, OUTPUT);
4
}
5
6
void loop() {
7
  // put your main code here, to run repeatedly:
8
  while(1){
9
    PORTB |= (1<<1);
10
    asm volatile ("nop");
11
    asm volatile ("nop");
12
    asm volatile ("nop");
13
    asm volatile ("nop");
14
    asm volatile ("nop");
15
    asm volatile ("nop");
16
    PORTB &= ~(1<<1);
17
    asm volatile ("nop");
18
    asm volatile ("nop");
19
    asm volatile ("nop");
20
    asm volatile ("nop");
21
  }
22
}
Mit 16 MHz Quarz ist das genau 1 MHz.
Für so etwas ist Arduino ideal.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Nemopuk schrieb:
>> Viele Module haben eigene I2C Pull-Up
>
> Ja, und die sind meistens ebenfalls zu hochohmig.

Das kannst du so pauschal nicht sagen. Wenn da fünf Module auf dem Bus 
hängen, summiert sich das.
Es kommt darauf an, wie viele Module auf dem Bus hängen, wie hoch die 
kapazitive Last - hauptsächlich durch die Kabel - ist und mit welcher 
Geschwindigkeit der Bus arbeiten soll.

Die 10kΩ auf vielen Modulen sind ein fauler Kompromiss für 
DAU-Aufbauten, um das Gejammer über "mein I2C-Bus geht nicht" zu 
reduzieren. Bei ernsthaften Aufbauten sollte man wissen, was man tut und 
vielleicht auch einen Blick in I2C-Spezifikation und Application Notes 
werfen.

: Bearbeitet durch User
von Karl B. (gustav)


Lesenswert?

Ralph S. schrieb:
> und hoffe, dass der TO seine Infos zu seinem
> Display bekommen hat. Allerdings hat er sich immer noch nicht geäußert
> gehabt dazu, auf welcher Platform nach einem Attiny2313 er das betreiben
> will.

Ja, danke für die zahlreichen Infos.
Jetzt ist bei dem Versuch, den Compiler Win AVR-GCC zu Installieren, um 
mich ein bisschen mehr mit "C" und Derivaten zu befassen, eine 
Fehlermeldung aufgetaucht und Studio 4 stürzt regelmäßig ab.
Problemereignisame:  APPCRASH
Anwendungsname:  AVRStudio.exe
Anwendungsversion:  4.19.0.730
Anwendungszeitstempel:  4e569ce0
Fehlermodulname:  COMCTL32.dll

Bin erstmal raus hier, bis ich das "neue" Problem gefixt habe.
Mache dann evtl. einen neuen Thread auf.

Aber die Tips, auch mit STM32 zu arbeiten, sind bestimmt hilfreich für 
denjenigen, der bei der Suche auf diesen Thread hier stößt.
Die Sache ist doch recht komplex, und es gibt viele Leute, die gerne 
Ihre Erfahrungen mitteilen möchten, aber sich eventuell nicht trauten, 
direkt bei der Arduino-Forenseite zu fragen. Oder da nicht die passende 
Antwort fanden.

Nochmals vielen Dank für die zahlreichen Antworten.

ciao
gustav

von Maxim B. (max182)


Angehängte Dateien:

Lesenswert?

Karl B. schrieb:
> Jetzt ist bei dem Versuch, den Compiler Win AVR-GCC zu Installieren, um
> mich ein bisschen mehr mit "C" und Derivaten zu befassen, eine
> Fehlermeldung aufgetaucht und Studio 4 stürzt regelmäßig ab.
> Problemereignisame:  APPCRASH
> Anwendungsname:  AVRStudio.exe
> Anwendungsversion:  4.19.0.730
> Anwendungszeitstempel:  4e569ce0
> Fehlermodulname:  COMCTL32.dll

Dann vielleicht könnte dir auch helfen:
Beitrag "Avr Studio 4 und die neue AVR Toolchain - So funktionierts!"

Ich mache es mit AVRStudio 4.19 so:
avr-toolchain-installer-3.4.2.1573-win32.win32.x86.exe installieren 
(letzte Variante von toolchain mit Installer, setzt auch 
Ungebungsvariablen selber), danach 
avr8-gnu-toolchain-installer-3.6.0.1734 per Hand.
Ordner 4.7.2 für 5.4.0 gewechselt

D.h. Files mit gleichen Namen ersetzen, fehlende Ordner kopieren, und 
was alt ist so lassen.
Somit bekommt man u.a. die Möglichkeit, __Flash statt PROGMEM zu nutzen 
(das bringt viel höhere Flexibilität). Man kann so wohl auch spätere 
Toolchaine ausprobieren, ich habe das aber nicht gemacht. Hauptsache, 
nicht vergessen, bei einem neuen Projekt IMMER -gstrict-dwarf per Hand 
ergänzen: Project -> Configuration Options -> Custom Compilation Options 
-> [All files] -> Add. Sonst ist 4.19 bei Debug-Versuch gleich raus.

Um Problem mit USB-Treiber für Win11 zu vermeiden, benutze ich Atmel AVR 
JTAGICE mkII Debugger (China Clon natürlich) über externe USB/RS232 
Converter (mit FT232). Das ist langsamer als über USB direkt, dafür aber 
sichere Arbeit auch mit Win11 (und nicht nur bis zu erster automatischen 
Erneuerung von Windows, die nicht abschaltbar ist). Um flexibler zu 
arbeiten, habe ich eine Adapterplatine gemacht, wo man JTAG über 
verschiedene Badewannestecker und Stiftleisten bekommt, auch 1117 mit 
3,3-5 Volt Umschaltung ist da. Als praktisch hat sich Badewannestecker 
mit 2 mm Raster gezeigt: viel sparsamer mit Platz auf der Platine als 
mit 2,54 mm Raster.

Als Bonus von AVRStudio 4, diese Möglichkeit fehlt in späteren Studien: 
File c:\Program Files (x86)\Atmel4\AVR 
Tools\AvrStudio4\edit\AvrStudio_c.ini erlaubt selbst definierten 
Schlüsselworte mit Farbe hervorzuheben. Somit werden kleine 
Schreibfehler besser sichtbar. Als Beispiel lege ich hier von mir 
geänderten AvrStudio_c.ini bei. Dazu noch meindef.h, wo man die Wirkung 
sehen kann.

: Bearbeitet durch User
von Karl B. (gustav)


Lesenswert?

Ganz schönes "Brett". Muss erst einmal tief Luft holen.
Vorerst auf jeden Fall vielen Dank für ausführliche Tipps.

ciao
gustav

von Nemopuk (nemopuk)


Lesenswert?

Rainer W. schrieb:
> Das kannst du so pauschal nicht sagen. Wenn da fünf Module auf dem Bus
> hängen, summiert sich das.

Stimmt!

von Nemopuk (nemopuk)


Lesenswert?

Karl B. schrieb:
> Jetzt ist bei dem Versuch, den Compiler Win AVR-GCC zu Installieren, um
> mich ein bisschen mehr mit "C" und Derivaten zu befassen, eine
> Fehlermeldung aufgetaucht und Studio 4 stürzt regelmäßig ab.

Die Software ist zu alt bzw. passt nicht zusammen. Schau dir diese 
Übersicht an: https://stefanfrings.de/avr_ide/index.html

von Maxim B. (max182)


Lesenswert?

Nemopuk schrieb:
> Die Software ist zu alt

Quatsch. Was heißt "zu alt" ? Warum spiele ich Orgel aus dem 1842 und 
niemand sagt "zu Alt", und ein Programm aus dem 2011 schon "zu alt" ?
Mit vielen AVRs funktioniert das Programm gut, auch besser gemacht als 
späteren "Studios". Meine lieben ATmega1284 arbeiten mit dem Studio 4 
perfekt. Paßt auch für ATMega2560, ATmega328P und vieles andere. Zwar 
nicht mit AVR128DB64 u.Ä. (die übrigens statt gewöhnlichen 10 000 nur 
1000 cycles Flash halten). Wenn das wichtig, dann braucht man Studio 7. 
Ich habe beides auf dem Computer, auch verschiedene JTAG-Debugger dafür. 
Wenn möglich, wähle ich immer Studio 4.

von Rainer W. (rawi)


Lesenswert?

Nemopuk schrieb:
> Die Software ist zu alt bzw. passt nicht zusammen.

Maxim B. schrieb:
> Wenn möglich, wähle ich immer Studio 4.

Was denn nun und unter welchem Betriebssystem?

von Maxim B. (max182)


Lesenswert?

Rainer W. schrieb:
> unter welchem Betriebssystem?

Win11. JTAG über USB/RS232 Konverter, und ISP geht wunderschön auch 
direkt über USB: Waveshare AVR ISP Programmer mit berühmter CH340G aus 
China. Gerade habe ich damit die Fuse auf "Arduino die nicht gibt" mit 
ATmega1284P gestellt.

: Bearbeitet durch User
Beitrag #8016620 wurde vom Autor gelöscht.
von Harald K. (kirnbichler)


Lesenswert?

Man kann AVRs auch mit etwas reduziertem Altersstarrsinn mit der letzten 
Version des Microchip Studio programmieren.

Das ist die hier, Stand Juni 22:
https://ww1.microchip.com/downloads/aemDocuments/documents/DEV/ProductDocuments/SoftwareTools/as-installer-7.0.2594-full.exe

Das wird zwar auch seit einiger Zeit nicht weiterentwickelt, braucht 
aber noch nicht so viele Besuche im Sanitätshaus, um Inkontinenzeinlagen 
zu besorgen, wie es die völlig veraltete 4.x-Version nötig hat.

Und wenn man entweder zum richtigen Zeitpunkt gekauft hat oder etwas 
Aufwand* treibt, dann kann man Mplab Snap als kostengünstiges 
Programmier- und Debuginterface direkt via USB verwenden, statt mit 
Gehhilfen und Kompressionsstrümpfen zu hantieren.



*) Neuere Modelle werden mit unpassender Firmware vertrieben, die aber 
lässt sich durch eine ältere ersetzen:
Beitrag "Re: Ärgernis MPLAB Snap"

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Kurzes Update:
Ein Arduiono Nano spricht ein Oled Display richtig an, das andere nicht.
Gleiche Adresse. Aber Zeilen sind zu klein, und Rest unten nur 
"Rauschen".
Da muss ich mich noch reinarbeiten.(Richtige Bibliothek auswählen).
Dann das obige Programm über einen REV AVR Disassembler laufen lassen 
und habe festgestellt, dass da "mul" als Befehl auftaucht.
Den hat der Attiny4313 nicht oder muss evtl. durch ein Makro 
zusammengebastelt werden. Der Speicherplatz für das übungsmäßig 
ausprobierte Analogwandlerprogramm ist auch schon zu groß für den 
Attiny.

Also, wer's schnell haben möchte, dann auf zum Arduino. Und zum Fuses 
verstellen brauche ich einen zweiten, der dann auf den Namen 
"ArduinoISP" hört.
Wie gesagt, nur als kleines Update. Rest folgt irgendwann.

ciao
gustav

von Wastl (hartundweichware)


Lesenswert?

Karl B. schrieb:
> ciao
> gustav

UNd was soll die Text-Datei im Anhang?

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Wastl schrieb:
> UNd was soll die Text-Datei im Anhang?

Bei dem Originaldateinamenerweiterung *.ino wird direkt die Verknüpfung 
angestoßen. Das wollte ich vermeiden.
Hier noch das Bild vom Aufbau dazu.
Frage Richtige Dateieindung *.ccp, oder was schlagen die Experten vor.
Ohne, dass sich gleich das Programm öffnet. Gehe davon aus, dass nicht 
allerorten die IDE vorhanden ist.

ciao
gustav

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Karl B. schrieb:
> Bei dem Originaldateinamenerweiterung *.ino wird direkt die Verknüpfung
> angestoßen.

.... wenn man zu blöd ist, statt einfach anzuklicken den Rechtsklick
und "save as" anzuwenden ....

Karl B. schrieb:
> Frage Richtige Dateieindung *.ccp

Ganz einfach das was es ist, ich vermute mal eine *.ino Datei.
Die Leute, die sich fachlich damit auseinandersetzen wollen,
sind nicht so blöd einfach die die Verknüpfung anstossen zu
lassen. Nein, sie machen von vorne herein etwas Sinnvolles
damit. Sie denken sich etwas dabei und starten die für sie
geeignete Applikation, nicht die, die ein bevormundendes
Betriebssystem ihnen vorgibt.

von Harald K. (kirnbichler)


Angehängte Dateien:

Lesenswert?

Karl B. schrieb:
> Bei dem Originaldateinamenerweiterung *.ino wird direkt die Verknüpfung
> angestoßen. Das wollte ich vermeiden.

Wenn Du *.ino verwendest, können andere die foreneigene Dateianzeige mit 
Syntax-Highlighting verwenden.

Siehe Anhang, achte auf das, was im gelben Kästchen steht.

Deswegen: Kein Umbenennen.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Harald K. schrieb:
> Wenn Du *.ino verwendest, können andere die foreneigene Dateianzeige mit
> Syntax-Highlighting verwenden.

Das muss man jemanden sagen der seit dem Jahr 2008 hier
angemeldet ist? Ich kann's nicht glauben ..... da gehört schon
viel Ignoranz und Beratungsresistenz dazu das nicht zu wissen.

von Harald K. (kirnbichler)


Lesenswert?

Wastl schrieb:
> Das muss man jemanden sagen der seit dem Jahr 2008 hier
> angemeldet ist?

Scheint so. Das "Argument", die Datei umzubenennen, mag ich gar nicht 
erst kommentieren.

von Wastl (hartundweichware)


Lesenswert?

Harald K. schrieb:
> Altersstarrsinn

Ich zitiere hier mal nur den Ausdruck. Mag jeder selbst entscheiden
in welchen Kontext er das Wort sehen mag.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Die Arduino-Geschichte ist für mich - muss ich zugeben- Neuland.
Bevor hier wieder Kommentare kommen, dass nicht jeder jede Datei mit 
jeder x-beliebigen Verknüpfung öffnen kann, war es nur allzu logisch, 
das Wesentliche eines Programmes in Textform zu konvertieren. Abgesehen 
davon würde der Text mit Copy&Paste auch im "Sketch" laufen.
Über den Inhalt des Programms wurde nicht diskutiert. Schon einmal eine 
erfreulichere Situation.
Dann biete sich den Kritikastern eben als Haar in der Suppe an, den 
Dateinamen zu ändern.
Wie man Programme lesbar hier als Anhänge einfügt, weiß ich spätestens 
ab 2009. "Nachhilfeunterricht" in der Hinsicht ist zwar nett gemeint 
aber leider nicht nötig.
Offensichtlich wird jetzt nicht mehr über Arduino hergezogen, was das 
Zeug hält, nein, sogar die Dateiendung *.ino erregt keinerlei Missfallen 
mehr. Das war hier schon einmal ganz anders, soweit ich mich erinnern 
kann.
Aber da Programme in Assembler noch teilweise nicht ganz auf dem 
Müllplatz der Geschichte gelandet sind, hier noch ein Disassemblat 
obigen *.ino-Files (auszugsweise).
Was fehlt, sind die erleuchtenden Kommentare und die Trivialnamen der
Register. Die müsste man sich selbst anhand des Dablas des Targets 
heraussuchen. Übrigens, eventuell eine nette kleine Aufgabe für KI?

ciao
gustav

von Ralf X. (ralf0815)


Lesenswert?

Karl B. schrieb:
> Was fehlt, sind die erleuchtenden Kommentare und die Trivialnamen der
> Register. Die müsste man sich selbst anhand des Dablas des Targets
> heraussuchen. Übrigens, eventuell eine nette kleine Aufgabe für KI?

Es steht Dir als Alterstarsinniger frei, Deine Kommunikation mit der KI 
zu führen.

von Karl B. (gustav)


Lesenswert?

Ralf X. schrieb:
> Dir als Alterstarsinniger

Das ist eine Formulierung, zu der du als In-den-Mund-Nehmender und gegen 
andere Forenteilnehmer als Beleidigung-Verwendender auch stehen musst.

ciao
gustav

von Ralf X. (ralf0815)


Lesenswert?

Karl B. schrieb:
> Ralf X. schrieb:
>> Dir als Alterstarsinniger
>
> Das ist eine Formulierung, zu der du als In-den-Mund-Nehmender und gegen
> andere Forenteilnehmer als Beleidigung-Verwendender auch stehen musst.

Ich stehe mit der Aussage Dir ggü.
Fertig.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Sehr gut. Wenigstens verbal hat der Mann Mumm.
OK. Aber zurück zum Thema, wir wollen ja einen deeskalierenden Eindruck 
hinterlassen:
KI liefert mir die "Initialisierung" für den Mega328 ohne mit der Wimper 
zu zucken.
Gerade ausprobiert. Sieht nicht schlecht aus. Könnte eventuell sogar 
funktionieren.

ciao
gustav

von Harald K. (kirnbichler)


Lesenswert?

Karl B. schrieb:
> Beispiel_Code_KI_generiert.pdf

PDF?

Warum nicht *.docx? Oder *.mp3?

von Wastl (hartundweichware)


Lesenswert?

Harald K. schrieb:
> Warum nicht *.docx? Oder *.mp3?

Troll as troll can.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Aber nur die Initialisierung. Die Pixelansteuerung fehlt noch.
Mittlerweile Programmierkünste gediehen zu Voltmeter für zwei 
Spannungen.
In INO sieht das so aus. Viel Spaß weiterhin mit dem Arduino.

ciao
gustav

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Karl B. schrieb:

> Ging dann um weitere Anwendungen, denn das Target Attiny wird dann doch
> wohl zu knapp bezüglich Speicherplatz etc.

ATtiny ist nicht gleich ATtiny. Die gibt es bezüglich des verfügbaren 
Flash-Speichers in recht breiter Auswahl, so ca. von 0,5kB..8kB.

Der wichtigste Trick ist aber sicher die weise Beschränkung des 
Zeichensatzumfangs, sprich: Reduktion auf die tatsächlich in der 
Anwendung benötigten Zeichen. Diese Maßnahme ist sehr einfach umzusetzen 
und meist überaus wirksam.

Außerdem können auch Sachen zum Einsatz kommen wie etwa "kompaktierte" 
oder gar tatsächlich komprimierte Font-Daten. Das ist dann schon ein 
wenig schwieriger, aber es ermöglicht z.B. den ROM-Font eines HD44780 in 
den 2k Flash eines ATttiny2313 unterzubringen und dann trotzdem noch 
einiges an Flash für das Programm über zu haben.

von Johannes F. (jofe)


Lesenswert?

Ob S. schrieb:
> ATtiny ist nicht gleich ATtiny. Die gibt es bezüglich des verfügbaren
> Flash-Speichers in recht breiter Auswahl, so ca. von 0,5kB..8kB.

Mir erschließt sich nicht, warum man sich Mitte der 2020er-Jahre für 
derartige Dinge gerade einen Dinosaurier wie den 2313/4313 aussucht. Es 
gibt mittlerweile AVRs, die in sämtlichen Kriterien um ein Vielfaches 
besser ausgestattet und gleichzeitig auch noch wesentlich preisgünstiger 
sind. Viele davon sogar in DIP erhältlich (wenn man's denn unbedingt 
braucht). Das scheint sich nur noch nicht überall herumgesprochen zu 
haben.

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.