Skocz do zawartości

[Bascom] 2 x Atmega32, połączenie przez I2C


kasztan_85

Pomocna odpowiedź

Witam, zmieniam zupełnie posta ponieważ w końcu udało mi się doprowadzić 2 atmegi32 do komunikacji więc podzielę się rozwiązaniem.

Zasadniczo to co zostało opisane w artykule jest ok, ale żeby I2C (TWI) działało poprawnie potrzebne są dodatkowe 3 linijki kodu

$lib "I2C_TWI.LBX"
I2cinit                                                     '
Config Twi = 400000

$lib "I2C_TWI.LBX" - odwołanie do biblioteki sprzętowej obsługi TWI

I2cinit - inicjacja sprzętowego TWI, reset stanów na liniach

Config Twi = 400000 - stała określająca częstotliwość zegara taktującego SCL. ( 100KHz albo 400KHz )

Poniżej zamieszczam przykład działającego kodu.

Nadajnik:

$regfile = "m32def.dat"
$crystal = 16000000
$lib "I2C_TWI.LBX"

Config Sda = Portc.1
Config Scl = Portc.0

I2cinit                                                     '
Config Twi = 400000

Dim I As Byte

Do
For I = 0 To 250
Gosub Wyslij
Wait 1
Next
Loop
End

Wyslij:
I2cstart
I2cwbyte I
I2cstop
Return

Odbiornik:

$regfile = "m32def.dat"
$crystal = 16000000
$lib "I2C_TWI.LBX"

Config Lcdpin = Pin , Rs = Portd.0 , E = Portd.1 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcd = 16 * 2
Config Sda = Portc.1
Config Scl = Portc.0

I2cinit                                                     '
Config Twi = 400000

Dim A As Byte


Do

I2cstart
I2crbyte A , Nack
I2cstop

Lcd A
Wait 1
Cls

Loop
End
Link do komentarza
Share on other sites

Mylisz dwa różne sposoby komunikacji przez I2C.

Biblioteka, którą wywołujesz na początku dotyczy działań na Hardware.

Opisując, które z portów będą liniami SCL i SDA dla I2C, wywołujesz procedury Software.

Reasumując - nie potrzebujesz deklarować biblioteki ...TWI... - nie używasz jej.

>>>

A tak z ciekawości, masz w ogóle zainstalowane takowe biblioteki?

Link do komentarza
Share on other sites

Dnia 21.12.2012 o 00:18, ucy74 napisał:

cyt  "Opisując, które z portów będą liniami SCL i SDA dla I2C, wywołujesz procedury Software."

Nie zgadzam się,

Help na stronie mscelec mówi jasno że należy opisać które piny będą liniami SCL i SDA - właśnie dla sprzętowego TWI

O tym czy AVR będzie używał hardware czy software decyduje umieszczenie biblioteki $lib "I2C_TWI.LBX" w kodzie.

Trzeba podłączyć się do sprzętowej magistrali TWI (I2C) zgodnie z wyprowadzeniami dla danego procesora i właśnie komendą Config SDA Config SCL poinformować kompilator które są to piny.

https://avrhelp.mcselec.com/index.html?using_the_i2c_protocol.htm

 

Edytowano przez drum85
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.