AD/DA-Wandler PCF8591

Hier können Sie ihre eigenen Projekte vorstellen
Antworten
Heinrichs
Beiträge: 173
Registriert: Do 21. Okt 2010, 18:31

AD/DA-Wandler PCF8591

Beitrag von Heinrichs » Do 28. Mai 2015, 12:47

Seit einiger Zeit findet man preiswerte AD/DA-Wandler-Module mit dem Baustein PCF8591. Meist sind auf diesen Platinen zu Experimentierzwecken neben dem PCF8591 eine LED, ein Poti, ein LDR und ein temperaturabhängiger Widerstand montiert; mit dem LED kann der DA-Wandler und mit den restlichen Komponenten kann der AD-Wandler getestet werden. Natürlich können mithilfe von Jumpern auch andere Geräte an den PCF8591 angeschlossen werden.

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.

pcf8591_Modul1.jpg
PCF8591-Modul 1
pcf8591_Modul1.jpg (56.82 KiB) 17060 mal betrachtet
PCF8591-Modul2.jpg
PCF8591-Modul 2
PCF8591-Modul2.jpg (45.84 KiB) 17059 mal betrachtet

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
Dateianhänge
PCF8591.zip
PCF8591-Datenblatt
(179.56 KiB) 1572-mal heruntergeladen

Antworten