Experimente mit dem Attiny13 und I2C-Ics

von Hermann Nieder
 aus ELO 2009
Elektronik-Labor  Labortagebuch  ELO  

1

Nachdem ich mich vor einiger Zeit mit der Porterweiterung des Attiny13 mit Schiebe-registern beschäftigt hatte, wollte ich gerne wissen, ob es mit dem Kleinen nicht auch möglich ist, I2C-Ics anzusteuern. Ausführliche Hinweise zu diesen Bausteinen und deren Programmierung fand ich u. a. in Fachbüchern von Burkhard Kainka , in denen das Messen, Steuern und Regeln behandelt wird. Diese Ics besitzen für die Kommunikation jeweils eine Datenleitung SDA und eine Taktleitung SCL, die ich mit Anschlüssen des Attiny13 verbinden musste, um sie in BASCOM-AVR anzusteuern. So kann zum Beispiel ein Baustein mit der Bezeichnung PCF8574 an den kleinen Mikrocontroller angeschlossen werden.

2

Dieses IC von Philips besitzt acht Portleitungen, die sich zum Lesen und Schreiben verwenden lassen.
Die wenigen Befehle I2cstart, I2cwbyte sowie I2crbyte und I2cstop machen die Programmierung in BASCOM-AVR recht einfach, wie es der folgende Auszug aus dem Programmlisting für die Ansteuerung des PCF8574 im oben dargestellten Schaltbild belegt.

...
Config Sda = Portb.3
Config Scl = Portb.4

Do
Get #2 , Ausw
Select Case Ausw
Case 1 : Gosub Schreiben
Case 2 : Gosub Lesen
End Select
Loop

Schreiben:
I2cstart
Get #2 , Daten ' Adresse des I2C-Bausteins
I2cwbyte Daten 'z. B. des PCF8574
Get #2 , Daten
I2cwbyte Daten ' Auszugebende Daten
I2cstop
Return

Lesen:
I2cstart
Get #2 , Daten ' Adresse des I2C-Bausteins
I2cwbyte Daten
I2crbyte Les_dat , Nack
Put #1 , Les_dat
I2cstop
Return
...

Zur Übermittlung der Bytes auf der PC-Seite kann z. B. das Terminal-Programm des Lernpakets Mikrocontroller dienen.

Schreiben : Es werden nacheinander 1, 64 (Adresse des PCF8574) sowie ein Wert zwischen 0 und 255 (zu übertragendes Byte) an den Attiny13 gesendet.

Lesen: Man überträgt zuerst eine 2 und dann 65, und über den Mikrocontroller wird das gelesene Byte an den PC gesendet.

Wenn acht Portleitungen nicht ausreichen, können z. B. nach dem folgenden Schaltbild zwei weitere Bausteine PCF8574 angeschlossen und angesteuert werden. Ihre Adressen sind jeweils angegeben.

 

3

Einen für mich sehr interessanten I2C-Baustein bestellte ich vor einiger Zeit bei Reichelt [4]. Es handelt sich um den TDA8444, der acht D/A-Wandler mit einer Auflösung von 6 Bit besitzt.
Ich suchte im Internet nach den Datenblättern des Ics und schloss es nach dem folgenden Schaltbild an den Attiny13 an.

4

 

Bei der Ansteuerung des TDA8444 muss zuerst die Adresse, danach die Unteradresse des jeweiligen D/A-Ausgangs und anschließend ein Wert zwischen 0 und 63 ( 6 Bit!) von der PC-Seite gesendet werden. Hier ist ein Auszug aus dem Programmlisting dazu, mit dem dies möglich ist.

...
Config Sda = Portb.3
Config Scl = Portb.4

Do
I2cstart
Get #2 , Daten ' Adresse des I2C-Bausteins
I2cwbyte Daten
Get #2 , Daten 'z. B. bei TDA8444
' Sub-Adresse
I2cwbyte Daten
Get #2 , Daten 'Bei PCF8574 2. Byte
' erneut eintippen
I2cwbyte Daten
I2cstop
Loop
...

Im Bild oben am Anfang des Beitrags ist eine praktische Ausführung auf einem Steckboard zu sehen. Es sind drei I2C-Bausteine PCF8574 sowie ein TDA8444 an den Attiny13 angeschlossen. Die Anschlüsse Vcc und Vmax des TDA8444 sind hier im Schaltbild mit +5V verbunden. Die Ausgangsspannung an einem D/A-Ausgang beträgt dann zwischen 0,28V und 3,08 V. Um an DAC1 die maximale Spannung auszugeben, ist an den TDA8444 über den Mikrocontroller zuerst 72, dann 1 und schließlich 63 zu übertragen. Um am Ausgang DAC7 den gleichen Wert einzustellen, sendet man zuerst 72, danach 7 und schließlich 63.

Vcc und Vmax können nach den Angaben in den Datenblättern bis zu 12 V betragen. Ich bin gespannt, was für interessante Anwendungen mit diesem IC noch möglich sind!

Downlaod: T13I2C.zip (Quelltexte und Hex-Files).