Forum: Mikrocontroller und Digitale Elektronik Adressen beim TM1637 (I2C Bus)


von Achim S. (achims)


Lesenswert?

Hallo
Habe mehrere Module mit dem TM1637 und 4x 7 Segment Anzeige zu liegen 
und möchte diese an den I2C Bus anschliessen. Haben aber alle die 
gleiche Adresse. Wie kann ich diese ändern?

von H. H. (Gast)


Lesenswert?

(Note: The communication method is not equal to I2C bus protocol totally 
because there is no slave address).

von Oliver S. (oliverso)


Lesenswert?

Das Ding hat keinen I2C-Bus und auch keine I2C-Adresse. Da bleibt dir 
nur, das Problem soft- und hardwareseitig selber zu lösen.

Oliver

von Achim S. (achims)


Lesenswert?

Das verstehe ich nicht so ganz. Der TM wird doch an SCL und SDA 
angeschlossen. In dr Literatur heisst es doch er wird mit dem I2C Bus 
angesteuert. Der Anschluss erfolgt mit 4 Drähten, Vcc, GND, SCL, SDA. 
Wie kann ich dann damit die Anzeige steuern?

von H. H. (Gast)


Lesenswert?

Achim S. schrieb:
> In dr Literatur heisst es doch er wird mit dem I2C Bus
> angesteuert.

Eben nur so ähnlich.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Auf der Herstellerseite muss man chinesisch können, hier das Datenblatt 
in Englisch:
https://raw.githubusercontent.com/revolunet/tm1637/master/datasheet-en.pdf
(verfasst in ihrem besten Englisch) Die 7-Segment-Anzeigen werden als 
"Nixie tube" bezeichnet, eine "blue-ray-nixie-tube" braucht mehr als 3V.

Es ist ein "two-wire-bus", das ist normalerweise identisch mit I2C-Bus, 
aber ohne die Philips-Rechte an dem Namen zu verletzen.
Wie schon mehrfach geschrieben gibt es keine wählbaren Adressen, mehr 
als ein Display kann nur mit zusätzlicher Beschaltung angesprochen 
werden.

: Bearbeitet durch User
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Der Chip hat keinen Chip-Select Eingang, aber man könnte seinen I2C-Takt 
abschalten, wenn er nicht angesprochen werden soll. Zum Beispiel einen 
Serienwiderstand davor und von einen Port eines I2C-Bus-Externders über 
eine Diode nach GND ziehen. (Es könnte allerdings sein, dass das den 
Chip verwirrt) Besser zum Abschalten nach Plus ziehen. Wenn der Extender 
auf hochohmig schaltbar ist spart man sogar die Diode, dann braucht man 
nur noch einen Vorwiderstand von ca. 2k2 bis 10k,

Solche Extender/Expander gibt es von Microchip oder Texas Instruments:
https://www.microchip.com/en-us/product/MCP23009
https://www.ti.com/interface/i2c/general-purpose-ios-gpios/products.html

Hier sogar als fertiges Modul:
https://eckstein-shop.de/Adafruit-MCP23017-I2C-GPIO-Expander-Breakout-for-Arduino-STEMMA-QT-Qwiic
https://www.microchip.com/en-us/product/MCP23017

: Bearbeitet durch User
von Re (r42)


Lesenswert?

Achim S. schrieb:
> [...] Haben aber alle die gleiche Adresse.

Das erste übertragene Byte ist keine i2c-Adresse sondern direkt ein 
"Kommandobyte", bei dem alle Bits ausgenutzt werden. Das letzte Bit im 
ersten Byte codiert auch kein r/w, sondern das unterscheidet auch 
verschiedene Kommandos.

Das alles hat mit dem i2c-Protokoll eigentlich überhaupt nichts zu tun. 
Im Datenblatt ist ja auch die Rede von CLK/DIO und nicht von SCL/SDA.


Achim S. schrieb:
> Der Anschluss erfolgt mit 4 Drähten, Vcc, GND, SCL, SDA.
> Wie kann ich dann damit die Anzeige steuern?

Laut Datenblatt ist der für Mehrfachbenutzung ja eher gar nicht gedacht.

Ich würde für jedes Modul eine eigene DIO-Leitung nehmen und dem 
Datenblatt folgend die jeweils unbenutzten DIOs auf '1' lassen. 
Bit-Banging sollte angemessen schnell sein.

(a) Benötigst Du nur die Displays (wird dann einfacher) oder auch die 
Tasteneingabe?
(b) Mit welcher Hardware willst Du das denn ansteuern?


HTH (re)

von Achim S. (achims)


Lesenswert?

Hatte es erst mal für einen Atmega 128 gedacht. Ansonsten an einen Pico.
Ist aber komisch, erst wird darauf hingewiesen das es per I2C Bus 
gemacht wird und dann so was. Wenn ich mir das DB ansehe, hast du recht.

von Wastl (hartundweichware)


Lesenswert?

Achim S. schrieb:
> erst wird darauf hingewiesen das es per I2C Bus
> gemacht wird und dann so was.

Kannst dich noch so lang wundern, vielleicht ist es besser
die Realität zu akzeptieren und nicht auf I2C zu beharren.

In der Arduino Lib ist es klar ersichtlich wie "es" gemacht
wird, daraus kannst du dir deinen eigenen Code ableiten.

von Re (r42)


Lesenswert?

Achim S. schrieb:
> In dr Literatur heisst es doch [...]

Achim S. schrieb:
> erst wird darauf hingewiesen [...]

Tjaaa... wo genau heisst es das denn und wo wird darauf hingewiesen  ;-)

