I2C-Analog Input 8 Kanäle 0-10V 10 Bit

Unsere analoge Eingangskarte haben wir weiterentwickelt.
Folgende Verbesserungen haben wir in das neue Design einfließen lassen

  • Acht Eingangskanäle je 10 Bit
  • Abtastrate 250 Hz
  • Busanschluss-Stecker

Hardware

Gesteuert werden alle Vorgänge auf der Karte von einem Mikrokontroller (PIC 18F13K22). Dieser stellt die Verbindung zwischen dem I2C-Bus und den A/D-Wandlern her. Er sorgt dafür dass die Daten in den Registern mit einer Frequenz von 250 Hz aktualisiert werden..
Der minimale Wert eines Registers liegt bei 0x0000 (dec. 0) der Maximale 0x03FF (dec. 1023). Die A/D-Wandler messen gegen eine interne Referenzspannung von 2,048 Volt. Somit entspricht der maximale Wert einer messbaren Spannung von 2,048 Volt am Eingang. Mit entsprechenden Eingangswiderständen lässt sich der Messbereich der Karte erweitern.

Downloads

Datenblatt   Schaltplan

 

Allgemeines

Die neue Analog-In Karte verfügt über insgesamt 8 AD Wandler mit einer Auflösung von 10 Bit. Die Analog-In Karte ist komplett Register gesteuert. Alle Daten werden in lese- und schreibbaren Registern gespeichert.

Außerdem hat die Karte zwei Stecker für den Busverbinder bekmmen.

I2C-Adresse

Wie bei allen Karten kann man die I2C-Adresse innerhalb eines gewissen Rahmens wählen.

I2C-Adressen sind immer als 7+1 Bit Adressen aufgebaut. Das letzte Bit entscheidet darüber ob der Master lesen oder schreiben will.
Auf gerade I2C-Adressen wird immer geschrieben – von ungeraden Adressen wird immer gelesen.

Beim Raspberry muss die 7-Bit Adresse angegeben werden. Die Umschaltung des letzten Adress-Bits wird vom PI selbst gesteuert.

Analog IN 8-Bit dez 8-Bit hex 7-Bit dez 7-Bit hex
OFF OFF OFF OFF 16 10 8 08
OFF OFF OFF  ON 18 12 9 09
OFF OFF  ON  OFF 20 14 10 0A
OFF OFF  ON    ON 22 16 11 0B
OFF  ON  OFF OFF 24 18 12 0C
OFF  ON  OFF  ON 26 1A 13 0D
OFF  ON  ON  OFF 28 1C 14 0E
OFF  ON  ON  ON 30 1E 15 0F
 ON  OFF OFF OFF 48 30 24 18
 ON  OFF OFF  ON 50 32 25 19
 ON  OFF  ON  OFF 52 34 26 1A
 ON  OFF  ON  ON 54 36 27 1B
 ON  ON  OFF OFF 56 38 28 1C
 ON  ON  OFF  ON 58 3A 29 1D
 ON  ON  ON OFF 60 3C 30 1E
 ON  ON  ON  ON 62 3E 31 1F

Datenübertragung

Eigentlich ist die Karte zum Messen da und zum Auslesen der gemessenen Spannungen. Es gibt aber einen Wert den man schreiben kann, den Register-Zeiger. Mit ihm ist es möglich einen bestimmten Kanal auszulesen. er ist 1 Byte lang.

Nach Spannung ein ist das Register auf Null gestellt. Somit werden die Analogwerte ab Kanal 0 gelesen.

Bei der Datenübertragung können beliebig viele Bytes gelesen werden.
•die Anzahl der Bytes muss immer ungerade sein (1, 3, 5 usw.)
•alle Registerwerte werden mit dem LSB voran gelesen
•alle überflüssigen Leseoperationen werden ignoriert.

Im einfachsten Fall liest man immer 17 Bytes von der Analogeingabekarte und bekommt so alle Werte wie folgt in einem Datenarray abgelegt

Byte 1 Zeiger
Byte 2 Analogwert 1 Low Byte
Byte 3 Analogwert 1 High Byte
Byte 4 Analogwert 2 Low Byte
Byte 5 Analogwert 2 High Byte
Byte 6 Analogwert 3 Low Byte
Byte 7 Analogwert 3 High Byte
Byte 8 Analogwert 4 Low Byte
Byte 9 Analogwert 4 High Byte
Byte 10 Analogwert 5 Low Byte
Byte 11 Analogwert 5 High Byte
Byte 12 Analogwert 6 Low Byte
Byte 13 Analogwert 6 High Byte
Byte 14 Analogwert 7 Low Byte
Byte 15 Analogwert 7 High Byte
Byte 16 Analogwert 8 Low Byte
Byte 17 Analogwert 8 High Byte

 

Beispiel für I2C-RS232-Modem 2 oder I2C-USB-Modem

Im Beispiel wird mit dem Befehl 51 das Auslesen der 17 Bytes von der Analogkarte angest0ßen. Die empfangenen Daten werden in das Array D(x) abgelegt.

Aus dem Byte D(2) und D(3) wird dann der erste Analogwert berechnet indem man das High-Byte mit 255 multipliziert und das Low-Byte einfach hinzuaddiert. Eine Multiplikation mit 255 entspricht ein links schieben um 8 Bitstellen.

Option Explicit
'Globale Variablen anlegen, die in der Funktion "Modem_Antwort"
'beschrieben werden

Dim FB           'Frame Befehl
Dim FA           'Frame Anzahl
Dim FE           'Frame Ende
Dim D(1 To 128)  'Daten
Private Sub Command_LESEN_Click()
'Der Befehl I2C-Data 33 hex = 51 dez.
'liest oder schreibt bis zu 128 Bytes vom I2C-Slave
Dim Adr
Adr = Combo_AIN_Adresse   'Adresse aus Cobo-Box

SENDBYTE (51)       'Befehl 51 = I2C-DATA
SENDBYTE (3)        'Frame Anzahl = 3
SENDBYTE (Adr + 1)  'Bus-Adresse des I2C-ADC zum Lesen
SENDBYTE (0)        'Adresse MSB
SENDBYTE (17)       '17 Byte lesen
SENDBYTE (4)        'Endekennung

If Modem_Antwort = True Then
         'Analogwerte eintragen
    TextBox_AIN1.Text = D(3) * 256 + D(2)
    TextBox_AIN2.Text = D(5) * 256 + D(4)
    TextBox_AIN3.Text = D(7) * 256 + D(6)
    TextBox_AIN4.Text = D(9) * 256 + D(8)
    TextBox_AIN5.Text = D(11) * 256 + D(10)
    TextBox_AIN6.Text = D(13) * 256 + D(12)
    TextBox_AIN7.Text = D(15) * 256 + D(14)
    TextBox_AIN8.Text = D(17) * 256 + D(16)
Else
    MsgBox ("Fehler bei I2C-AIN")
End If

End Sub

 

 

 

 

2 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.