'************************************** ' ' C-Control/BASIC LM75.BAS ' ' Aufgabe: ' ' ' - Setzen Parameter LM75 ' - Auslesen LM75 ' ' Diese Programm dient nur als Beispiel, keine Anspruch auf Funktion und Vollständigkeit ' '************************************** ' --- Definitionen -------------------- define SDA port[7] define SCL port[8] define komma byte[1] define Daten byte[2] define Zaehler byte[3] define N byte[4] ' --- Programmoperationen ------------- SDA = ON SCL = ON gosub start daten = 144 '1. Adresse LM75 beim schreiben gosub I2C_Write pulse SCL ' 9. Impuls Ack vom IC daten = 3 'entpricht &B00000011 vorbereiten für setzen Temperatur Ausgang O.S. gosub I2C_Write pulse SCL ' 9. Impuls daten = 28 'setzen auf 28 Grad gosub I2C_write pulse SCL daten = 0 'keine Kommastelle gosub I2C_Write pulse SCL gosub stop gosub start daten = 144 '1. Adresse LM75 beim schreiben gosub I2C_Write pulse SCL ' 9. Impuls daten = 2 'entpricht &B00000011 vorbereiten für rücksetzen Temperatur Ausgang O.S. gosub I2C_Write pulse SCL ' 9. Impuls daten = 27 'setzen auf 27 Grad gosub I2C_write pulse SCL daten = 128 'entspricht &B10000000 = 0,5 Grad gosub I2C_Write pulse SCL gosub stop gosub start daten = 144 '1. Adresse LM75 beim schreiben gosub I2C_Write pulse SCL ' 9. Impuls daten = 1 'entpricht &B00000001 Konfig-Register setzten Datenblatt lesen !!! gosub I2C_Write pulse SCL ' 9. Impuls daten = 0 'setzen default 'daten = 4 'setzen O.S. Polarität auf low wenn aktiv, z.B. für Heizungssteuerung gosub I2C_write pulse SCL gosub stop gosub start daten = 144 '1. Adresse LM75 beim schreiben gosub I2C_Write pulse SCL ' 9. Impuls daten = 0 'Pointer für Temperaturlesen setzten gosub I2C_Write pulse SCL ' 9. Impuls gosub stop #Loop gosub Start Daten = 145 '1. Adresse LM75 beim lesen gosub I2C_Write pulse SCL ' 9. Impuls gosub I2C_Read1 gosub ack gosub I2C_Read2 gosub noack gosub Stop if Komma = 128 then komma = 5 if daten > 127 then gosub ausgneg else gosub ausgpos pause 50 '1 Sekunde goto loop #Start SDA = OFF SCL = OFF return #Stop SDA = OFF SCL = ON SDA = ON return #I2C_WRITE for N = 1 to 8 sda = off if (Daten AND 128) = 128 then SDA = ON pulse SCL Daten = Daten shl 1 '1 Bit nach links next return #I2C_Read1 Daten = 0 deact SDA for N = 1 to 8 Daten = Daten shl 1 SCL = ON if SDA then Daten = daten + 1 SCL = OFF next return #I2C_Read2 Komma = 0 deact SDA for N = 1 to 8 Komma = Komma shl 1 SCL = ON if SDA and n = 1 then Komma = Komma + 1 SCL = OFF next return #Ack SDA = 0 pulse SCL return #NoAck SDA = 1 pulse SCL return #ausgpos print "Temperatur: "; "+"; daten; ","; komma 'Ausgabe Temperatur return #ausgneg daten = (255 - daten) + 1 ' Bitmuster invertieren und verlorenes bit hinzufügen print "Temperatur: "; "-"; daten; ","; komma 'Ausgabe Temperatur return end