INFO - FAQ - CC2-Forum - CCPro-Forum |
'Versuch mal damit. 'Programmname bei mir DS1621.BAS ' * Programm für die CControl basic define i2cirq port [6] ' entdeckt Interrupt von I2C define clock port [7] ' clockt die I2C - Leitung (SCL) define data port [8] ' setzt die Dataleitung (SDA) für I2C define temp word define slope word define counter word define merker word define adresse byte define i byte define i2caus byte define schreibe byte define zeichen byte define tendenz bit[190] define flag bit[191] define minus bit[192] adresse=&H92 data = on gosub anzeige #main if rxd then get zeichen if zeichen=27 then gosub anzeige if zeichen>91 then zeichen=zeichen-32 if zeichen=65 then gosub Temperatur_ein_Byte_lesen if zeichen=66 then gosub Temperatur_zwei_Byte_lesen if zeichen=67 then gosub genauere_Temperatur_messen if zeichen=68 then gosub oneshot_Temperatur_messen if zeichen=69 then gosub Thermostat_high_lesen if zeichen=70 then gosub Thermostat_low_lesen if zeichen=71 then gosub Thermostat_high_schreiben if zeichen=72 then gosub Thermostat_low_schreiben if zeichen=73 then gosub High_und_Lowflag_loeschen if zeichen=74 then gosub Ausgangs_polaritaet_positiv if zeichen=75 then gosub Ausgangs_polaritaet_negativ if zeichen=76 then gosub Configurationsbyte_lesen if zeichen=77 then gosub Adresse_einstellen if zeichen=78 then goto Staendig_genau_messen if zeichen=79 then goto Staendig_Zweibyte_messen if zeichen=80 then gosub Tendenz_anzeigen zeichen = 0 goto main #Tendenz_anzeigen tendenz=not tendenz return #Staendig_Zweibyte_messen print "Mit #Staendig_zwei if rxd then get zeichen if zeichen=27 then goto main gosub Temperatur_zwei_Byte_lesen goto staendig_zwei #Staendig_genau_messen print "Mit #Staendig_genau if rxd then get zeichen if zeichen=27 then goto main gosub genauere_Temperatur_messen goto staendig_genau #High_und_Lowflag_loeschen gosub Configbyte_lesen gosub Byte_binaer_darstellen if i2caus and 64 then print "Highflag war gesetzt" else print '"Highflag war nicht gesetzt" if i2caus and 64 then i2caus=i2caus-64 if i2caus and 32 then print "Lowflag war gesetzt" else print '"Lowflag war nicht gesetzt" if i2caus and 32 then i2caus=i2caus-32 gosub schreiben schreibe=&HAC:gosub putbyte:gosub getack schreibe=i2caus:gosub putbyte : gosub getack : gosub stop return #Configurationsbyte_lesen gosub Configbyte_lesen gosub Byte_binaer_darstellen return #Byte_binaer_darstellen for i=7 to 0 step -1 if i2caus and 1 shl i then print "1 "; else print "0 "; next i print " ";i2caus return #Ausgangs_polaritaet_positiv gosub Configbyte_lesen gosub schreiben schreibe=&HAC:gosub putbyte:gosub getack if (i2caus and 2)=0 then schreibe = i2caus+2 gosub putbyte:gosub getack gosub stop print "Polarität positiv" return #Ausgangs_polaritaet_negativ gosub Configbyte_lesen gosub schreiben schreibe=&HAC:gosub putbyte:gosub getack if i2caus and 2 then schreibe = i2caus - 2 gosub putbyte:gosub getack gosub stop print "Polarität negativ" return #Configbyte_lesen gosub schreiben schreibe=&HAC : gosub putbyte:gosub getack gosub lesen gosub getbyte:gosub givenoack:gosub stop return #Thermostat_low_schreiben print "Eingabe der Thermostat-low Temperatur" print "Format : 275 für 27.5 oder 270 für 27.0" input slope print slope; " wird geschrieben" temp=slope/10 counter=slope mod 10 gosub schreiben schreibe=&HA2: gosub putbyte:gosub getack schreibe=temp : gosub putbyte :gosub getack if counter =0 then schreibe=0 else schreibe=128 gosub putbyte:gosub getack gosub stop gosub anzeige return #Thermostat_high_schreiben print "Eingabe der Thermostat-high Temperatur" print "Format : 275 für 27.5 oder 270 für 27.0" input slope print slope; " wird geschrieben" temp=slope/10 counter=slope mod 10 gosub schreiben schreibe=&HA1:gosub putbyte:gosub getack schreibe=temp : gosub putbyte gosub getack if counter<>0 then schreibe=128 else schreibe=0 gosub putbyte : gosub getack gosub stop gosub anzeige return #Thermostat_low_lesen gosub schreiben schreibe=&HA2:gosub putbyte:gosub getack gosub lesen gosub getbyte print "Thermostat low ";i2caus;"."; gosub giveack gosub getbyte print (i2caus = 128)*-5 ; " °C" gosub stop return #Thermostat_high_lesen gosub schreiben schreibe=&HA1:gosub putbyte:gosub getack gosub lesen gosub getbyte print "Thermostat high ";i2caus;"."; gosub giveack gosub getbyte print (i2caus = 128)*-5 ; " °C" gosub stop return #Adresse_einstellen print "Sytemadresse einstellen" print "Grundadresse = "; &H90 input adresse print "neue Adresse = " ;adresse gosub anzeige return #genauere_Temperatur_messen gosub oneshot_Temperatur_messen gosub schreiben schreibe=&HA8:gosub putbyte:gosub getack gosub lesen gosub getbyte counter=i2caus print "Remaincounter ";counter gosub stop gosub schreiben schreibe=&HA9:gosub putbyte:gosub getack gosub lesen gosub getbyte slope=i2caus print "Slopecounter ";slope gosub stop print "genaue Temperatur "; if minus=on then print "-"; if minus then temp = (255 xor temp)+1 print ((temp*100-25)+ ((slope-counter)*100/slope*100)/100)/100;"."; i2caus=((temp*100-25)+ ((slope-counter)*100/slope*100)/100) mod 100 if i2caus<10 then print "0"; print i2caus; " °C" return #oneshot_Temperatur_messen gosub schreiben schreibe=&HAC : gosub putbyte:gosub getack if (i2caus and 1) = 0 then schreibe=i2caus + 1 else schreibe=i2caus gosub putbyte:gosub getack gosub schreiben schreibe=&H22: gosub putbyte : gosub getack gosub schreiben schreibe=&HEE : gosub putbyte : gosub getack print "Wandlung gestartet" gosub schreiben schreibe=&HAC : gosub putbyte:gosub getack #nochmals gosub lesen gosub getbyte:gosub stop print i2caus if (i2caus and 128) = 0 then goto nochmals print "Wandlung beendet" gosub schreiben schreibe=&HAA : gosub putbyte:gosub getack gosub lesen gosub getbyte : gosub giveack temp=i2caus gosub getbyte : gosub stop slope=i2caus gosub Temperatur_untersuchen return #Temperatur_ein_Byte_lesen flag=on goto Temperatur_zwei_Byte_lesen return #Temperatur_zwei_Byte_lesen gosub Temperatur_lesen_initialisieren gosub lesen:gosub getbyte temp=i2caus:gosub giveack gosub getbyte slope=i2caus gosub stop gosub Temperatur_untersuchen return #Temperatur_untersuchen minus=off if temp and 128 then minus=on if slope and 128 then counter=5 else counter=0 if minus then temp=255 xor temp if minus then print "Temperatur: ";"-"; else print "Temperatur "; if flag=on then print temp; " °C" if flag=off then print temp;".";counter; " °C" if tendenz=on then gosub tendenz flag=off return #tendenz if merker > temp*10+counter then print "Tendenz: fallend" if merker = temp*10+counter then print "Tendenz: unverändert" if merker < temp*10+counter then print "Tendenz: steigend" merker=temp*10+counter return #Temperatur_lesen_initialisieren gosub schreiben schreibe=&HAC : gosub putbyte:gosub getack gosub lesen gosub getbyte:gosub stop gosub schreiben schreibe=&HAC:gosub putbyte:gosub getack if i2caus and 1 then schreibe=i2caus - 1 else schreibe=i2caus gosub putbyte:gosub getack gosub schreiben schreibe=&HEE:gosub putbyte:gosub getack gosub schreiben schreibe=&HAA:gosub putbyte:gosub getack return #schreiben gosub start:schreibe=adresse:gosub putbyte:gosub getack return #lesen gosub start:schreibe=adresse+1:gosub putbyte:gosub getack return ' ************** Anzeige ************* #anzeige print "Temperatur lesen (1 Byte) " print "Temperatur lesen (2 Byte) " print "genauere Temperatur lesen print "einzelne Wandlung (oneshot) print "Thermostat high lesen print "Thermostat low lesen print "Thermostat high schreiben print "Thermostat low schreiben print "High- und Lowflag löschen " print "Ausgangspolarität positiv print "Ausgangspolarität negativ print "Configurationsbyte lesen print "Systemadresse wählen print "ständig genaue Temperatur print "ständig Zweibytetemperatur print "Tendenz ein-/ausschalten " |
Antwort schreiben |