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



Teraz jest 16 sty 2025, o 10:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 9 maja 2013, o 13:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Witam!
Otóż w swoim projekcie potrzebuję skomunikować się z układem DS1307 (RTC) poprzez I2C.
Do tego wykorzystuję kody z książki Pana Mirka.

Problem w tym, że coś jest jakby nie tak z funkcją TWI_stop() - do momentu tej funkcji, wszystko w programie działa i zostaje wysłane do DS-a, przy odbiorze wszystko też ładnie chodzi i układ RTC podaje poprawnie godzinę (wiem to tylko dzięki temu, że mam prosty analizator stanów i na nim widzę transmisję).
Niestety kiedy dochodzi do funkcji TWI_stop(), to program się zatrzymuje, tak jakby ostatni warunek w tej funkcji nigdy nie został spełniony. Kiedy usunąłem z końca procedury TWI_read_buf() linijkę TWI_stop(), program działał bez problemu.

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


Gdzie szukać przyczyny?
Bo jednak ten warunek na końcu wydaje się być poprawny, a jednak zawiesza program.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2013, o 13:45 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27346
Lokalizacja: Szczecin
Pomógł: 1041

przyczyny szukać w sprzęcie bo masz pewnie problem sprzętowy i to bez dwóch zdań. OCZUWIŚCIE że MUSI być ten STOP ;) a funkcje z książki działają bardzo dobrze, jak nie to - jeszcze raz powiem problem sprzętowy.

Zatem jak zadajesz takie pytanie to schemat panie kolego - schemat ....

zresztą od razu zapytam

1. Masz rezystory podciągające SDA i SCL do VCC ? bo jak nie to już masz ZONK'a

2. zasilasz RTC i procek tym samym napięciem czy różnym ? bo jak różnym a nie masz konwersji poziomów to już masz ZONK'a

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2013, o 14:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Dziękuję za szybką reakcję.
Domyślam się, że funkcje są ok, bo już byłyby poprawki dostępne, a niestety nie ma.. Więc gdzieś u mnie problem.
Pull-up'y są, napięcie to samo do procka i RTC.
I tak jak mówię, wszystko da się zapisać, odczytać z układu, na analizatorze widać pięknie transmisję. Tylko właśnie po napotkaniu stop jest problem.

Poniżej schemat.
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2013, o 14:14 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27346
Lokalizacja: Szczecin
Pomógł: 1041

No ok teraz lepiej to wygląda - rzeczywiście pulupy są ok, zasilanie też takie samo ...

hmm a tak na szybko może odłącz pamięć EEPROM ... może jakaś kolizja ?

aha no i najważniejsze ja pisałem te procedury do PCF8583 - musisz sprawdzić czy jest podobna sekwencja dla twojego RTC w nocie PDF ... jeśli chodzi o odczyt całego bufora ...

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2013, o 14:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

EEPROMA może faktycznie odłączę, ale mam w smd, więc mi się nie spieszy, muszę być pewny że trzeba. Bo lutownica zwykła;p

Co do sekwencji i kolizji. Wszystko powinno być ok. Przecież udało mi się poprawnie zaprogramować rejestr konfiguracyjny i czas RTC. I również bez problemu te wartości odczytuję i są poprawne. No tylko tyle, że wiem to dzięki analizatorowi, bo procek po STOPIE tkwi w miejscu i nic już z odczytanymi wartościami nie mogę zrobić.

Używam tej wersji oprogramowania bez ustawień bitrate, więc prędkości transmisji w żaden sposób nie konfigurowałem. Częstotliwość na linii SCL wynosi wg analizatora 62kHz. Choć nie wiem, czy to ważne.

Poniżej jeszcze sekwencja odczytu danych z noty RTC, żeby rozwiać z tym związane wątpliwości.
Obrazek

------------------------ [ Dodano po: 47 minutach ]

Myślałem, że to może ten ostatni warunek:

while (!(TWCR&(1<<TWSTO)));

ale teraz go usunąłem i nadal to samo.
Tak jakby ustawianie bitu TWSTO blokowało procka.
Usunąłem TWSTO z linijki
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
i chodzi. Wiem, że tak zostać nie może, tylko właśnie chciałem pokazać, że przez ustawianie TWSTO coś się dzieje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2013, o 15:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27346
Lokalizacja: Szczecin
Pomógł: 1041

Dobrze ale przede wszystkim jaką częstotliwością taktujesz procka ?

wiesz - bo nie ma sensu rozpatrywać przypadku dlaczego działa jak usunę stop bo to NIENORMALNA sytuacja, więc zajmijmy się sytuacją POPRAWNĄ ;)

a zatem zacznij też od ustawienia prędkości 100 kHz na I2C funkcją I2c_setbitrate() .... ona jest w aktualizacjach jeśli nie masz jej na DVD

bo jeśli taktujesz procka więcej niż 8MHz to znowu może być zonk bez ustawienia prędkości. Domyślną prędkością i pewną dla wszystkich scalaków jest właśnie 100 kHz i od tego zacznij - to też podstawa

pamięci SMD w sumie nie musisz całej wylutowywać tylko dwie nóżki nieco do góry podnieść SDA i SCL lutownicą ;) albo i ścieżkę ciachnąć nożykiem tak aby później jedną kroplą cyny połączyć

zobaczysz że wszystko w końcu ruszy ;) tak jak ma działać

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2013, o 16:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Procesor jest taktowany wewnętrznie 1MHZ, tzn po prostu nic w fusach dotyczących taktowania nie zmieniałem, więc mam tyle ile jest jako domyślne.

Faktycznie, po ustawieniu za pomocą I2c_setbitrate() częstotliwości na 100kHz wszystko działa. Aczkolwiek dziwne, bo częstotliwość na linii SCL znów zmierzona analizatorem wynosi teraz niby 27kHz. Co jak co, ale najważniejsze, że w końcu działa!

------------------------ [ Dodano po: 32 minutach ]

Ustawiłem fusy tak, by z wewnętrznego RC mieć taktowanie procka 8MHz.
Zmieniłem ustawienia w eclipsie też na 8000000 i wszystko śmiga ok i częstotliwość SCL teraz faktycznie jest 100kHz.
Dzięki mirekk36 za pomoc!!!:-)



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: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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