Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 12 gru 2024, o 15:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 24 sie 2015, o 20:48 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 224
Lokalizacja: Opole
Pomógł: 24

Witam

Próbuję uruchomić komunikację po I2C pomiędzy dwoma atmegami Atmega 644PA jako slave i Atmega8 jako master.

Z Atmegi8 wylatują dane (sprawdzane na oscyloskopie, komunikowałem procka z akcelerometrem także kod od mastera jest ok) ale nie mogę ich odebrać - dostaję cały czas status 0xF8 przy odczycie z TW_STATUS.

Wysyłałem też dane tak jak to robiłem z akcelerometrem (zmieniłem adres slave`a na taki jak acc...), ale również bez skutku.

Dane z TW_STATUS odczytywałem przez UARTA.

SDA i SCL oczywiście podciągnięte do VCC (4,7k)

i2c_slave.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i2c_slave.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


master.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 27 sie 2015, o 22:49 przez ps19, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2015, o 23:28 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

A co z plikiem main.c układu slave?

W układzie slave ustaw maskę TWAMR na 0xFE i wtedy każdy adres będzie dobry.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sie 2015, o 18:49 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 224
Lokalizacja: Opole
Pomógł: 24

plik main_slave.c

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sie 2015, o 19:11 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Dodaj opóźnienie w tej pętli while, bo procesor będzie co chwilę w przerwaniu od wysłania bajtu. Za dużo przerwań jednego rodzaju powoduje opóźnioną reakcję przerwania o niższym priorytecie.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sie 2015, o 14:44 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 224
Lokalizacja: Opole
Pomógł: 24

1.Do wysłania danych adres musi być parzysty. Zmieniłem adres na parzysty i zaczęło działać.

Zrobiłem funkcję do wysyłania kilku parametrów, ale o ile mogę wysłać jeden parametr to w przypadku jak wysyłam "identyfikator" , a potem chcę odebrać odpowiednie dane to w rejestrze TWDR slave`a dostaję adres odbioru (adres +1) .

Funkcja odbierająca (master):

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Slave main:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sie 2015, o 13:11 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 224
Lokalizacja: Opole
Pomógł: 24

Chyba znalazłem w czym leży problem:

Errata procka:
Kod:
2. TWI Data setup time can be too short
When running the device as a TWI slave with a system clock above 2MHz, the data setup time for the first
bit after ACK may in some cases be too short. This may cause a false start or stop condition on the TWI
line.
Problem Fix/Workaround
Insert a delay between setting TWDR and TWCR.


Teraz pytanie jak zrealizować to opóźnienie skoro ustawianie TWDR jak i TWCR odbywa się w prerwaniu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sie 2015, o 20:05 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 224
Lokalizacja: Opole
Pomógł: 24

refresh



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sie 2015, o 23:42 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3206
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

Nie odświeżamy tematów...

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO