SSD1306 (OLED) anschließen

LotadaC

Sehr aktives Mitglied
22. Jan. 2009
3.547
70
48
Marwitz
Sprachen
  1. BascomAVR
  2. Assembler
Hi,

ich wollte langsam anfangen, diese Displays in Betrieb zu nehmen.

Abgesehen von etwas Hühnerfutter zur Spannungsstabilisierung, Strom- und Frequenzeinstellung sowie für die interne Ladungspumpe benötigt das Display einen I²C mit max 3,3V, außerdem einen low-aktiven Reset (soll auch beim Powerup low sein). Die Spannung für die Ladungspumpe (Vbat) soll erst nach Vdd angelegt werden, und beim abschalten auch vorher getrennt werden.
Die Schaltung soll 5V-tolerant werden bzw an bestehende 5V-Schaltungen angeschlossen werden können.

Ich benötige also:
  • einen Linearregler (LDO)
  • für den I²C je einen Leveltranslator (bidirektional)
  • für /Reset einen unidirektionalen Pegelwandler
  • eine Möglichkeit, Vbat an-/abzuschalten
Bisher sieht mein Entwurf so aus - könnt Ihr mal was dazu sagen? Insbesondere zu den geplanten FETs und dem generellen Plan?
SSD1306.pngBenötige ich an den Gates von Q3 und Q4 Strombegrenzungswiderstände (R4, R8), oder kann ein AVR die direkt umladen? (/Reset sollte nicht sonderlich zeitkritisch sein, Vbat erst recht nicht).
@Dirk ?
 
Hallo
du treibst ja einen riesen Aufwand für das Teil. Wozu 4x BSS138 und Reset? Wozu die R und C am Display? Habe gerade vor ein paar Tagen so ein Fertig Display mit diesem Controller in Betrieb genommen. Gibt es ja als 0,96 Zoll und 1,2 Zoll. Hat auch eine Speisung von 5V und Regler auf 3,3V. Habe es in mein modulares System eingebaut. Das erste Programm geht auch schon, natürlich alles über den I2C Bus. Kann dir gern das Bild von der Platine schiecken. Leider ist das Tut dazu noch nicht fertig. Programm in C erstellt. Lass mich wissen was du brauchst.

achim
 
Wozu 4x BSS138 und Reset?
Es sind drei.
Die wandeln von 5V auf 3V3 Logik. Der SSD soll im aktiven Reset gestartet werden.
Wozu die R und C am Display?...
Der SSD benötigt für das Display selbst ca 7,5V, kannst Du extern auf Vcc klemmen. Er besitzt aber eine interne Ladungspumpe, die mit externen Kerkos arbeiten kann -> C3 und C4.
C5..C9 puffern die extern anliegenden/intern erzeugten Spannungen ab.
R6 soll den Segment-Strom auf 12.5µA einstellen.
Standardbeschaltung aus dem Datenblatt bei Verwendung der internen Ladungspumpe.
Habe gerade vor ein paar Tagen so ein Fertig Display mit diesem Controller in Betrieb genommen. Gibt es ja als 0,96 Zoll und 1,2 Zoll...
Es geht mir um die drei rechten... 0.69", 0.84" mit je 96x16 Pixeln, das größere ist ein 0.91" mit 128x32 Pixeln. Deine Displays werden sicher größer sein, insbesondere mit der Platine drunter.
Final soll die Platine nicht viel breiter als ein cm werden - zum Testen kommt diese Schaltung erstmal mit auf mein STK500-Expansion-Board mit drauf.
...natürlich alles über den I2C Bus...
Klar. Da hab ich feststellen müssen, daß der final geplante Tiny841 kein USI hat. Slave-TWI nutzt mir nichts, also muß ich mir'n Soft-Master-TWI stricken. Aber zum Testen tuts 'n Controller mit Hardware-Master-TWI.
(kenne keinen kleinen(!!) Controller mit HW-TWI (Master) und ADC mit Gain-Amplifier... nicht mal die neuen XTinies haben sowas geplant... leider)
Programm in C erstellt.
Wird bei mir logischerweise alles in Assembler werden..
 
(kenne keinen kleinen(!!) Controller mit HW-TWI (Master) und ADC mit Gain-Amplifier... nicht mal die neuen XTinies haben sowas geplant... leider)
Ist Dir der ATtiny214/414/814 zu groß?
26. TWI - Two Wire Interface
26.1 Features
Bus master and slave operation supported
– Slave operation
– Single bus master operation
– Bus master in multi-master bus environment
– Multi-master arbitration
ADC mit Gain-Amplifier hat er allerdings nicht...
 
Ist Dir der ATtiny214/414/814 zu groß?
Du hattest ja auch auf den 212/412 hingewiesen. Ja, die XTinies haben Master-TWI onboard. Aber eben keinen differentiellen ADC mit GA. Und keine PLL - sonst könnte man auf lange Sicht quasi jeden Tiny durch einen XTiny ersetzen.
Achso, der 43u wär noch ein Exot.
Möglicherweise ändere ich das noch ab auf externe Signalverstärkung, und nehme dann den 814. Der 816 wäre mit 0.300-SOIC schon wieder recht groß, und QFN will ich mir noch nicht antun...
BTT:
Unabhängig davon will ich erstmal mit den Displays spielen können, deswegen soll eins auf mein STK-Board mit drauf. Und eben auch an 5V betrieben werden können.
 
Benötige ich an den Gates von Q3 und Q4 Strombegrenzungswiderstände (R4, R8), oder kann ein AVR die direkt umladen? (/Reset sollte nicht sonderlich zeitkritisch sein, Vbat erst recht nicht).
Vorwiderstände benötigst du hier nicht. Ein kleiner Vorwiderstand ist dann sinnvoll, wenn du mit hohen Frequenzen arbeitest.
 
Ok, dann laß ich die beiden weg.
Q1 und Q2 sollten (mit ihren R) ok sein.
Was ist mit Q3 und Q4?
Bei Q4 soll der DS-Spannungsabfall möglichst gering sein. Daß Display wird wohl über Vbat bis zu 20mA aufnehmen, möglicherweise klemm ich da auch noch'ne LED mit rein.
 
Aber eben keinen differentiellen ADC mit GA. Und keine PLL - sonst könnte man auf lange Sicht quasi jeden Tiny durch einen XTiny ersetzen.
Bei den Mengen, die ich brauche, kommt es mir auf die 1,50 die der E5 mehr kostet, auch nicht an. ;)
Der hat das alles und DMA, 12bit ADC, DAC, XCL, Eventsystem und vieles mehr.

TWI sieht bei den xtinies ähnlich aus wie bei den xmegas, d.h. es unterscheidet sich ziemlich von den tinies und megas. Es soll einfacher sein, ich hab es aber nicht ohne die Interruptroutine aus dem ASF hingekriegt (beim A4). Entweder habe ich es nicht richtig verstanden oder das Datenblatt ist fehlerhaft oder unvollständig. (Kann sich inzwischen natürlich verbessert haben...)

Hat Dein Master Pullups an SDA und SCL? Wenn nicht, fehlen sie im Schaltplan.

BTW: Die zum µC passenden ANs findet man auf der zugehörigen microchip-Seite unter Dokumentation.
http://www.microchip.com/wwwproducts/en/ATTINY414
Ist aber leider kein "Migrating from conventional Core AVR to X-Core-AVR" dabei...
 
Zuletzt bearbeitet:
Bei den Mengen, die ich brauche, kommt es mir auf die 1,50 die der E5 mehr kostet, auch nicht an. ;)
Der hat das alles und DMA, 12bit ADC, DAC, XCL, Eventsystem und vieles mehr...
Ist aber auch wieder größer...
Ich werde mich natürlich langsam mal an die neuen Tinies rantasten...
TWI sieht bei den xtinies ähnlich aus wie bei den xmegas, d.h. es unterscheidet sich ziemlich von den tinies und megas. Es soll einfacher sein, ich hab es aber nicht ohne die Interruptroutine aus dem ASF hingekriegt (beim A4). Entweder habe ich es nicht richtig verstanden oder das Datenblatt ist fehlerhaft oder unvollständig. (Kann sich inzwischen natürlich verbessert haben...)...
Deswegen würde ich das Display erstmal mit irgendnem Mega angehen - man muß ja nicht gleich auf drei Baustellen anfangen.
Hat Dein Master Pullups an SDA und SCL? Wenn nicht, fehlen sie im Schaltplan...
Eigentlich gibt es keinen Master in der Form. Ich plane eine Expansion-Platine für mein STK500, die diverse AVR (SMD-Tinies) via ZIF-Sockeln aufnehmen kann. Da noch Platz ist, soll noch ein Drehencoder mit rauf, und eines der OLEDs. Letzteres operiert nur mit 3V3 (eigentlich 2V8, aber 3V3 wären noch erlaubt) - deswegen die Anpassungsschaltung. Ob die 5V-seitigen Pullups mit drauf sollen, hab ich noch nicht entschieden - wahrscheinlich mach ich die aber via Jumper zuschaltbar. Auch hier 10k ?
 
Ist aber auch wieder größer...
So groß finde ich 7 x 7 mm jetzt nicht grade... ;)
Eigentlich gibt es keinen Master in der Form. Ich plane eine Expansion-Platine für mein STK500,
Das Display muß ja wohl an irgendeinen Master angeschlossen werden, wenn es benutzt werden soll und auf der 5V-Seite fehlen die Pullups. Wenn da nur ein Master mit Pullups angeschlossen wird, kein Problem.
Die Spezifikation empfiehlt 3 mA durch die Pullups. Das ist aber nur bei vielen Slaves und ggf. Mastern und langen Leitungen erforderlich. I2C ist nicht sonderlich stromsparend...
Wenn Du nur einen Slave an einen Master über sehr kurze Leitungen anschließen willst, könnten mit 10k sogar noch 400 kHz gehen. 4k7 wären sicherer. Aber das siehst Du an der Kurvenform...
http://www.ti.com/lit/an/slva689/slva689.pdf
 
So groß finde ich 7 x 7 mm jetzt nicht grade...
Der TQFP hätte 7x7 Body zuzüglich Beine -> 9x9 mindestens.
Der VQFN hätte 5x5 (ohne Beine), der UQFN 2,8x2,8.
Die beiden beinlosen will ich mir eigentlich nicht antun, routingtechnisch wird das auch nicht einfacher, bei 'nem 1cm-Platinenstreifen...
Werd wohl bei 'nem 150er SOIC bleiben...
...Display muß ja wohl an irgendeinen Master angeschlossen werden, wenn es benutzt werden soll und auf der 5V-Seite fehlen die Pullups. Wenn da nur ein Master mit Pullups angeschlossen wird, kein Problem...
Wie gesagt, die Schaltung soll mit auf das Expansion Board. Ohne Master. Der kann dann an JP1 angeschlossen werden. Prinzipiell kann man dann auch irgendwie anders Pullups dazuklemmen - ich plane die über einen Jumper mit ein, dann hat man später beide Möglichkeiten.
Die Spezifikation empfiehlt 3 mA durch die Pullups. Das ist aber nur bei vielen Slaves und ggf. Mastern und langen Leitungen erforderlich. I2C ist nicht sonderlich stromsparend...
Wenn Du nur einen Slave an einen Master über sehr kurze Leitungen anschließen willst, könnten mit 10k sogar noch 400 kHz gehen. 4k7 wären sicherer. Aber das siehst Du an der Kurvenform...
3mA... ok. Aber wie ist das mit den Pullups auf der 3V3-Seite? Die mischen doch irgendwie mit rein (also wenn die 5V-Seite runterzieht über die Body-Diode, und wenn die 3V3-Seite runterzieht über den FET selbst).
So'n 1206 umzulöten ist kein Thema, wenn die Kurvenform nicht paßt - aber ich hab kein Oszi. Naja, wäre ja dann glatt 'n Grund, zu Euch nach Hannover rüberzudüsen, das letzte Treffen ist ja schon ewig her...

