Dwa port I2c w Atmega128

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
jacekb
-
Posty: 6
Rejestracja: 28 sty 2007, 20:04

Dwa port I2c w Atmega128

Post autor: jacekb » 29 sty 2007, 23:14

Jak w bascomie (programowy I2c) w czasie trwania programu zmienić „w locie” ustawienia portów SCL i SDA na inne piny.

Muszę mieć w jednym procesorze działające dwa porty I2C (nie muszą działać jednocześnie) tak, aby można czytać raz na jednym a po zmianie pinów SCL i SDA na drugim.

Umieszczenie polecenia np.:

Config Sda = Porte.5

Config Scl = Porte.6

I2cinit

Wewnątrz programu nic nie daje. Kompilator ustawia te linie SCL i SDA, które w tekście programu, zostały skonfigurowane (wystąpił wpis config…) jako ostatnie.


Proszę o radę jak to zrobić.

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 30 sty 2007, 13:33

A jaka to potrzeba stosowania drugiego I2C?
Przecież na jednej szynie może działać wiele urządzeń...

A może zrobić inaczej - zastosować układ CMOS4052?

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 30 sty 2007, 14:34

Config I2C można stosować tylko raz w programie

jacekb
-
Posty: 6
Rejestracja: 28 sty 2007, 20:04

Post autor: jacekb » 30 sty 2007, 20:22

Mam układ w którym pracują ze sobą dwa procesry i jeden z nich komunikuje się z drugim przez bufor - pamięć FRAM na i2c ( raz jeden jest masterem a raz drugi) oraz drugi z nich jeszcze z innym układem na i2c.
poterzebuję dwa porty I2c aby nie spowalniać wymiany danych między nimi.
Jeden zapisuje do FRAM a drugi w tym czasie może komunikować się z innym układem na I2c.
Troche to zawiłe ale konieczne.
Myślałe aby jeden z portów I2c zrobić w procedurach BASCOM (programowych) a inny w asemblerze.
Może ktoś ma jakieś ciekawe procedurki. Asembler nie jest moją mocną stroną

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 30 sty 2007, 20:30

Mieszasz... przecież mega128 ma dwa układy UART - dlaczego ich nie wykorzystasz?
Będzie i łatwiej, i ładniej...

jacekb
-
Posty: 6
Rejestracja: 28 sty 2007, 20:04

Post autor: jacekb » 30 sty 2007, 20:35

Tak wiem ale już są wykorzystane do komunikacji z PC
a zastosowania dodakowej pamięci - bufora w tym przypadku załatwia mi wiele problemów.

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 30 sty 2007, 20:54

Oba wykorzystane są do komunikacji z PieCem? Jeden chyba do tego celu wystarczy...

Drugi w tym czasie może służyć za uniwersalną magistralę M-M...

Asembler za dużo tu nie pomoże, a stanie się źródłem dodatkowych problemów...

Ale - wykorzystujesz sprzętowe TWI, czy korzystasz z innych końcówek?
Jeśli TWI jest niewykorzystane, zawsze możesz ręcznie ustawić odpowiednie rejestry w BASCOM-ie...

jacekb
-
Posty: 6
Rejestracja: 28 sty 2007, 20:04

Post autor: jacekb » 30 sty 2007, 21:53

Docelowo będzie potrzebny jeden UART drugi wykorzystuje jako podgląd danych (na czas uruchomienia programu) ale zastosowanie pamięci FRAM jest u mnie konieczne nie mogę i nie chcę połączyć dwóch procesorów bezpośrednio.
FRAM jest jakby "dyskiem twardym" z danymi dla obu procesorów.
Obecnie korzystam ze sprzętowego I2c (mam na myśli końcówki) ale zrobione jest to programowo. Na innych pinach chciałem zrobić komunikację z tym dodatkowym układem drugiego procesora (układ ma tylko interfejs I2c).

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 01 lut 2007, 11:32

A SPI między prockami?? jeden odczytuje z pamięci i przesyła do drugiego.

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 01 lut 2007, 13:20

michal17 pisze:A SPI między prockami??
Fakt... Jest jeszcze SPI - szybsze niż UART i TWI...
Jakoś mi z głowy wyleciało, ale to chyba byłoby dobre rozwiązanie...

jacekb
-
Posty: 6
Rejestracja: 28 sty 2007, 20:04

Post autor: jacekb » 01 lut 2007, 21:23

Myślałem o SPI ale mam już płytkę ( w założeniu miało byc po I2c) są nawet pamięci FRAM z iterjesem SPI. U mnie układ jest tak:

procesor_1 <------------> FRAM <-------------> procesor_2 <---------> (dodatkowe układy na I2c)

i taki chcę zachować. Nie ma być połączenia bezpośredniego między prockami.
Kombinuję już z wstawkami w asemblerze tak aby między 1 a 2 szło sprzetowo (TWI) a z 2 do dodatkowych układów programowo (po innych pinach) procedurami z BASCOM.

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 02 lut 2007, 12:55

może zastosuj cmos4053 do przełączania pamięci między prockami.

P.S. jaką pamięc masz pod i2c :?:
Ostatnio zmieniony 03 lut 2007, 15:00 przez Michał17, łącznie zmieniany 1 raz.

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 02 lut 2007, 13:06

michal17 pisze:może zastosuj cmos4053 do przełączania pamięci między prockami.
Już takie coś zaproponowałem parę postów wyżej...
A o uP też już jest napisane... dlaczego Kolega nie czyta dokładnie?

jacekb
-
Posty: 6
Rejestracja: 28 sty 2007, 20:04

Post autor: jacekb » 06 lut 2007, 20:19

:mrgreen: Udało się, zastosowałem wstawki asmeblerowe (I2C sprzętowe) i równocześnie mogę korzystać z poleceń BASCOM - progrmowo na innych pinach.

Dziekuję wszystkim za wszelkie porady :!:

ODPOWIEDZ