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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.