mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik OLED Display mit SSD1306


Autor: Robert (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo
versuche gerade ein OLED Dipslay mit einem SSD1306 über den I2C Bus in 
Betrieb zu nehmen. Tante google hat mir die Libs von .. gebracht. Steht 
sehr viel drin. Verstehe leider die Ansteurung nicht dazu. Sehr viele 
Programme wurden mir aufgelistet, leider für einen falschen Prozessor 
oder Raspery ...
Leider passt nichts auf mein Prozessor. Arbeite mit dem 1284 und in C.
Hätte jemand ein Beispiel für mich oder ein kleines Programm (um zu 
verstehen) das läuft?

LG Robert

Autor: Marc Horby (marchorby)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Robert schrieb:
> von .. gebracht

was soll ".." sein?

Poste Schaltplan, ein Foto vom Aufbau und deinen Code den du da 
geschrieben hast! Auch die vielen Libs von ".."!

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, mir war der Name entfallen. Soll M.Köhler heissen.
Schaltplan ist nicht so einfach. Besteht aus einem Atmega1284 mit 
Stromversorgung (SNT) mit Quarz und Kondensatoren, einem OLED Modul mit 
dem SSD1306, Stromvergung von 5V auf 3,3V, 2 Pegelwandler mit dem BSS138 
und Widerstände für den Bus. Der Atmega läuft mit andern Programmen und 
dem I2C Bus ohne Probleme. Konnte auch die Busadresse ermitteln. Leider 
aber keine Anzeige.

LG Robert

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du dir schon die Lib. von Herrn Krause angeschaut?
https://github.com/olikraus/u8g2/wiki/setup_tutorial

Läuft praktisch überall und kann sehr viele Controller ansprechen.

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch diese Tut hatte ich mir angesehen. Es geht aber fast alles azf SPI 
ein, erwähnt zwar den I2C Bus, konnte aber keine Beispiele finden.

Autor: G. H. (schufti)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich verstehe nicht, was es an der Lib inkl. Beispiel von M.Köhler 
nicht zu verstehen gibt.

https://github.com/Sylaina/oled-display

bringt sogar eigene i2c lib mit.

Autor: Harry L. (mysth)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Danke für die Antwort. Diesen Artikel habe ich als Grund verwendet. Mit 
einigen Sachen komme ich nicht klar. Bekomme z.B. eine Fehlermeldung, da 
er den 328 angegeben hat. Einges versuch ich noch zu klären.

LG Robert

Autor: G. H. (schufti)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, das Makefile solltest du schon anpassen (ist auch erstmal das 
einzige).

Da steht auch knapp drin wie es zu verwenden ist.

Autor: M. Köhler (sylaina)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In meine Lib muss man sich auch ein wenig einlesen. Natürlich muss man 
den Prozessor anpassen (siehe Makefile), hat man einen Atmega1284P muss 
man das natürlich entsprechend ändern, da ich primär den Atmega328P in 
Verwendung habe ist im Makefile natürlich auch der angegeben. Die 
Taktrate muss auch entsprechend eingestellt werden, ebenso müssen im 
Makefile die Fusebits entsprechend der zu verwendeten Taktquelle 
ausgewählt werden. Ich benutze inzwischen nur noch Baudratenquarze, 
entsprechend ist das Makefile auch eingestellt. Benutzt man keinen 
14,7456 MHz Quarz muss das im Makefile geändert werden. Benutzt man das 
Makefile nicht, z.B. weil die IDE entsprechende Einstellungen bietet 
(z.B. Atmel Studio oder Eclipse) dann muss man in diesen IDEs die 
Einstellungen entsprechend vornehmen sonst klappt es leider nicht.

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich arbeite mit dem AVR Studio 7 und 16 MHz. In deinem Artikel gibst du 
eine mein.c(h) an. Diese nutzt du zur Bekanntgabe einer Variablen. Damit 
ist aber kein main mit dem Hauptprogramm gemeint? Muss es also in eine 
Datei packen und mit einbauen. Kann man das nicht mit in die anderen 
Libs nehmen? Hast du noch ein Beispiel für das Hauptprogramm?

LG Robert

Autor: G. H. (schufti)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
also ich bezog mich auf die github Version. Da ist kein main.h und das 
main.c ist sozusagen das "Hauptprogram".

Ich denke dir fehlt generelle Erfahrung im Umgang mit C 
Entwicklungsumgebungen, nicht nur mit der Ansteuerung von OLED Displays.

Autor: Edgardo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
ARDUINO UNO und IDE !

Autor: Alex W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robert schrieb:
> versuche gerade ein OLED Dipslay mit einem SSD1306 über den I2C Bus in
> Betrieb zu nehmen.

Dann versuche doch bitte auch ein paar aussagekräftige Fotos von deinem 
Aufbau hier einzustellen incl. passender Beschreibung und die von dir 
verwendeten Sourcecodes! Ach, das hat ja schon jemand geschrieben...

Autor: M. Köhler (sylaina)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robert schrieb:
> In deinem Artikel gibst du
> eine mein.c(h) an.

Ah, du schaust also hier in Projekte und Code in meinen Thread da. Folge 
da am besten dem github-Link (der wurde auch hier in dieser Diskussion 
schon gepostet) und verwende diese Version da du da immer die aktuellste 
Version der Library finden wirst. Sieh dir da auch das Beispiel an, das 
zeigt, wie die Library verwendet wird

Autor: Robert (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Leider wird hier immer auf die Tatsache hingewiesen, das man erst ein 
C-Buch lesen soll. Das machen sich manche ganz schön leicht. Wenn ich 
Bilder zu meinem Projekt reinstelln soll, bist du auch nicht viel 
schlauer als vorher. Da die anderen teile ohne Probleme funktionieren 
ist es sinnlos zum 100 mal das gleiche Bild rein zustellen. Die Platine 
für das OLED besteht das OLED Modul mit 4 Anschlüssen (Vcc, GND, SCL, 
SDA) einer Steckverbinder zum Anschluss des Atmegas 1284, 2 Mosfet 
BSS138, ein paar Widerständen und ein paar Kondensatoren. Sorry, habe 
die Widerstände für den Bus vergessen.
Werde dem Link folgen. Mal sehen wie viele diesmal kommen.
LG Robert

Autor: M. Köhler (sylaina)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Nunja, bei vielen Fragen fragt sich der Leser heir aber schon, ob der 
Frager schon mal in ein C Buch geschaut hat. Das liegt in der Regel 
daran, dass die Fragen oft vermuten lassen, dass selbst einfachste C 
Grundlagen zu fehlen scheinen. Das ist aber nichts gegen dich.
Wie gesagt, wenn du bei meinem github zur OLED-Library vorbei schaust 
hilft dir das vielleicht schon weiter und wenn du dazu Fragen hast 
kannst du mich auch gerne hier oder bei github anschreiben, ich helfe 
dir gerne dabei.

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe gerade deine Datein aus github ins AVR studio übernommen. Ergab 310 
Fehler. Mal schauen warum das so ist.

Autor: M. Köhler (sylaina)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beginne mit dem ersten Fehler und übersetze nach jeder Fehlerbehebung 
das Programm. Viele Fehler sind hier wahrscheinlich nur Folgefehler ;)

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe gerade ein Grundlegenden Fehler gefunden. Bei der übertragung der 
Datein wurde teilweise die Befehle zur Seite genommen. Dadurch hatte der 
Code kaum Änlichkeit mit C. Habe alles neu eingespielt und kontrolliert. 
Sind jetzt noch 3 Errors und 24 Warnungen.

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du verwendest dies
#define F_I2C      400000UL     // Frequenz Bus clock i2c
#define PSC_I2C      1    // prescaler i2c
#define SET_TWBR    (F_CPU/F_I2C-16UL)/(PSC_I2C*2UL)
In der letzten Zeile berechnest du die Frequenz. Nach deinem Text so was 
bei 14,... MHz.
Arbeite mit einer festen Frequenz von 16MHz und 100kHz Bus. Frequenz 
einfach eingeben bzw. ändern?

Autor: M. Köhler (sylaina)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du 100 kHz haben willst einfach die 400000UL gegen 100000UL 
austauschen, das wird bei 16 MHz Systemtakt genügen ;)

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robert schrieb:
> #define SET_TWBR    (F_CPU/F_I2C-16UL)/(PSC_I2C*2UL)

