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
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 ".."!
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
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.
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
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.
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
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.
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...
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
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
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.
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.
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?
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?
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
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:
1
...
2
#define F_I2C 100000UL
3
4
#ifndef F_CPU
5
#define F_CPU 16000000UL
6
#endif
7
8
#define PSC_I2C 1
9
#define SET_TWBR (F_CPU/F_I2C-16UL)/(PSC_I2C*2UL)
10
...
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.
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
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.
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
Hey.
Hab hier mal ausführlich gesucht und mir auch die Sachen von sylaina
angeguckt. Aber bekomme das unter Atmel Studio7 nicht ans laufen. :(
Was C und Atmel Studio angeht, hab ich auch noch nicht wirklich den
Durchblick. Bin dabei, mich da einzuarbeiten. Die einen oder anderen
Programme bekomme ich ja hin und lerne immer mehr hinzu.
Nun wollte ich mich an ein Oled Display machen und komme nicht weiter.
Bekomme die .h und .c Sachen einfach nicht ins Studio.
Hab die Taktfrequenz eingestellt. Aber bekomme trotzdem bzw. deshalb
wieder Fehlermeldungen. :(
Im Netz hab ich auch nicht wirklich Hilfe gefunden. Da heißt es ja
immer: "Setz dich mit dem Compiler auseinander und lese ein Buch" ...
ähh ... das versuche ich gerade. Eine wirkliche Anleitung finde ich
nirgends. :(
Kann mir jemand helfen?
/*
* Atmel Mega 328 PWM mit OLED.c
*
#include <avr/io.h>
# include "oled-display-master/lcd.h"
int main(void)
{
lcd_init(LCD_DISP_ON);
//lcd_puts("Hello World");
while (1)
{
}
}
Severity Code Description Project File Line Column
Error =8000000UL: No such file or directory Atmel Mega 328 PWM mit
OLED avr-gcc.exe 0 0
Error =8000000UL: No such file or directory Atmel Mega 328 PWM mit
OLED avr-gcc.exe 0 0
Error =8000000UL: No such file or directory Atmel Mega 328 PWM mit
OLED avr-gcc.exe 0 0
Error recipe for target 'main.o' failed Atmel Mega 328 PWM mit OLED
C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM mit
OLED\Atmel Mega 328 PWM mit OLED\Debug\Makefile 103 1
Error recipe for target 'src/font.o' failed Atmel Mega 328 PWM mit
OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM mit
OLED\Atmel Mega 328 PWM mit OLED\Debug\Makefile 110 1
Error recipe for target 'src/i2c.o' failed Atmel Mega 328 PWM mit
OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM mit
OLED\Atmel Mega 328 PWM mit OLED\Debug\Makefile 117 1
Alfherman schrieb:> /*> * Atmel Mega 328 PWM mit OLED.c> *
Zuerst mal einen Kommentar richtig abschliessen. Wenigstens
das sollte man von dir erwarten können..
Uff Passe schrieb:> Zuerst mal einen Kommentar richtig abschliessen. Wenigstens> das sollte man von dir erwarten können..
Das geht auch freundlicher ;)
@ Alfherman: Versuch es mal mit diesem Code:
1
/*
2
* Atmel Mega 328 PWM mit OLED.c
3
*
4
*/
5
6
7
#include<avr/io.h>
8
# include "oled-display-master/lcd.h"
9
10
intmain(void)
11
{
12
lcd_init(LCD_DISP_ON);
13
lcd_puts("Hello World");
14
#if defined GRAPHICMODE
15
// erforderlich wenn in der Library der Grafikmodus
16
// aktiviert worden ist, sonst bleibts auf dem Display
17
// dunkel
18
display();
19
#endif
20
while(1)
21
{
22
}
23
return0;
24
}
Du hast auch den Displaytyp und die I2C-Adresse richtig eingestellt? Im
Github ist die Library auf ein SH1106-Display eingestellt mit
entsprechender Adresse, das musst du ändern wenn du ein SSD1306-Display
benutzt ;)
Uff Passe schrieb:> Alfherman schrieb:>> /*>> * Atmel Mega 328 PWM mit OLED.c>> *>> Zuerst mal einen Kommentar richtig abschliessen. Wenigstens> das sollte man von dir erwarten können..
Sorry ... hatte das in diesem Post rausgekürzt. Im Studio steht das
komplett und abgeschlossen.
Hallo M.K.
Hab deinen Code 1:1 im Studio eingefügt. Fehlermeldungen bleiben die
Gleichen. :(
Severity Code Description Project File Line Column
Error =8000000UL: No such file or directory Atmel Mega 328 PWM mit
OLED avr-gcc.exe 0 0
Error =8000000UL: No such file or directory Atmel Mega 328 PWM mit
OLED avr-gcc.exe 0 0
Error =8000000UL: No such file or directory Atmel Mega 328 PWM mit
OLED avr-gcc.exe 0 0
Error =8000000UL: No such file or directory Atmel Mega 328 PWM mit
OLED avr-gcc.exe 0 0
Error recipe for target 'main.o' failed Atmel Mega 328 PWM mit OLED
C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM mit
OLED\Atmel Mega 328 PWM mit OLED\Debug\Makefile 103 1
Error recipe for target 'src/font.o' failed Atmel Mega 328 PWM mit
OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM mit
OLED\Atmel Mega 328 PWM mit OLED\Debug\Makefile 110 1
Error recipe for target 'src/i2c.o' failed Atmel Mega 328 PWM mit
OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM mit
OLED\Atmel Mega 328 PWM mit OLED\Debug\Makefile 117 1
Error recipe for target 'src/lcd.o' failed Atmel Mega 328 PWM mit
OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM mit
OLED\Atmel Mega 328 PWM mit OLED\Debug\Makefile 124 1
Ich vermute, das liegt daran - das ich die .h und .c Dateien nicht
richtig ins Studio bekomme. Ich weiß aber auch leider nicht, wie ich das
machen kann. :(
Soo ... ein Fehler ist schon mal weg. :D :D
Severity Code Description Project File Line Column
Error =8000000UL: No such file or directory Atmel Mega 328 PWM mit
OLED avr-gcc.exe 0 0
Hatte in der "Symbols" Einstellung ein Leerzeichen zu viel!
Jetzt sieht die Fehlermeldung folgendermaßen aus:
Severity Code Description Project File Line Column
Error recipe for target 'src/lcd.o' failed Atmel Mega 328 PWM mit
OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM mit
OLED\Atmel Mega 328 PWM mit OLED\Debug\Makefile 124 1
Warning ignoring #pragma mark LCD [-Wunknown-pragmas] Atmel Mega 328
PWM mit OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM
mit OLED\Atmel Mega 328 PWM mit OLED\src\lcd.c 91 0
Warning ignoring #pragma mark [-Wunknown-pragmas] Atmel Mega 328
PWM mit OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM
mit OLED\Atmel Mega 328 PWM mit OLED\src\lcd.c 108 0
Warning ignoring #pragma mark GENERAL [-Wunknown-pragmas] Atmel Mega
328 PWM mit OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328
PWM mit OLED\Atmel Mega 328 PWM mit OLED\src\lcd.c 109 0
Error 'commandSequence' undeclared (first use in this function)
Atmel Mega 328 PWM mit OLED C:\Users\Alf\Documents\Atmel
Studio\7.0\Atmel Mega 328 PWM mit OLED\Atmel Mega 328 PWM mit
OLED\src\lcd.c 130 17
Alfherman schrieb:> Severity Code Description Project File Line Column> Error recipe for target 'src/lcd.o' failed Atmel Mega 328 PWM mit> OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM mit> OLED\Atmel Mega 328 PWM mit OLED\Debug\Makefile 124 1
Das bedeutet, dass noch irgend etwas an der Target-Einstellung nicht
stimmt. Mit dem Studio kenne ich mich aber nicht so gut aus, da weis ich
nicht wie man die Library dem Target hinzufügt.
Alfherman schrieb:> Warning ignoring #pragma mark LCD [-Wunknown-pragmas] Atmel Mega 328> PWM mit OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM> mit OLED\Atmel Mega 328 PWM mit OLED\src\lcd.c 91 0> Warning ignoring #pragma mark [-Wunknown-pragmas] Atmel Mega 328> PWM mit OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328 PWM> mit OLED\Atmel Mega 328 PWM mit OLED\src\lcd.c 108 0> Warning ignoring #pragma mark GENERAL [-Wunknown-pragmas] Atmel Mega> 328 PWM mit OLED C:\Users\Alf\Documents\Atmel Studio\7.0\Atmel Mega 328> PWM mit OLED\Atmel Mega 328 PWM mit OLED\src\lcd.c 109 0
Diese Warnings können ignoriert werden. Ich benutze die
Präprozessor-Anweisung
1
#pragma mark
zur Strukturierung in meiner IDE (Xcode), damit ich besser zu
ensprechenden Code-Teilen navigieren kann.
Alfherman schrieb:> Error 'commandSequence' undeclared (first use in this function)> Atmel Mega 328 PWM mit OLED C:\Users\Alf\Documents\Atmel> Studio\7.0\Atmel Mega 328 PWM mit OLED\Atmel Mega 328 PWM mit> OLED\src\lcd.c 130 17
Das ist sicher ein Folgefehler des ersten Fehlers da die Library nicht
richtig eingebunden worden ist im Studio. Wie gesagt, wie man das im
Studio genau macht weis ich leider nicht da ich das Studio nicht
benutze. Ich entwickle unter Mac OS bzw. unter einem Linux (Raspberry Pi
3)