Code:
'**********************************************************
'Programm :
'By : mat-sche
'Compiler : BASCOM-AVR 1.11.9.3
'Hardware : DS1820 an Port d.4
'
' LCD-Display 4x20 an PortC
' max1069 an Hardware TWI
'Chip type : MEGA32
'Date : 04.03.2010
'**********************************************************
$regfile = "m32def.dat"
$crystal = 14745600
$baud = 9600
$lib "i2c_twi.lbx"
$hwstack = 64
$swstack = 64
$framesize = 64
'$sim
'------------------------------------------------------------------------------- 2x16 LCD Display an Port c =>Conector
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 20 * 4
Config Lcdbus = 4
Initlcd
Cursor Off
Cls
Ddrd = &B00010000 'pull up einschalten für Taster
Ddrb = &B1000000
Dim Gsm As Bit
Led Alias Portb.7
Dim Rs232_flash As Byte
Dim Rs232_str As Byte
'------------------------------------------------------------------------------- Variablen
Config Twi = 400000 ' Init TWBR und TWSR
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
Twcr = &B00000100
Config Scl = Portc.0 'Is serial clock SCL
Config Sda = Portc.1
Const Max1069wr = &B01101110 'DS1624 Sensor write
Const Max1069rd = &B01101111
Dim E_ah As Byte 'höherwertiges Byte der SpeicherAdresse (Adresse=Word)
Dim E_al As Byte 'niederwertiges Byte der SpeicherAdresse (Adresse=Word) 'Is serial data SDA
Dim E_addr As Word 'SpeicherAdresse EEprom
Dim E_dat_r As Byte
Dim Spannung1 As Byte , Spannung2 As Byte , Spannung3 As Word , Spannung4 As Single
'Dim Storespannung(2) As Byte At Spannung Overlay 'Maske: weise die 4Byte aus dem Single(Temperature) dem
Dim Bita As Bit
Dim Avgschleife1 As Byte
Dim Avg1_ges_temp As Long , Avg_1 As Long
'-------------------------------------------------------------------------------
Locate 1 , 1
Lcd "start"
Waitms 100
Cls
Do
'******************************************************************************* 'Automatisches Flashen über RS232
Rs232_flash = Ischarwaiting()
If Rs232_flash = 1 Then 'wurde was über RS232 empfangen?
Rs232_str = Inkey() 'Empfangspuffer auslesen
If Rs232_str = 123 Then 'vom MCS-Programmer geschickte "123" empfangen?
Goto &HF800 'Sprungadresse zum Startbereich des Bootloaders
End If
End If
Led = 1 'Pin wird auf High, also 5V geschaltet
Waitms 100
Print "LED"
Led = 0 'Pin wird auf Low, also 0V geschaltet
Waitms 100
I2cstart
I2cwbyte Max1069rd
I2crbyte Spannung1 , Ack ' acknowledge => weiteres Datenbit wird erwartet
I2crbyte Spannung2 , Nack ' not acknowledge => abschluss der Übertragung
I2cstop
'Spannung3 = Spannung1 * 256
'Spannung3 = Spannung3 + Spannung2
'Shift Spannung3 , Right , 2
Spannung3 = Makeint(spannung2 , Spannung1) ' high und lowbyte zur worvariable zusammensetzen
Avg1_ges_temp = Avg1_ges_temp + Spannung3 ' 2 fach oversampling
Incr Avgschleife1
If Avgschleife1 = 2 Then
Spannung4 = Avg1_ges_temp / 2
Avgschleife1 = 0
Avg1_ges_temp = 0
Spannung4 = Spannung4 * 4.096
Spannung4 = Spannung4 / 16384
Locate 1 , 1 : Lcd "Sp4= " ; Spannung4
Locate 2 , 1 : Lcd "I2c err= " ; Err
End If
'Waitms 300
'******************************************************************************* CONTINUOUS CONVERSIONS
If Bita = 1 Then
Cls
I2cstart
I2cwbyte Max1069rd
I2crbyte Spannung1 , Ack
I2crbyte Spannung2 , Ack
I2crbyte Spannung1 , Ack
I2crbyte Spannung2 , Ack
I2crbyte Spannung1 , Ack
I2crbyte Spannung2 , Nack
I2cstop
Spannung3 = Makeint(spannung2 , Spannung1)
Spannung4 = Spannung3 * 4.096
Spannung4 = Spannung4 / 16384
Locate 1 , 1 : Lcd "Sp4= " ; Spannung4
Locate 2 , 1 : Lcd "I2c err= " ; Err
Locate 3 , 1 : Lcd "I2c err= " ; Err
End If
'------------------------------------------------------------------------------- Taster für Kommado senden an die verschiedenen Slaves
Debounce Pina.7 , 1 , Taster1 , Sub
Debounce Pina.6 , 1 , Taster2 , Sub
Debounce Pina.5 , 1 , Taster3 , Sub
Debounce Pina.4 , 1 , Taster4 , Sub
Debounce Pina.3 , 1 , Taster5 , Sub
'Waitms 200
Loop
End
'******************************************************************************* SUBS
Taster1:
Cls
I2cstart
I2cwbyte Max1069rd
I2crbyte Spannung1 , Ack
I2crbyte Spannung2 , Nack
I2cstop
Spannung3 = Spannung1 * 256
Spannung3 = Spannung3 + Spannung2
Shift Spannung3 , Right , 2
Spannung4 = Spannung3 * 4.096
Spannung4 = Spannung4 / 16384
Locate 1 , 1 : Lcd "Sp4= " ; Spannung4
Return
Taster2:
Toggle Bita
Locate 4 , 1
Lcd "Taster2"
Return
Taster3:
'Timervorgabe = 63500
Locate 1 , 1
Lcd "Taster3"
Return
Taster4:
Enable Timer1
'Timervorgabe = 64300
Locate 1 , 1
Lcd "Taster4"
Return
Taster5:
Gsm = 1
Locate 2 , 1
Lcd "Taster5"
Return
Gruß MAT
Lesezeichen