Du hast angegeben, das du einen Baudraten Quarz benutzt. Wie kann ich 
16MHz einstellen?

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe noch mal die Fehler überprüft. Bekomme die folgenden Angaben:


Error  #error "TWBR out of range, change PSC_I2C or F_I2C !"
Error  'F_CPU' undeclared (first use in this function)

zu 1 TWBR ausserhalb, PSC_I2C oder F_I2C ändern
zu 2 F:CPU unklar

kannst du was damit anfangen?

LG Robert

Autor: M. Köhler (sylaina)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, damit kann ich was anfangen.

F_CPU: Das ist eine von mir definierte Präprozessor-Anweisung. Wie genau 
das Atmel-Studio den Systemtakt dem Compiler mitteilt weiß ich 
allerdings nicht da ich das Atmelstudio nicht verwende. Du kannst aber 
z.B. in der Header-Datei i2c.h direkt unter F_I2C noch das F_CPU 
einfügen, sollte dann so aussehen:
...
#define F_I2C 100000UL

#ifndef F_CPU
 #define F_CPU 16000000UL
#endif

#define PSC_I2C  1
#define SET_TWBR (F_CPU/F_I2C-16UL)/(PSC_I2C*2UL)
...

Der erste Fehler, der mit TWBR, ist lediglich ein Folgefehler weil F_CPU 
nicht definiert ist. Sobald F_CPU definiert ist sollte der TWBR-Fehler 
auch nicht mehr erscheinen.

