Solche PCF8591-Module gibt es in zahlreichen Varianten; zwei davon sind in den folgenden Abbildungen wiedergegeben. Man kann sie für etwa 1,50 bis 3,00 Euro (inkl. Porto) erstehen.
Die Kommunikation mit dem Mikrocontroller erfolgt über das I2C-Protokoll. Der Baustein hat 1 Analogausgang und 4 Analogeingänge (jeweils 8 Bit). Betriebsspannung ist 2,5 V - 6,0 V. Genauere Informationen findet man im Datenblatt (s. Anlage).
Das folgende Programm zeigt, wie man mit der Attiny-Platine den Spannungswert an Kanal 0 auslesen kann; welcher Sensor an diesen Kanal angeschlossen ist, ist von Modul zu Modul unterschiedlich.
Code: Alles auswählen
' Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' plus PCF8591-ad-da-wandler; keine zusätzlichen Pull-Up-Widerstände erforderlich
' LED zur Kontrolle an PortB.1
' Analoge Werte lesen
'----------------------------------------------------------------------------
$regfile = "attiny2313.dat" 'Attiny2313
$crystal = 4000000 '4 MHz
$baud = 9600
'**********************************************************
'******************* Deklarationen ************************
Dim Wert As Byte
Dim Write_adresse As Byte
Dim Read_adresse As Byte
Dim Knr As Byte
'****************** Initialisierung ***********************
Ddrb = &B11111111 'Port B als Ausgangsport
Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge auf high legen
Waitms 50
Config Scl = Portb.7 'Konfigurieren von I2C
Config Sda = Portb.5
Write_adresse = 144
Read_adresse = 145
'**********************************************************
'******************** Hauptprogramm ***********************
Do
I2cstart
I2cwbyte Write_adresse
If Err = 0 Then Portb.0 = 1 'LED0 an, wenn Writeadresse bestätigt
Knr = 0
I2cwbyte Knr 'knr 0 -> poti, knr 1 -> LDR, knr 2 -> temperatur (je nach Modul-Typ)
Waitms 20
I2cstop
Waitms 20
' Messung
I2cstart
I2cwbyte Read_adresse
If Err = 0 Then Portb.1 = 1 'LED1 an, wenn Readadresse bestätigt/messbereit
I2crbyte Wert , Nack 'Acknowledge
Printbin Wert
I2cstop
Waitms 20
Portb.1 = 0 'LED1 aus
Waitms 20
Loop