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
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.
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.
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
naja, das Makefile solltest du schon anpassen (ist auch erstmal das einzige). Da steht auch knapp drin wie es zu verwenden ist.
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 deine Datein aus github ins AVR studio übernommen. Ergab 310 Fehler. Mal schauen warum das so ist.
Beginne mit dem ersten Fehler und übersetze nach jeder Fehlerbehebung das Programm. Viele Fehler sind hier wahrscheinlich nur Folgefehler ;)
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.
Du verwendest dies
1 | #define F_I2C 400000UL // Frequenz Bus clock i2c
|
2 | #define PSC_I2C 1 // prescaler i2c
|
3 | #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?
Wenn du 100 kHz haben willst einfach die 400000UL gegen 100000UL austauschen, das wird bei 16 MHz Systemtakt genügen ;)
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.
Und? Funktioniert es nun bei dir, Robert? Oder hast du mit dem Display noch Probleme?
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
Anzeige Warnung: Warning case label value is less than minimum value for type
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, im Atmel Studio 7 stellst du die CPU-Frequenz für das aktuelle Projekt an der im Bild dargestellten Stelle ein. Reinhard
Es scheint grössere Unterschiede mit AVR Studio und deinem Programm zu geben. Mal sehen wie das so geht. Werde berichten. LG Robert
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 | int main(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 | return 0; |
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 ;)
:
Bearbeitet durch User
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.