Ich hab mal ein wenig geschaut: Beim Atmel Studio 7 gibt es wohl eine 
Menü, dass sich da nennt AVR/GNU C Compiler. Das hat anscheinend einen 
"Unterpunkt" Symbols und da musst du dann F_CPU = 16000000UL definieren. 
Dann ist F_CPU in deinem kompletten Projekt bekannt. Aber, wie schon 
gesagt, ich kenne mich im Atmel Studio 7 nicht aus, daher weiß ich nicht 
sicher, ob das das Problem löst. Mein obiger Vorschlag löst es auf jeden 
Fall

Noch ein Hinweis: Ich bin hier vorhin noch auf einen Bug in der Library 
aufmerksam gemacht worden, den ich grad behoben habe. Er trat nur auf 
mit einem SSD1306 Controller im Grafikmode. In der Funktion 
lcd_display() fehlte im Abschnitt für den SSD1306 Controller ein 
lcd_gotoxy(0,0);. Das habe ich grade nachgebessert.

Autor: M. Köhler (sylaina)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und? Funktioniert es nun bei dir, Robert? Oder hast du mit dem Display 
noch Probleme?

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
das Display geht jetzt. Habe einiges gefunden was zu Fehlern führte. Da 
ist die Angabe der Adresse. Auf der Rückseite sind die Adressen 
aufgedruckt. Adresse geändert und es geht. Dann gab es noch Probleme mit 
der Angabe der Quarzfrequenz. Konnte in deinen Datein nichts finden und 
habe einfach für die CPU 16Mhz angegeben. Es gab noch eine Reihe von 
Warnungen. Es wurde jetzt "Hello World und String from flash" 
ausgegeben. Es werden aber keine ä, ü, ö und andere Zusatzbuchstaben 
ausgegeben. Nach dem ich einmal ein ä und ö eingegebe habe kommen die 
Warnungen auch nicht mehr. Hast du eine Idee dazu?

LG Robert

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anzeige Warnung:

Warning    case label value is less than minimum value for type

Autor: M. Köhler (sylaina)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robert schrieb:
> Dann gab es noch Probleme mit
> der Angabe der Quarzfrequenz. Konnte in deinen Datein nichts finden und
> habe einfach für die CPU 16Mhz angegeben.

Das findest du bei mir im Makefile unter F_CPU. Das muss aber schon 
angegeben sein da es sonst zu einem Fehler führen würde.

Robert schrieb:
> Es werden aber keine ä, ü, ö und andere Zusatzbuchstaben
> ausgegeben. Nach dem ich einmal ein ä und ö eingegebe habe kommen die
> Warnungen auch nicht mehr. Hast du eine Idee dazu?

Dein Compiler muss die Quellcode-Dateien mit einem bestimmten Encoding 
öffnen, sonst werden die Umlaute (ä,ö,ü usw.) nicht richtig erkannt. In 
meinem Makefile dient dazu die Zeile

>>>CFLAGS += -finput-charset=utf-8 -fexec-charset=iso-8859-15

Da musst du bei deinem Compiler mal nach schaun wo man das bei dir 
einstellt.

Autor: Reinhard R. (reirawb)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Hallo,

im Atmel Studio 7 stellst du die CPU-Frequenz für das aktuelle Projekt
an der im Bild dargestellten Stelle ein.

Reinhard

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es scheint grössere Unterschiede mit AVR Studio und deinem Programm zu 
geben. Mal sehen wie das so geht. Werde berichten.

LG Robert

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Konnte das Programm soweit passend machen damit es an einem Atmega1284 
läuft. Hatte so um die 100 Fehler, jetzt bleiben noch ein Warnungen und 
Infos. Muss noch die Graphifunktionen testen und die entsprechenden 
Erklärungen dazu machen. Auch die öäü gehen jetzt

LG Robert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.