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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 15 lip 2025, o 18:50


    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: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    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ł: Majestic-12 [Bot] i 3 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