'********************************************************************************************** ' (c) 1988-2014, RIBU Elektronik GmbH ' ATxMega256a3_PT100_Test.bas ' 15.10.2014 ' ' Liest den Temperaturwert unseres PT1000-Moduls aus und gibt den Wert über die seriellen ' Schnittstelle aus. ' Das Unterprogramm I2c_scannen sucht einen I2C-Slave und übergibt die gefundene Adresse ' der Variable "I2c_add" ' Wichtig! Der I2C-Bus muss mit einem 4,7...10K PullUp-Widerstand beschalten sein '********************************************************************************************** $regfile = "xm256a3def.dat" 'für ATxMega128a3-Controller $crystal = 32000000 '32MHz $hwstack = 128 $swstack = 128 $framesize = 128 Dim Pos As Byte , Loop1 As Byte , I2c_add As Byte , Temperatur_wert As Word , Id_wert As Word , Version_wert As Byte , Temp As Byte , Helpwert As Single , Help_string As String * 20 'Einstellungen für ATXMega $lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014 Config Osc = Enabled , 32mhzosc = Enabled 'internen 32MHz-Oszillator aktivieren Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 Config Priority = Static , Vector = Application , Lo = Enabled , Hi = Enabled 'Enable Lo Level Interrupts Dim Twi_start As Byte Open "twie" For Binary As #4 'IIC-Bus configurieren Config Twie = 100000 '100 KHz Takt I2cinit #4 Config Com7 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 Open "COM7:" For Binary As #1 Declare Sub I2c_scannen Declare Sub Messen 'Call I2c_scannen 'sucht einen I2C-Slave und schreibt I2C-Adresse in die Variable "I2c_add" Do Call Messen 'aktuellen Temperaturwert messen Print #1 , Help_string 'Temperaturwert über die serielle Schnittstelle ausgeben Wait 1 'warten Loop End Messen: 'Messwert vom PT1000-Modul abfragen I2cstart #4 'IIC-Verbindung starten I2cwbyte 127 , #4 'schreibe IIC-Adresse (alle Jumper verbunden) oder 'I2cwbyte I2c_add , #4 'schreibe IIC-Adresse von I2C_sannen I2crbyte Temp , Ack , #4 'lesen Grad High Temperatur_wert = Temp * 256 I2crbyte Temp , Ack , #4 'lesen Grad Low Temperatur_wert = Temperatur_wert + Temp 'I2crbyte Temp , Ack , #4 'lesen ID High (muss nicht gelesen werden) 'Id_wert = Temp * 256 'I2crbyte Temp , Ack , #4 'lesen ID Low (muss nicht gelesen werden) 'Id_wert = Id_wert + Temp 'I2crbyte Temp , Nack , #4 'lesen Version (muss nicht gelesen werden) 'Version_wert = Temp I2cstop #4 'IIC-Verbindung abbrechen Helpwert = Temperatur_wert / 64 : Helpwert = Helpwert - 256 'Temperaturwert in °C umwandeln (für Sensormodul -128...+256°C) 'Helpwert = Temperatur_wert / 32 : Helpwert = Helpwert - 256 'Temperaturwert in °C umwandeln (für Sensormodul -128...+768°C) Help_string = Str(helpwert) 'in einen Textstring umwandeln Return I2c_scannen: 'sucht einen I2C-Slave und schreibt I2C-Adresse in die Variable "I2c_add" For Loop1 = 1 To 255 Step 2 I2cstart #4 'IIC-Verbindung starten I2cwbyte Loop1 , #4 'schreibe IIC-Adresse If Err = 0 Then 'wenn IIC-Chip vorhanden I2c_add = Loop1 Or 1 'dann IIC-Adresse speichern I2cstop #4 'IIC-Verbindung abbrechen Exit For 'suche beenden End If I2cstop #4 'IIC-Verbindung abbrechen Waitms 15 'kurze Pause Next Loop1 'nächste IIC-Bus-Adresse versuchen Return