Hab noch gar nicht nachgeschaut, wie schnell man den SSD1306 ansprechen kann.

P.S.: Danke bisher...
 
bei 'nem 1cm-Platinenstreifen...
so ehrgeizig bin ich nicht, da gönne ich mir lieber genug Platz, wenn‘s geht sogar gerne THT. ;)
(Beruflich geht auch BGA, das muß ich dann aber auch nicht selbst bestücken, das wird gebacken...)
Aber wie ist das mit den Pullups auf der 3V3-Seite? Die mischen doch irgendwie mit rein
Das weiß ich auch nicht. Bei allen I2C-Schaltungen mit Levelshifter, die ich bisher gesehen habe, sind auf beiden Seiten Pullups (natürlich ohne Wertangabe) und mit 4k7 auf beiden Seiten ist man immer noch insgesamt unter 3 mA.

Der SSD1306 kann 400 kHz bei I2C. Er kann aber auch SPI (wenn es nicht anders fest verdrahtet ist) mit 10 MHz und ohne das nervige, überflüssige I2C-Protokoll...
 
Die beiden großen Displays aus meinem Link im ersten Post sind diesbezüglich vollständig angeschlossen. Die drei (bzw sechs) kleinen haben nur I²C. SPI hätte auch der Tiny841 gehabt.
 
Im Übrigen brauchst Du gar keine bidirektionalen Pegelwandler. Der SSD1306 läßt sich nur im Parallelmode lesen.
9.1 Data Read / Write
No data read is provided in serial mode operation.
 
Im Übrigen brauchst Du gar keine bidirektionalen Pegelwandler. Der SSD1306 läßt sich nur im Parallelmode lesen.

Das Display als Slave wird auf der SDA Leitung mit ACK antworten, es gehen also Infos zurück zum Master. Der Displaycontroller hat auch SPI, da brächte man keinen bidirektionalen Pegelwandler.
 
Das Display als Slave wird auf der SDA Leitung mit ACK antworten, es gehen also Infos zurück zum Master.
Ja, wenn man es denn benutzen will. Sonst nicht:
The “SDA OUT” pin may be disconnected. When “SDA OUT” pin is disconnected, the acknowledgement signal will be ignored in the I2C-bus.
 
Daten lesen nicht, aber gabs da nicht auch irgend'n lesbares Statusregister?
Das Display muß doch aber ein ACK erzeugen können, und ob es die Clock stretchen will, weiß ich auch grad nicht...

Edit:
aber gabs da nicht auch irgend'n lesbares Statusregister?
Scheinbar nicht...
 
Zuletzt bearbeitet:
Der Displaycontroller hat auch SPI
Ja, aber die drei Displays sind nur I²C-verdrahtet. Wahrscheinlich wird auch der SDA-OUT verdrahtet sein.
Trotzdem würde man so mit einer Richtung auskommen, wenn man die NACKs nicht interpretiert...

Auf der STK-Platine hab ich Platz für die FETs und das Hühnerfutter...
 
[ACK] kann man abschalten siehe Beitrag #16
???
Wie meinst Du das?
Wenn der Pegelwandler das ACK nicht durchstellt, kann der Master es auch nicht erkennen. Egal, ob das Display überhaupt eins sendet.
Es wäre also Sache des Codes im Master (bzw der Master-Hardware), das NACK zu ignorieren, und trotzdem Daten zu senden etc...
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)