سلام
من یه ارتباط i2c بین دو میکرو مگا32 و مگا8 بوجود آوردم و میخوام یه اطلاعاتی بین این دو میکرو رد و بدل کنم
برای تست یه مدار ساده بستم که سمت مگا 32 یه کیپد رو میخونه و اطلاعات کیپد رو از طریق i2c به مگا8 فرستاده میشه و مگا8 هم این اطلاعات رو روی lcd نشون میده
مشکلی که دارم اینه که اعداد درستی نشون داده نمیشه ، مثلا اگه روی کیپد عدد 5 رو بزنی روی السیدی هر عددی نشون میده غیر از 5
این کل فایلای مدار
http://cld.persiangig.com/dl/pILLK/TuGNQuTI6v/New%20folder.rar
این شماتیکم

این برنامه فرستنده
[code=vb]$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , Rs = Portb.0 , E = Portb.1
Cursor Off
Cls
Config Kbd = Porta
Config I2cdelay = 5
Config Sda = Portc.1
Config Scl = Portc.0
Dim A As Byte , B As Byte
I2cstart
Do
W:
A = Getkbd()
If A > 15 Then Jmp W
Home : Lcd ; A ; " "
I2csend &H40 , A
Loop
End[/code]
اینم برنامه گیرنده
[code=vb]$regfile = "m8def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , Rs = Portb.0 , E = Portb.1
Cursor Off
Cls
Config I2cdelay = 5
Config Sda = Portc.4
Config Scl = Portc.5
Dim A As Byte
I2cstart
Do
I2creceive &H40 , A
If A < 16 Then
Home : Lcd ; A ; " "
End If
Loop
End[/code]
اضافه شده در تاریخ :
یه چی یادم رفته بود بگم
اونم اینه که مدار رو توی عمل هم که میبندم باز وضعیت همون طوری هست که توی پست بالایی گفتم
یعنی عددی که میکروی slave نشون میده چرت و پرت هست
من یه ارتباط i2c بین دو میکرو مگا32 و مگا8 بوجود آوردم و میخوام یه اطلاعاتی بین این دو میکرو رد و بدل کنم
برای تست یه مدار ساده بستم که سمت مگا 32 یه کیپد رو میخونه و اطلاعات کیپد رو از طریق i2c به مگا8 فرستاده میشه و مگا8 هم این اطلاعات رو روی lcd نشون میده
مشکلی که دارم اینه که اعداد درستی نشون داده نمیشه ، مثلا اگه روی کیپد عدد 5 رو بزنی روی السیدی هر عددی نشون میده غیر از 5
این کل فایلای مدار
http://cld.persiangig.com/dl/pILLK/TuGNQuTI6v/New%20folder.rar
این شماتیکم

این برنامه فرستنده
[code=vb]$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , Rs = Portb.0 , E = Portb.1
Cursor Off
Cls
Config Kbd = Porta
Config I2cdelay = 5
Config Sda = Portc.1
Config Scl = Portc.0
Dim A As Byte , B As Byte
I2cstart
Do
W:
A = Getkbd()
If A > 15 Then Jmp W
Home : Lcd ; A ; " "
I2csend &H40 , A
Loop
End[/code]
اینم برنامه گیرنده
[code=vb]$regfile = "m8def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , Rs = Portb.0 , E = Portb.1
Cursor Off
Cls
Config I2cdelay = 5
Config Sda = Portc.4
Config Scl = Portc.5
Dim A As Byte
I2cstart
Do
I2creceive &H40 , A
If A < 16 Then
Home : Lcd ; A ; " "
End If
Loop
End[/code]
اضافه شده در تاریخ :
یه چی یادم رفته بود بگم
اونم اینه که مدار رو توی عمل هم که میبندم باز وضعیت همون طوری هست که توی پست بالایی گفتم
یعنی عددی که میکروی slave نشون میده چرت و پرت هست
دیدگاه