سلام دوستان
من قصد دارم از طریق میکرو Atmega8 و ارتباط i2c با ماژول gy-mcu90615 که سنسور دما هست، ارتباط برقرار کنم. ولی در خصوص انتخاب فرکانس اسیلاتور مشکل دارم. با انتخاب فرکانس داخلی 8مگاهرتز ماژول پاسخ نمیده چون فرکانس کاری 115200 هست و اگر فرکانس 11مگ انتخاب کنم نمیتونم سون سگمنت رو راه بندازم. لطفا راهنمایی کنید
کدی که نوشتم رو در ادامه میزارم :
من قصد دارم از طریق میکرو Atmega8 و ارتباط i2c با ماژول gy-mcu90615 که سنسور دما هست، ارتباط برقرار کنم. ولی در خصوص انتخاب فرکانس اسیلاتور مشکل دارم. با انتخاب فرکانس داخلی 8مگاهرتز ماژول پاسخ نمیده چون فرکانس کاری 115200 هست و اگر فرکانس 11مگ انتخاب کنم نمیتونم سون سگمنت رو راه بندازم. لطفا راهنمایی کنید

کدی که نوشتم رو در ادامه میزارم :
$regfile = "m8def.dat"
$crystal = 11059200
$baud = 115200
Config Portb = Output
Config Portd = Output
Config Sda = Portc.4
Config Scl = Portc.5
I2cinit
I2cstart
I2cwbyte &H5A 'Slave Address
I2cwbyte &HA5
I2cwbyte &H45
I2cwbyte &HEA
I2cstop
Waitms 25
Do
Waitms 150
I2cstart
I2cwbyte &H5A
I2crbyte Data1 , Ack
I2crbyte Data2 , Ack
I2crbyte Data3 , Ack
I2crbyte Data4 , Ack
I2crbyte Data5 , Ack
I2crbyte Data6 , Ack
I2crbyte Data7 , Ack
I2crbyte Data8 , Ack
I2crbyte Data9 , Nack
I2cstop
Waitms 5
و در ادامه هم کدهایی هست که مربوط به نمایش عدد دما روی سون سگمنت هست :
T1 = Data5 * 100
Tmp1 = T1 + Data6
Tmp = Tmp1 / 100
'******************tmp display***************************
Dahgan = Tmp / 1000
Var1 = Tmp Mod 1000
Yekan = Var1 / 100
Var2 = Var1 Mod 100
Ashar = Var2 / 10
Waitms 1
If Yekan >= 0 Then
Flag = Yekan
Portb.0 = 0 : Portb.1 = 1
Portd.0 = Flag.0 : Portd.1 = Flag.1 : Portd.2 = Flag.2 : Portd.3 = Flag.3
End If
Waitms 20
If Dahgan > 0 Then
Flag = Dahgan
Portb.0 = 1 : Portb.1 = 0
Portd.0 = Flag.0 : Portd.1 = Flag.1 : Portd.2 = Flag.2 : Portd.3 = Flag.3
End If
Waitus 80
loop
end
$crystal = 11059200
$baud = 115200
Config Portb = Output
Config Portd = Output
Config Sda = Portc.4
Config Scl = Portc.5
I2cinit
I2cstart
I2cwbyte &H5A 'Slave Address
I2cwbyte &HA5
I2cwbyte &H45
I2cwbyte &HEA
I2cstop
Waitms 25
Do
Waitms 150
I2cstart
I2cwbyte &H5A
I2crbyte Data1 , Ack
I2crbyte Data2 , Ack
I2crbyte Data3 , Ack
I2crbyte Data4 , Ack
I2crbyte Data5 , Ack
I2crbyte Data6 , Ack
I2crbyte Data7 , Ack
I2crbyte Data8 , Ack
I2crbyte Data9 , Nack
I2cstop
Waitms 5
و در ادامه هم کدهایی هست که مربوط به نمایش عدد دما روی سون سگمنت هست :
T1 = Data5 * 100
Tmp1 = T1 + Data6
Tmp = Tmp1 / 100
'******************tmp display***************************
Dahgan = Tmp / 1000
Var1 = Tmp Mod 1000
Yekan = Var1 / 100
Var2 = Var1 Mod 100
Ashar = Var2 / 10
Waitms 1
If Yekan >= 0 Then
Flag = Yekan
Portb.0 = 0 : Portb.1 = 1
Portd.0 = Flag.0 : Portd.1 = Flag.1 : Portd.2 = Flag.2 : Portd.3 = Flag.3
End If
Waitms 20
If Dahgan > 0 Then
Flag = Dahgan
Portb.0 = 1 : Portb.1 = 0
Portd.0 = Flag.0 : Portd.1 = Flag.1 : Portd.2 = Flag.2 : Portd.3 = Flag.3
End If
Waitus 80
loop
end