Ich meine, dass allein schon der Vorgang, nachvollziehbar zu zitieren 
und Quellen überprüfbar zu anzugeben, dazu führt, dass man ein Gefühl 
für die Kompetenz und Glaubwürdigkeit seiner Quellen bekommt.

Diese Lernkurve haben wir wohl alle durchlaufen müssen.

(re)

: Bearbeitet durch User
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

>Arduino Lib
welche? hier ist etwas verlinkt:
https://unsinnsbasis.de/tm1637/

>Atmega 128
das wäre dann kein Arduino, eventuell läßt sich aber die Library dafür 
abändern. Vermutlich kann man die TWI-Schnittstelle ausnutzen.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Christoph db1uq K. schrieb:
>>Atmega 128
> das wäre dann kein Arduino

Kann man aber einen draus machen: https://github.com/MCUdude/MegaCore

von Achim S. (achims)


Lesenswert?

Schau mal hier:
https://www.elektronik-kompendium.de/sites/praxis/bauteil_tm1637-display.htm

Steht dort:

Die TM1637-Anzeige wird per I2C angesteuert. Die Belegung der 
I2C-Schnittstelle erfolgt mit SDA und SCL. Die Betriebsspannung läuft 
wahlweise mit +5 Volt oder 3,3 Volt. Zusätzliche noch Ground (GND). 
Insgesamt sind 4 Pins herausgeführt, die mit einem Mikrocontroller 
verbunden werden müssen, der die Software-Steuerung über I2C übernimmt.

    CLK: I2C SCL
    DIO: I2C SDA
    VCC: +5V / +3,3V
    GND: 0V / GND

Beitrag #7389131 wurde vom Autor gelöscht.
von Peter S. (peter_sch)


Lesenswert?

Christoph db1uq K. schrieb:
>>Atmega 128
> das wäre dann kein Arduino, eventuell läßt sich aber die Library dafür
> abändern. Vermutlich kann man die TWI-Schnittstelle ausnutzen.

Das wird nicht funktionieren. Die TWI-Schnittstelle des ATMega128 ist zu 
"intelligent" dafür.

Aber einfachere I2C-Peripherals lassen sich zur Ansteuerung des TM1637 
missbrauchen, z.B. die USI-Einheit in ATtiny MCUs oder die I2C-Einheit 
der STC8G MCUs (8051) aus China.

von (prx) A. K. (prx)


Lesenswert?

H. H. schrieb:
> (Note: The communication method is not equal to I2C bus protocol totally
> because there is no slave address).

Seitens des Herstellers ist man wohl der Ansicht, dass chinesische 
Nutzer es auch ohne diesen Hinweis verstehen. Denn in der chinesischen 
Version das Datasheets scheint das nicht drin zu stehen. Meint 
jedenfalls Googles Übersetzer. ;-)

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Achim S. schrieb:
> Steht dort:
> .................

Alles was im Internet steht ist richtig und wahr. Man braucht
nur lange genug suchen und sich dann die Wahrheit heraussuchen
die einem am Besten passt. Beratungsresistenten Menschen gelingt
das allerdings nicht da sie eine so fest vorgefasste Meinung
haben dass alles was im Internet zu finden ist sie nicht davon
abbringen kann.

von C-hater (c-hater)


Lesenswert?

Achim S. schrieb:

> Schau mal hier:
> https://www.elektronik-kompendium.de/sites/praxis/bauteil_tm1637-display.htm
>
> Steht dort:
>
> Die TM1637-Anzeige wird per I2C angesteuert.

Das ist Blödsinn. Praktisch ist das einzige, was die Ansteuerung dieses 
Chips mit I2C gemeinsam hat, ist die Tatsache, dass sie seriell arbeitet 
und eine bidirektionale Datenleitung verwendet wird.

Und dank der recht unsinnigen Verwendung der Bits (insbesondere 
natürlich Bit0) in den Controlwörtern wird es kaum möglich sein, 
halbwegs intelligente I2C-µC-Interfaces dazu zu bringen, mit diesem Teil 
zusammen zu arbeiten. Mit dummen Interfaces (und natürlich auch mit 
purem Bit-Banging) ist es aber natürlich möglich, die Dinger 
anzusteuern. Ob man dann an die verwendeten Leitungen dann SCL/SDA 
dranschreibt, ist aber völlig huppse. Davon wird's kein I2C.

Und übrigens: Es ist nicht nur ohne weitere Hardwaremaßnahmen unmöglich, 
mehrere dieser Dinger zu betreiben, sondern es ist darüber hinaus auch 
praktisch unmöglich, echte I2C-Geräte am gleichen Bus zu betreiben. Man 
sollte sich also sehr gut überlegen, ob man die Pins eines dedizierten 
I2C-Interface für diesen Bullshit verbrät. Man könnte das bereuen, wenn 
sich später herausstellt, dass man auch noch echte I2C-Geräte betreiben 
möchte.

Also zusammenfassend: wenn man mehrere dieser Dinger ansteuern möchte, 
braucht man auch mehr Pins am µC. Ich würd's mit Analogmultiplexern 
lösen. Mit einem 4052 z.B. könnte man entweder vier dieser Dinger 
ansteuern (bräuchte dazu 4 Pins am µC) oder (ebenfalls mit vier Pins) 
drei dieser Dinger und über den vierten Kanal einen echten I2C-Bus.
Für mehr von diesen Dingern könnte man z.B. 2x 4051 verwenden, gleiches 
Prinzip, aber ein Pin mehr am µC ermöglicht dann die Wahl aus 8 Kanälen, 
also entweder acht dieser Dinger oder 7 und einen Kanal für den echten 
I2C-Bus.

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
Noch kein Account? Hier anmelden.