mikrocontroller.net

Forum: Projekte & Code Siebensegment und Tasten ansteuern mit TM1651 \ TM1637


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.
Autor: Ralph S. (jjflash)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Vor einiger Zeit hatte ich Software für ein 4 stelliges 
7-Segmentanzeigemodul (China) gepostet der die Segmentanzeigen mittels 
eines TM1637 ansteuert.

Für ein bestimmtes Projekt brauchte ich wieder 7-Segmentanzeigen, aber 
auch Taster.

Ich wußte noch, dass der TM1637 eben auch Taster scannt, und hab mir 
(dummerweise) TM1651 bestellt (weil der kleiner ist), aber dabei 
übersehen, dass dieser nur 7 Segmente ansteuern kann (und somit ein 
Ansteuern eines Dezimalpunktes nicht möglich ist).

Also wurde der Versuch mit TM1637 realisiert (nachdem einzelne Chips 
dann endlich da waren) und ich hab mein altes Softwaremodul erweitert, 
sodass dieses nun die Chips TM1637 UND TM1651 für die Anzeige UND das 
Tastenauslesen angesprochen werden können.

TM1651:
------------------------------------
4 * 7 LEDs ansteuerbar (gemeinsame Anode)
7 Inputs lesbar

TM1637
------------------------------------
6 * 8 LEDs ansteuerbar (gemeinsame Anode)
16 Inputs lesbar

Desweiteren kann nun bestimmt werden, ob am TM1637 4 oder 6 Stück 
7-Segmentanzeigen angeschlossen sind.

Wenn die nächste Chinabestellung da ist, wird dieses Softwaremodul hier 
noch um den Chip TM1638 erweitert (kann 8 Stück 7-Segmentanzeige und 16 
Tasten bedienen).

Beschreibung ebenfalls hier im Anhang

--

Ich habe mir die Freiheit genommen, den etwas kryptischen Titel 
anzupassen
-rufus

