mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SSD1306 mit I²C zeigt nur Rauschen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Richi D. (richi-d)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen, bevor mich das Thema noch 2 Tage kostet:
ich verwende eine PIC und will ein 64x48 Display mit SSD1306 controller 
zum laufen bringen- mit I²C.
Das Problem ist, das Display nimmt die Commandos alle an. Ich kann es 
blinken lassen, ein/auschalten und noch ein paar Sachen.
Aber es nimmt keine Daten an- im Bild sind nur zufällige Pixel zu sehen, 
es ist zum verrückt werden...


void I2CSend (unsigned char dat)
  {
  SSP1BUF = dat;  // Move data to SSPBUF
  while (I2C1_BF);// wait till complete data is sent from buffer
  I2CIdle();  // wait for any pending transfer
  }

void Write_I2C_Data (unsigned char DATA)
  {
  I2CIdle();
  I2CStart();

  I2CSend(0x78);  // Adresse vom Display 7 Bit + WriteBit
  I2CSend(0x40);  //Daten
  I2CSend(DATA);

  I2CStop();
  __delay_us(10);
  }


Write_I2C_Commando(0xB0);
Write_I2C_Commando(0x10);
Write_I2C_Commando(0x05);
Write_I2C_Data(0xFF);

von Christian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ohne das Display zu kennen: Besitzt es womöglich verschiedene Pages.. 
Und Du schreibst auf eine andere Page als die aktuell angezeigte.. ?

Viele Grüße
Christian

von Richi D. (richi-d)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,

Das Display hat Pages von B0 bis B5. (48/8). Die habe ich schon alle 
probiert
Ich verwende den SSD1306 in ner anderen Anwendung mit Parallel- da geht 
alles einwandfrei, und ich glaube mich gut auszukennen mit dem 
Bildschirm.
Aber das I²C geht nicht um viel.
Wie gesagt- der Bus scheint in Ordnung, sonst könnte ich verschieden 
Commandos nicht ausführen.
Irgendwas fehlt noch...

: Bearbeitet durch User
von googy (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es ist ein shell Skript für den Raspberry aber der funktioniert. Da hast 
du schon mal die init Reihenfolge falls es daran liegt. Kann genauso 
auch auf C übertragen werden. Bei mir funktioniert dieser Code.
#init
i2cset -y 1 0x3c 0x00 0xAE  #Display OFF (sleep mode)
sleep 0.1
i2cset -y 1 0x3c 0x00 0xA8  #Set Multiplex Ratio
i2cset -y 1 0x3c 0x00 0x3F    #value
i2cset -y 1 0x3c 0x00 0xD3  #Set Display Offset
i2cset -y 1 0x3c 0x00 0x00    #no vertical shift
i2cset -y 1 0x3c 0x00 0x40  #Set Display Start Line to 000000b
i2cset -y 1 0x3c 0x00 0xA1  #Set Segment Re-map, column address 127 is mapped to SEG0
i2cset -y 1 0x3c 0x00 0xC8  #Set COM Output Scan Direction, remapped mode. Scan from COM7 to COM0
i2cset -y 1 0x3c 0x00 0xDA  #Set COM Pins Hardware Configuration
i2cset -y 1 0x3c 0x00 0x12    #Alternative COM pin configuration, Disable COM Left/Right remap
i2cset -y 1 0x3c 0x00 0x81  #Set Contrast Control
i2cset -y 1 0x3c 0x00 0xCF    #value, 0x7F max.
i2cset -y 1 0x3c 0x00 0xA4  #display RAM content
i2cset -y 1 0x3c 0x00 0xA6  #non-inverting display mode
i2cset -y 1 0x3c 0x00 0xD5  #Set Display Clock (Divide Ratio/Oscillator Frequency)
i2cset -y 1 0x3c 0x00 0x80    #max fequency, no divide ratio
i2cset -y 1 0x3c 0x00 0x8D  #Charge Pump Setting
i2cset -y 1 0x3c 0x00 0x14    #enable charge pump

#i2cset -y 1 0x3c 0x00 0x00
#i2cset -y 1 0x3c 0x00 0xD9  #Set Pre-charge Period
#i2cset -y 1 0x3c 0x00 0xF1    #value
#i2cset -y 1 0x3c 0x00 0xDB  #Set V COMH Deselect Level
#i2cset -y 1 0x3c 0x00 0x40    #???

i2cset -y 1 0x3c 0x00 0xAF  #Display ON (normal mode)
sleep 0.001

und dann noch clear, da kann man damit auch das Display beschreiben
bash init
#clear
#set cursor to 0 0
i2cset -y 1 0x3c 0x00 0x20
i2cset -y 1 0x3c 0x00 0x20

i2cset -y 1 0x3c 0x00 0x21
i2cset -y 1 0x3c 0x00 0x00
i2cset -y 1 0x3c 0x00 0x7F
i2cset -y 1 0x3c 0x00 0x22
i2cset -y 1 0x3c 0x00 0x00
i2cset -y 1 0x3c 0x00 0x07

for i in {1..128}
do
   i2cset -y 1 0x3c 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i
done

von Richi D. (richi-d)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für den Code- das ist bei mir alles richtig: wie gesagt, die 
Steuerung funktioniert ja... Bild ist auch da- undefiniert. Also Display 
ist an.

von Richi D. (richi-d)


Bewertung
0 lesenswert
nicht lesenswert
Kurzes Update: Es funktioniert jetzt! Ich hatte den Reset Pin nicht 
verwendet- dachte das geht auch ohne! Hab jetzt zwar ein 
Hardwareproblem, aber ok.k....
Seltsam dass sich alles steuern ließ, die Daten aber nicht angenommen 
werden.

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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