Hallo, ich versuche ein 128*64 SSD1306 Distplay mit einem MSP430G2553 über Hardware I2C zum laufen zu bekommen. Leider bleibt das Display schwarz. Hat jemand einen Minimalcode (z.B. das Display leuchtet komplett auf)? Ist mein erster Versuch mit I2C und "aus dem Nichts" schaffe ich es nicht, weil ich nicht weiß wo der Fehler liegt.
Gast
#3960485
Hi Beitrag "Re: Sammelbestellung OLED 0.96 I2C für den ESP8266" schauh dir mal den beispiel code an, vieleicht hilft es weiter. lg rudi ;-) pullups nicht vergessen!
Gast
#3960711
Was sagt denn Tante Guschel? http://xdec.de/msp430-oled-display-ssd1306-128x64/ Für I2C und SPI gibt es Beispiele direkt von TI. Da werden zwei Launchpads verbunden. Du bekommst den Master und den Slave Code.
@rudi: Pullups! Sollte ich wohl mal probieren. @Ant: Dein Link ist für parallel ...
Gast
#3961450
Hol dir die Codes zu I2C von TI und Koppel zuerst zwei MSP. Wenn der BUS läuft, kannst du dich ums Display kümmern.
Da die I2C-Client-Seite für die Anwendung völlig uninteressant ist, ist das eine unnötige Baustelle. Einfacher ist es, ein I2C-EEPROM wie z.B. ein 24C02 anzusteuern. Das reicht, um die ersten Klippen bei der I2C-Programmierung auf dem MSP430 zu umschiffen.
Gast
#3962185
Rufus Τ. Firefly schrieb: > ist > das eine unnötige Baustelle Du bekommst lauffähigen und von Tausenden erfolgreich genutzten Code. Das ist keine Baustelle, sondern ein gutes und erprobtes Werkzeug. :-P Der Vorteil: Du kannst den Master und/oder den Slave debuggen. Luxus pur!
Ich versuche es jetzt Schritt für Schritt mit Breakpoints und Register lesen (z.B. Nack oder nicht). Versuche mich eng am Family User's Guide zu orientieren. Hier mein derzeitiger Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
Funktioniert soweit halbwegs. Die Adresse ist korrekt, bei falscher Adresse gibt es einen Nack. Mein Problem ist jetzt, dass laut Seite 471 UCB0TXIFG gesetzt werden müsste, das passiert allerdings nicht. Zu diesem Zeitpunkt (nach dem delay) wird SCL auf low gehalten, es liegt kein Nack vor und der entsprechende Interrupt ist enabled.
H. D. schrieb: > Versuche mich eng am Family User's Guide zu orientieren Und hast Du Dir auch mal die Codebeispiele von TI angesehen?
Wenn du mit Codebeispielen die Libary von TI meinst, ja. Damit hab ich irgendwann den Interrupt zum laufen bekommen. Leider scheint der Interrupt Flag nicht zu clearen, obwohl das im User's Guide steht.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
H. D. schrieb: > Wenn du mit Codebeispielen die Libary von TI meinst, ja. Nein, "die Libary von TI" meine ich nicht. Sondern die Sammlung von kleinen Programmen, die die verschiedenen Peripheriemodule ansteuern, und die es für die unterschiedlichen Familen der MSP430-Reihe gibt. Das hier sind die Codebeispiele für msp430x2xxx: http://www.ti.com/lit/zip/slac485 Hier (neben anderen) diese Beispiele
1 | |
2 | |
3 | |
Gast
#3965514
H. D. schrieb: > Leider scheint der > Interrupt Flag nicht zu clearen, obwohl das im User's Guide steht. Was steht im F U G und wie hast du das umgesetzt?
@Ant: Seite 470: Writing to the transmit data buffer clears UCBxTXIFG. Sollte also automatisch gehen. @Rufus: Danke, guck ich mir heute Abend mal an.
Gast
#3967052
Genau, writing to ... Also steht es nach jeder Übertragung sofort wieder an. Wo in deinem Programm erwartest du ein gelöschtes Flag?
Ant schrieb: > Genau, writing to ... > Also steht es nach jeder Übertragung sofort wieder an. Wo in deinem > Programm erwartest du ein gelöschtes Flag? Z.B. nach
1 | |
Da beschreibe ich ja UCB0TXBUF.
UCBxTXIFG sollte gesetzt sein, wenn der MSP430 ein neues Zeichen annehmen kann. Wenn er gerade mit Senden beschäftigt ist und kein neues Zeichen annimmt, ist es nicht gesetzt. Das lässt sich relativ einfach mittels Interrupt erschlagen. Wenn UCBxIE (und natürlich GIE) gesetzt sind, wird die ISR aufgerufen, wenn das nächste Zeichen gesendet werden kann. In der ISR holt man dann das nächste Zeichen aus dem Sendepuffer und schreibt es in UCBxTXBUF, fertig. Max
Gast
#3968588
H. D. schrieb: > Z.B. nach UCB0TXBUF = 0xAF; > > Da beschreibe ich ja UCB0TXBUF. Hast du danach einen Breakpoint gesetzt? Denn das Byte ist schnell gesendet und Flag schnell wieder gehisst. ;-)
Ja, für die Zeile und die Zeile danach mit einen delay cycle. Mit dem TI Beispielcode konnte ich jetzt zumindest irgendetwas anzeigen lassen, obwohl das noch totaler Quatsch ist. Mit Mülloutput kann man aber mehr anfangen als mit gar nichts ...
Ich hänge mal wieder. Zumindest bekomme ich das Display jetzt vernünftig initialisiert. Ohne die Zeile
1 | |
zeigt das Display den Inhalt des RAM an, mit der Zeile (es soll einfach nur nach einer Sekunde (siehe Delay) die Ausgabe invertiert werden) bleibt das Display von Anfang an schwarz. Hat jemand eine Idee warum?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
Gast
#3977457
H. D. schrieb: > _delay_cycles(8000000); Zeig doch einmal den Prototyp der Funktion. Steht in der .h Datei. Die Spielerei mit dem LPM wirkt sehr konfus. Versuch erst ohne auszukommen.
Ant schrieb: > H. D. schrieb: >> _delay_cycles(8000000); > > Zeig doch einmal den Prototyp der Funktion. Steht in der .h Datei. > > Die Spielerei mit dem LPM wirkt sehr konfus. Versuch erst ohne > auszukommen. Konnte ich nicht finden. http://www.ece.utep.edu/courses/web3376/Links_files/msp430g2553.h Die Funktion ist so immer schon vorhanden. Ich werd mal den LPM rauswerfen, aber ich denke nicht, dass das etwas bringt.
H. D. schrieb: > Konnte ich nicht finden. Du hast auf Deinem Computer einen Compiler installiert. Der kommt mit 'ner Latte von Headerdateien, und in denen musst Du suchen. Das Werkzeug der Wahl heißt grep oder findstr (letzteres unter Windows). In der einen controllerspezifischen Datei (die Du da als Link angegeben hast) steht das natürlich nicht drin. Ansonsten wird Dein Compiler über Dokumentation verfügen.
slau132j.pdf The __delay_cycle Intrinsic The __delay_cycles intrinsic inserts code to consume precisely the number of specified cycles with no side effects. The number of cycles delayed must be a compile-time constant.
Gast
#3977898
H. D. schrieb: > ich versuche ein 128*64 SSD1306 Distplay mit einem MSP430G2553 über > Hardware I2C zum laufen zu bekommen. Leider bleibt das Display schwarz. Hi jetzt hast mich neugierig gemacht. OT Frage: Welches Board verwendest Du? Ich hab auf die schnelle bei R das gefunden: Artikel-Nr.: TI EXP 430G2 und darin steht, "Die mitgelieferten MSP430G2553IN20 und MSP430G2452IN20 verfügen über vorinstallierte Beispielprogramme" Kann man sagen dass der verwendete von Dir der gleiche ist wie der erst genannte der mitgeliefert wird? Welches Display verwendest Du mit der SSD1306 Lib, denn es gab mal ein OLED Grafik Display das Probleme hatte mit der SSD1306 Lib und man musste einen Mod machen "Adafruit" ..ich hoffe ich finde den Link nochmal und werde ihn dann pushen. lg rudi ;-)
R. W. schrieb: > Kann man sagen dass der verwendete von Dir der gleiche ist wie der erst > genannte der mitgeliefert wird? Wenn er vom 'G2553 redet, dann wird das so sein. Die enthaltenen "Beispielprogramme" sind nicht relevant, die helfen nur beim allerersten Inbetriebnehmen des Launchpads, um zu erkennen, daß da etwas lebt (und die LEDs blinken lässt). Sobald man ein eigenes Programm in das Flash des Controllers geladen hat,ist das "Beispielprogramm" weg.
Gast
#3977914
Rufus Τ. Firefly schrieb: > R. W. schrieb: >> Kann man sagen dass der verwendete von Dir der gleiche ist wie der erst >> genannte der mitgeliefert wird? > > Wenn er vom 'G2553 redet, dann wird das so sein. Danke Rufus. "MSP430G2553IN20" kannst Du mir noch ergänzen was das IN20 bedeutet. Dies wird mein erster Kontakt mit TI ;-) daher. > Die enthaltenen > "Beispielprogramme" sind nicht relevant, die helfen nur beim allerersten > Inbetriebnehmen des Launchpads, um zu erkennen, daß da etwas lebt (und > die LEDs blinken lässt). > Sobald man ein eigenes Programm in das Flash des Controllers geladen > hat,ist das "Beispielprogramm" weg. Ok danke!. lg
R. W. schrieb: > kannst Du mir noch ergänzen was das IN20 bedeutet. Das ist die Gehäusebauform und steht in diesem Fall für 20poliges DIP-Gehäuse.
R. W. schrieb: > OT Frage: > Welches Board verwendest Du? > Ich hab auf die schnelle bei R das gefunden: > Artikel-Nr.: TI EXP 430G2 Genau dieses Board verwende ich als Programmer. Das Display ist dieses hier: http://www.ebay.de/itm/0-96-I2C-IIC-SPI-Serial-128X64-White-OLED-LCD-LED-Display-Module-for-Arduino-/281497952135?pt=LH_DefaultDomain_0&hash=item418a95df87 Ich verwende keine SSD1306 Lib. Ist ja auch keine eingebunden. Die von Adafruit hilft nicht, da sie nicht für I2C ist (siehe Display).
Gast
#3978259
Rufus Τ. Firefly schrieb: > .. Gehäusebauform ..20poliges DIP-Gehäuse. Danke Rufus! H. D. schrieb: >> Artikel-Nr.: TI EXP 430G2 > Genau dieses Board verwende ich als Programmer. Ok. Sieht gut aus - neugierig bin ich auch - bestellt ;-) > Das Display ist dieses hier: > http://www.ebay.de/itm/0-96-I2C-IIC-SPI-Serial-128X64-White-OLED-LCD-LED-Display-Module-for-Arduino-/281497952135?pt=LH_DefaultDomain_0&hash=item418a95df87 Okay - hab beide da - dann das linke - unterscheidet sich im Anschluss Header. > Ich verwende keine SSD1306 Lib. Ist ja auch keine eingebunden. Die von > Adafruit hilft nicht, da sie nicht für I2C ist (siehe Display). Okay - hinterfragt, woher nimmst du dann für INITIAL die Register Werte, also z.B. OLED an/aus, PAGE Auswahl, SCROLLING, Grösse der Schrift, Schrittweite...Buffer leeren, Zeichensatz, RAM, Landscape Mode, Portrait Mode, ... Example'S zum LY096BG30 als I²C OLED ist nur als Info - ist jetzt nicht explizit für das hiesige OLED mit nur einer Schnittstelle - aber ist SSD1306 conform - .
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
Beispiel für das OLED mit I²C unter Verwendung der Register Wo soll der Buchstabe hin? X pos und y Pos. usw. Auf welcher Register Grundlage steuerst du das OLED an? 0xAE = Display off 0xAF = Display on
1 | |
2 | |
3 | |
Was ist <Mod> für RegisterWert? Woher nimmst du die?
1 | |
2 | |
3 | |
Welche Fontfarbe ist bei dir Standard, weiss auf schwarz oder blau auf schwarz? Oder ist es zweifarbig, TITEL Bereich ORANGE, Hauptteil blau. Es kann sein, dass INVERT DISPLAY bei manchen nicht unterstützt wird wenn keine Farbe ( Vordergrund / FONT , Hintergrund / FONT ) gesetzt wurde, ( wenn es sich setzen lässt ) vermutlich daher das schwarze Bild nach dem delay, bin mir aber nicht ganz so sicher, hatte das so noch nicht und kann es auf die schnelle nicht 'nachbauen'. Welche FOND Datei? Hast Du Register Werte? passend zum Display? ;-)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
lg rudi ;-)
Beim MSP430 immer die Errata's lesen und deine Chip Revision dabei beachten. Die Beispielcodes sind manchmal auch buggy ! Aber ich glaube es gibt eine Lib von Ti die funktioniert. cheers
Gast
#3978576
H. D. schrieb: > slau132j.pdf > > The __delay_cycle Intrinsic > The __delay_cycles intrinsic inserts code to consume precisely the > number of specified cycles with no side effects. The number of cycles > delayed must be a compile-time constant. Das hilft hier nicht. Dein Programm wird ohne den Prototyp vom Compiler nicht übersetzt. Wirf einen Blick auf deinen eigenen Code: Du bindest die msp430io.h ein und nicht den 2553 Header. Vielleicht steht ja darin der Prototyp? ;-) ;-) ;-) Warum Frage ich denn danach? 8000000 ist eine sehr große Zahl. Passt die zum Wertebereich des Parameters? :-*
Ant schrieb: > H. D. schrieb: >> slau132j.pdf >> >> The __delay_cycle Intrinsic >> The __delay_cycles intrinsic inserts code to consume precisely the >> number of specified cycles with no side effects. The number of cycles >> delayed must be a compile-time constant. > > Das hilft hier nicht. Dein Programm wird ohne den Prototyp vom Compiler > nicht übersetzt. > > Wirf einen Blick auf deinen eigenen Code: Du bindest die msp430io.h ein > und nicht den 2553 Header. Vielleicht steht ja darin der Prototyp? ;-) > ;-) ;-) > > Warum Frage ich denn danach? > 8000000 ist eine sehr große Zahl. Passt die zum Wertebereich des > Parameters? :-* <msp430.h> verweist einfach nur auf 2553 Header. Ist völlig egal welchen von beiden ich hinschreibe. 8000000 ist auch kein Problem. Glaub mir, an dem Delay selbst liegt es nicht. R. W. schrieb: > Okay - hinterfragt, woher nimmst du dann für INITIAL die Register Werte, > also z.B. OLED an/aus, PAGE Auswahl, SCROLLING, Grösse der Schrift, > Schrittweite...Buffer leeren, Zeichensatz, RAM, Landscape Mode, Portrait > Mode, ... Die Werte für das Initialisieren habe ich aus dem Datasheet bzw. habe ich mir Anregungen aus dem Netz geholt. Schriftgröße, Scrolling, Schrittwerte, Buffer leeren, Zeichensatz, etc. hab ich noch nicht. Im Code steht noch kein Wort von RAM beschreiben oder so. Ich brauche doch erst einmal eine vernünftige Kommunikation zum Display. R. W. schrieb: > Auf welcher Register Grundlage steuerst du das OLED an? Wie Meinst du das? Na auf Grundlage von Init[], da steht doch alles drin und entspricht auch deinem Beispiel in etwa. R. W. schrieb: > Was ist <Mod> für RegisterWert? > Woher nimmst du die? Ist doch oben definiert. Inhalt: Display aus, Display invertieren, Display an. R. W. schrieb: > Welche Fontfarbe ist bei dir Standard, weiss auf schwarz > oder blau auf schwarz? Oder ist es zweifarbig, TITEL Bereich ORANGE, > Hauptteil blau. > Es kann sein, dass INVERT DISPLAY bei manchen nicht unterstützt wird > wenn keine Farbe ( Vordergrund / FONT , Hintergrund / FONT ) gesetzt > wurde, ( wenn es sich setzen lässt ) vermutlich daher das schwarze Bild > nach dem delay, bin mir aber nicht ganz so sicher, hatte das so noch > nicht und kann es auf die schnelle nicht 'nachbauen'. Steht aber im Datasheet. Funktioniert auch, wenn ich es in Init[] setze. R. W. schrieb: > Welche FOND Datei? > Hast Du Register Werte? passend zum Display? ;-) Noch gar keine, es geht bisher doch nur um die Ansteuerung! Das Problem liegt in der Kommunikation über I2C!
Gast
#3979220
H. D. schrieb: > Im > Code steht noch kein Wort von RAM beschreiben oder so. Ich brauche doch > erst einmal eine vernünftige Kommunikation zum Display. > > R. W. schrieb: >> Auf welcher Register Grundlage steuerst du das OLED an? > > Wie Meinst du das? Na auf Grundlage von Init[], da steht doch alles drin > und entspricht auch deinem Beispiel in etwa. Ja ok - wollte hinterfragen ob es eine header datei bei dir gibt dafür ok.. > > R. W. schrieb: >> Was ist <Mod> für RegisterWert? >> Woher nimmst du die? > > Ist doch oben definiert. Inhalt: Display aus, Display invertieren, > Display an. ops -. das ist mir entgangen, ok:
1 | |
> > Steht aber im Datasheet. Funktioniert auch, wenn ich es in Init[] setze. > > R. W. schrieb: >> Welche FOND Datei? >> Hast Du Register Werte? passend zum Display? ;-) > > Noch gar keine, es geht bisher doch nur um die Ansteuerung! Das Problem > liegt in der Kommunikation über I2C! ok was mir noch einfällt: du sagst, dass das Display soweit initialisert wird und wenn du die zeile
1 | |
weglässt auch den Inhalt des RAM angezeigt bekommst; wenn du die Zeile hinzufügst, dann bleibt das Display schwarz. versuch mal ein delay auch beim invertieren und gib dem OLED bissal Zeit, ich hab bei mir 1ms drin :
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
was machst du da alles: eine passende header wäre halt hilfreich hab zwar mal angefangen es zu zerpflücken, sieht aus, als wäre da ein kleiner versatz drin.. bitte prüfe das noch mal nach:
1 | |
..
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
lg rudi ;-)
Hallo Rudi, wofür denn nun eine Headerdatei? Oben ist der Standard-MSP430-Kram eingehängt. Zu finden hier: https://github.com/martinbonnin/teaaa-timer/blob/master/msp430g2553.h Ansonsten gibt es in dem Projekt noch nichts. R. W. schrieb: > versuch mal ein delay auch beim invertieren und gib dem OLED bissal > Zeit, ich hab bei mir 1ms drin Da ist doch bei mir auch schon 1 Sekunde zwischen. Das muss doch locker reichen. Danach gibt es eine unendliche while-Schleife. Der Init-Kram steht im Datasheet: http://www.adafruit.com/datasheets/SSD1306.pdf Kapitel 9. Seite 28-32
Gast
#3979884
H. D. schrieb: > Hallo Rudi, > wofür denn nun eine Headerdatei? wegen der besseren Übersicht welche Register mit welchen Werten versehen werden müssen, Das ist zwar:
1 | |
sehr schön aber letztendlich kann man die Daten nicht nachvollziehen ( siehe oben zerpflücken ) da siehst halt dann ob was nicht passt, kürzen kannst immer noch. >> versuch mal ein delay auch beim invertieren und gib dem OLED bissal >> Zeit, ich hab bei mir 1ms drin > > Da ist doch bei mir auch schon 1 Sekunde zwischen. Das muss doch locker > reichen. Danach gibt es eine unendliche while-Schleife. ich lese das aber anders:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Ich kann mich auch irren aber denke dass das I²C OLED beim MSP430 nicht anders anzusteurn sein wird wie bei anderen, ( ESP8266 z.B. ) Siehe Bild. > > Der Init-Kram steht im Datasheet: > http://www.adafruit.com/datasheets/SSD1306.pdf > > Kapitel 9. Seite 28-32 OK, das hab ich auch, aber bei der INIT sind Register und Werte gemoppelt, das meinte ich mit Versatz. Ich würde ein Register nach dem anderen bewusst durchgehen ( nicht nur aus dem Datenblatt notieren ) ob du das auch so setzten willst, also auseinandersetzen was welches Register für Aufgabe hat und welche Werte es überhaupt braucht. Denn ich denke nicht dass das OLED COntrast unterstützt, du setzt es aber ;-) - kann mich irren, wenn Du ein besonderes Exemplar hättest. Bei mir blieb es am Anfang auch dunkel, nachem ich nach dem Einschalten dem ganzen 1 sekunde zeit gab sich überhaupt "hochzufahren" starte ich mit Init und wieder eine pause von 20ms und dann erst Daten. Wenn du jetzt eine header hättest wo steht
1 | |
2 | |
3 | |
4 | |
könntest es einfach deaktiveren, so musst halt deine INIT immer editieren, und da kann mal ein Fehler passieren.. Nein ich werd dir keine fertige ´Konfig abliefern ;-) das Datenblatt gehört Dir ganz alleine in diesem Fall ;-).. lg rudi ;-)
Hier die Init mit Erklärungen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
R. W. schrieb: > versuch mal ein delay auch beim invertieren und gib dem OLED bissal > Zeit, ich hab bei mir 1ms drin : > > printC(Init,31); > _delay_cycles(8000000); > > printC(Mod,3); > _delay_cycles(8000000); > > while(1); Keine Wirkung. R. W. schrieb: > // und jetzt springt es gleich wieder nach dem Invert Comando > // zur Init wie willst du das sehen/wahrnehmen können? Nee, er hängt sich in die Endlose While-Schleife ... R. W. schrieb: > Denn ich denke nicht dass das OLED COntrast > unterstützt, du setzt es aber ;-) Habe ich ausprobiert mit einem niedrigeren Wert. Man sieht einen Unterschied. Ich werde aber mal gucken, was ich kürzen kann.
Derzeitiger Stand:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
Display zeigt, was es nach dem Init zeigen sollte. Leider hängt es beim 2. Anlauf (Mod) vor der ersten Bufferfüllen. Scheint mir so als würde die erste Übertragung vom MSP430 nicht korrekt beendet, sodass er nicht richtig die nächste startet.
Die Lösung ist hier zu finden: http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/398390
Gast
#4019325
hallo! ich habe mir das Display ebenfalls zugelegt zugelegt und bin jetzt auf der Suche nach Dokumentationen auf dieses recht frische Thema gestoßen. Dabei hat mir R.W.s initialisierungsfunktion enorm geholfen... R. W. schrieb: > void Initial_LY096BG30() > { [...] ... und ich bin neugierig, woher die Informationen sind, die zur Erstellung dieser Funktion benötigt werden. Ich habe ein Datenblatt gefunden, weclehs ich für passend halte (http://www.upgradeindustries.com/media/ebay/Photos/OLED/datasheet.pdf) und dessen Inhalt sich im Beispielcode wieder findet. Allerdings bin ich grade nicht in der Lage, darin weitere Informationen für meine eigene Library zu finden/erkennen.
Gast
#4019367
Ant schrieb: > H. D. schrieb: > _delay_cycles(8000000); > > Zeig doch einmal den Prototyp der Funktion. Steht in der .h Datei. > > Die Spielerei mit dem LPM wirkt sehr konfus. Versuch erst ohne > auszukommen. H. D. schrieb: > Die Lösung ist hier zu finden: > http://e2e.ti.com/support/microcontrollers/msp430/... Tja, den Hinweis gab es bereits ganz am Anfang. :'(
Ant schrieb: > Ant schrieb: >> H. D. schrieb: >> _delay_cycles(8000000); >> >> Zeig doch einmal den Prototyp der Funktion. Steht in der .h Datei. >> >> Die Spielerei mit dem LPM wirkt sehr konfus. Versuch erst ohne >> auszukommen. > > H. D. schrieb: >> Die Lösung ist hier zu finden: >> http://e2e.ti.com/support/microcontrollers/msp430/... > > Tja, den Hinweis gab es bereits ganz am Anfang. :'( Vom LPM abstand zu nehemen, aber nicht wie es mit LPM geht! DemoniacMilk schrieb: > ... und ich bin neugierig, woher die Informationen sind, die zur > Erstellung dieser Funktion benötigt werden. Ich habe ein Datenblatt > gefunden, weclehs ich für passend halte > (http://www.upgradeindustries.com/media/ebay/Photos/OLED/datasheet.pdf) > und dessen Inhalt sich im Beispielcode wieder findet. Allerdings bin ich > grade nicht in der Lage, darin weitere Informationen für meine eigene > Library zu finden/erkennen. In Kapitel 9 stehen die relevanten Intormationen. Was bekommst du denn zur Zeit schon angezeigt?
Gast
#4019780
H. D. schrieb: > In Kapitel 9 stehen die relevanten Intormationen. Was bekommst du denn > zur Zeit schon angezeigt? Bisher nur zufälligen pixelbrei oder alles weiß, je nachdem ob ich den RAM Inhalt nutze oder ignoriere. Im Datenblatt konnte ich zwar die befehle/Einstellungen finden, aber weiß nicht welche Option wo hin (also in welche Register etc hab keine Register map gesehen). Ich werde mir mal Kapitel neun angucken und dann mitteilen was ich finden konnte, bin grade aber noch unterwegs
Gast
#4019810
Ich kann zwar im moment nichts testen, aber sehe grade im Datenblatt dass bspw der Kontrast eine der wenigen Anweisungen mit zwei byte sendevolumen ist. Daraus würde ich jetzt schließen, dass ich gar nicht direkt in Register schreibe sondern alles über Kommandos mache. Einstellungen ur den RAM hab ich einige gesehen, allerdings war mir grade beim Überfliegen nicht aufgefallen wie ich Daten in den RAM des displays bekomme.
Gast
#4019950
Command Mode So the Command Mode data format will be: Slave Address -> GOFi2cOLED_Command_Mode( 0x80) -> Command/Command sets. Data Mode And the Data Mode data format will be: Slave Address -> GOFi2cOLED_Data_Mode( 0x40) -> Data byte/bytes. - von http://www.geekonfire.com/wiki/index.php?title=I2C_OLED_Panel(128x64) Ich denke das beantwortet meine Frage, sobald ich testen konnte melde ich mich noch mal.
Gast
#4036581
Ich will über einen USB to I2C/SPI Wandler aus VB.Net das Teil ansteuern! Auch mit den C- Pro 32 möchte ich es versuchen,solche Dinger liegen noch rum. Ein einfacher Basisdialekt ist das Beste. Habe ja auch Andere 128/65 zum Leben erweckt.
peter schrieb: > Ich will über einen USB to I2C/SPI Wandler aus VB.Net das Teil > ansteuern! Das hat nichts mit dem Thema des Threads zu tun. Wenn Du eine konkrete Frage zum Thema Zusammenspiel MSP430 mit SSD1306 und I2C hast, pack die hierhin. Wenn Du eine andere Frage hast: Mach 'nen Thread dafür auf (sofern nicht ein halbwegs aktueller Thread zur Frage passt).
Auf Wunsch von bernd_d56 hier der derzeitige (etwas eingeschlafene) Stand. Ich hoffe es funktioniert in diesem Zustand, wenn nicht, bitte noch einmal melden! Konnte es spontan nicht noch einmal testen.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.