: Bearbeitet durch Moderator
Autor: Karl M. (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Hallo Ralph,

ich finde in deinem Quellcode:

"I2C Bus-Datentransfer" aber der Baustein macht laut Datenblatt:
 "Two - wire serial interface"

https://www.mcielectronics.cl/website_MCI/static/documents/Datasheet_TM1637.pdf

Ein Schreibfehler?

Autor: Ralph S. (jjflash)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Antwort ob es ein Schreibfehler ist beantworte ich jetzt mal mit 
"nein", die Frage ob man das hätte anderst bezeichnen können, könnte man 
mit " ja und nein" beantworten.

Die TMxx Bausteine SIND TWI (two wire interface),

aaaaaaaaaber:

Ein I2C Baustein ist auch ein TWI !!!

Atmel spricht bspw. bei seinen internen Funktionalitäten auch von einem 
TWI (und ich glaube mich erinnern zu können, dass es schlicht deswegen 
TWI - und nicht I2C - heißt, weil es Namensstreitigkeiten bezgl. des I2C 
Buses hätte geben können).

Wenn du dir die Funktionen von tm16_read und tm16_write anschaust 
(Bitbanging), dann wirst du dort sehen, dass das nichts weiteres als ein 
serielles Ausschieben der Bits ist. Dieses allerdings mit LSB zuerst. 
Alle meine I2C Bausteine schieben MSB zuerst aus, und ich weiß nicht aus 
dem Handgelenk, ob das in den I2C Spezifikationen so sein muß.

Betrachtest du dir das Datenblatt der TM16xx Bausteine genauer, dann 
wirst du feststellen, dass sie dieselbe Startkondition und dieselbe Stop 
Kondition besitzen.

Desweiteren quittiert ein TM16xx Baustein ein Datentransfer zu ihm mit 
einem Acknowledge genauso, wie es ein I2C Baustein auch macht.

Wenn man sich den "Spaß" macht, und einen TM16XX Baustein als einzigen 
Chip an einen I2C Bus hängt, und für das Versenden und Lesen eines Bytes 
die "normalen" Funktionen des Buses verwendet, bei der Ausgabe des 
einzelnen Datums die Bits reversiert (d.h. Bit7 <=> Bit 0, Bit6 <=> 
Bit1, Bit5 <=>Bit2, Bit4 <=> Bit3 tauscht), dann kannst du den TM16XX 
auch mit regulären I2C - Funkionen ansprechen.

Das "ärgerlichste" an den TM16XX Chips ist, dass sie KEINE Busadresse 
besitzen und man sie deshalb nicht an einen I2C Bus mit anderen 
Bausteinen hängen kann weil der TM16XX immer antwortet.

Die Übertragungsfunktionen zum TM16XX sind also I2C Funktionen. Der 
TM16XX hat aber kein I2C Busprotokoll (wie zuerst Deviceadresse mit r/w 
Flag in Bit0).

Für mich entspricht deshalb der Transfer von / zum TM16XX einem I2C 
Busdatentransfer.

Der geneigte Benutzer kann logischerweise diese Bezeichnung im Kommentar 
gerne seinen einen Betrachtungsweise anpassen...


Vielleicht als "serieller Busdatentransfer"

Autor: Ralph S. (jjflash)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, jetzt hab ich mich schlau gemacht:

https://de.wikipedia.org/wiki/i2c

Zitat aus Wikipediaartikel:
Atmel führte aus lizenzrechtlichen Gründen die heute auch von einigen anderen Herstellern verwendete Bezeichnung TWI (Two-Wire-Interface) ein, technisch sind TWI und I²C identisch.

Allerdings steht dort auch:
Alle Bytes werden dabei „Most Significant Bit First“ übertragen.

Somit ist ein Frame für den TM16XX kompatibel zum I2C-Bus, aber nicht 
wie oben beschrieben das Protokoll !

Autor: Axel S. (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis auf diese interessanten IC. Habe mir gleich mal je 
10 vom Chinesen geordert. Die 1651er sind jetzt da und funktionieren auf 
Anhieb mit deiner Software.

Autor: Ralph S. (jjflash)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Freut mich, dass das gleich funktioniert hat. Ich habe soeeben einen 
weiteren Chip von TM beackert von dem ich annahm dass er ähnlich wie die 
beiden anderen funktioniert: Ich hätte ins Datenblatt sehen sollen.

Das ist der TM1638... und statt 2 oder 3 Stunden habe ich jetzt 2 Abende 
daran verbracht (inklusive Doku). Leider willl youtube ein Video davon 
nicht so hochladen wie ich das mag.... Und ohne Video will ich nicht.

Wird die Tage hochgeladen und vllt. findest du einen Spaß an dem 
(Chinaboard) mit 8 Stck. 7-Segmentanzeigen und 16 Tasten...

Autor: Axel S. (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralph S. schrieb:
> ... TM1638
>
> Wird die Tage hochgeladen und vllt. findest du einen Spaß an dem
> (Chinaboard) mit 8 Stck. 7-Segmentanzeigen und 16 Tasten...

So groß brauch ich eigentlich gar nicht.

Der TM1651 hat einen Bruder, der sogar noch interessanter ist. Der 
TM1650 verwendet das gleiche Interface und kommt auch in DIP/SOP-16. 
Kann aber 4 Stellen mit je 8 Segmenten ansteuern. Und bis zu 28 Tasten 
abfragen. 10 Stück für ~ €1,- bei Ali.

Das Datenblatt gibt es nur chinesisch, aber hier:

https://os.mbed.com/components/TM1637-LED-controller-32-LEDs-max-Keyboa/

gibt es schon Code dafür.

: Bearbeitet durch User
Autor: Ralph S. (jjflash)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... hab ich mir jetzt angeguckt und gleich mal bestellt. Wird sich wohl 
integrieren lassen.

Code von mbed guck ich mir höchstens mal an, der Resourcenverbrauch ist 
ähnlich hoch wie bei Arduino und ich mag an sich keine Onlinecompiler.

Für STM32 nutz ich libopencm3 und eigene Erweiterungen.

Aber Danke für den Tip mit TM1650.

Autor: Axel S. (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralph S. schrieb:
> ... hab ich mir jetzt angeguckt und gleich mal bestellt. Wird sich wohl
> integrieren lassen.

Gern geschehen ;)

> Code von mbed guck ich mir höchstens mal an

Klar. Dito. Aber bevor ich Chinesisch lerne, um das Datenblatt zu lesen, 
schau ich doch lieber in eine Handvoll Zeilen C Code.

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.

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