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 10 lip 2025, o 01:19


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
    Autor Wiadomość
    PostNapisane: 14 kwi 2012, o 22:18 
    Offline
    Użytkownik

    Dołączył(a): 18 lut 2012
    Posty: 50
    Pomógł: 0

    Witam
    Po rozpracowaniu PWM'a przeszedłem do rozdziału o I2C i zatrzymałem się na obsłudze godziny ponieważ nie potrafię jej ustawić tzn. niby ją programowo ustawiam ale i tak zawsze wyświetla mi się godzina 24:24:24. Co z tym zrobić i dlaczego tak się dzieje bo jestem trochę zaskoczony tą sytuacją gdyż niby wszystko mam ok (eklips nie wyrzuca mi żadnego 'errora") a jednak nie działa.
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    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: 14 kwi 2012, o 22:25 
    Offline
    Moderator
    Avatar użytkownika

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

    Sprawdź czy masz dobrze ustawiony fizycznie adres I2c scalaka PCF8583 czy na pewno A2. Masz tam zworki i można go zmieniać. Jeśli masz zestaw ATB to nie ma siły żeby ten przykład nie działał poprawnie ;)

    _________________
    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: 14 kwi 2012, o 23:07 
    Offline
    Użytkownik

    Dołączył(a): 18 lut 2012
    Posty: 50
    Pomógł: 0

    Nie mam zestawu ATB ale w instrukcji pdf mojego układu są napisane dwa (dla RTC) adresy 0xA3 dla odczytu i 0xA2 dla zapisu tak więc w tym raczej nie leży przyczyna mojego problemu



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 kwi 2012, o 23:48 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    a może kolega poda jaki układ bo po adresach ja nie będę zgadywał
    przykładowo dla DS1307 nie wystarczy tylko zmienić adresów odczytu i zapisu

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 kwi 2012, o 08:55 
    Offline
    Użytkownik

    Dołączył(a): 18 lut 2012
    Posty: 50
    Pomógł: 0

    układ to PCF8583



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 kwi 2012, o 09:58 
    Offline
    Moderator
    Avatar użytkownika

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

    A ten drugi układ ? Kolego - no nie pozwól żeby ciebie ciągnąć tak za język - jeśli nie masz zestawu ATB to żaden problem ale wypadałoby podać albo schemat połączeń jeśli sam sobie zrobiłeś układ albo schemat tego zestawu co masz czy jakiś link do schematu z tym zestawem....

    Gdyby się okazało że masz pewien zestaw Gotronika - to masz DUŻY problem - bo oni w jednym ze swoich zestawów, który nomen omen do dzisiaj sprzedają w takiej zbabolonej wersji - umieścili dwa scalaki właśnie:

    PCF8583 i jakiś EEPROM (nie pamiętam już symbolu tej pamięci) ale w postaci SMD czyli przylutowane dla pełni szczęści i CO NAJGORSZE obydwa scalaki gryzą się jeśli chodzi o adresy na magistrali I2C. W efekcie końcowym nie można odczytać i zapisać prawidłowo ani RTC ani EEPROM - chyba że się samemu wylutuje albo jedno albo drugie

    dlatego zrozum - przy takich pytaniach - jeśli nie mówimy o standardowej tu platformie ATB - to wręcz wypada podać / pokazać schemat - OK ?

    _________________
    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: 15 kwi 2012, o 11:43 
    Offline
    Użytkownik

    Dołączył(a): 18 lut 2012
    Posty: 50
    Pomógł: 0

    http://and-tech.pl/pl/download/evb43-v4 ("Instrukcja EvB4.3 v4 (2.36 MB)")
    Na stronie 13 jest opisany układ PCF i EEPROM



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 kwi 2012, o 13:27 
    Offline
    Moderator
    Avatar użytkownika

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

    A no to trzeba było tak od razu - w tym zestawie nie ma tego problemu o którym pisałem ....

    A błąd popełniłeś ty sam - zajrzyj sobie do książki i jednak doczytaj jak działają funkcje

    I2C_read_buf()
    I2C_write_buf()

    bo na pewno tego nie zrobiłeś jeszcze :( .... ale nic straconego ;) .... jeszcze raz pokazuję ci na takim przykładzie, że książka nie powstała po to, żeby dać gotowe biblioteki do czegoś tam - tylko ja staram się uczyć żeby połączyć przyjemne z pożytecznym czyli ucząc się programować przy okazji popełnić jakieś użyteczne na co dzień biblioteki

    a niestety (jeszcze raz przypomnę) wiele osób o tym zapomina i próbuje traktować je jako gotowce .... a tymczasem po chwili wychodzi na to że bez zrozumienia ich od podstaw - co rusz będą problemy z ich wykorzystaniem.

    -------------------
    NAPROWADZENIE NA BŁĄD:

    reasumując - zobacz dokładnie w przykładowym kodzie w książce w jaki sposób ja przekazuję adres układu (UWAGA!!!) do obydwu wyżej wspomnianych funkcji - a jak ty to robisz

    mam nadzieję że jak zauważysz różnicę - to skłoni cię to do zajrzenia do samych funkcji o których tu mowa i ich teraz już pełne zrozumienie - nie wspominając o tym że są bardziej przyjazne w użytku niż myślałeś - patrząc na ten kod który tu napisałeś wyżej ;)

    czego ci życzę - a jak coś to pytaj śmiało dalej

    _________________
    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: 15 kwi 2012, o 13:53 
    Offline
    Użytkownik

    Dołączył(a): 18 lut 2012
    Posty: 50
    Pomógł: 0

    Zauważyłem, że chodziło Tobie o adresy do których się odwołuję jednak w takim razie proszę Cię o wytłumaczenie mi po jakiego diabła są tam aż dwa adresy (odczyt i zapis) przecież logicznie myśląc jeżeli są dwa i to podpisane odczyt i zapis to aż się chce mimo woli ich użyć a okazuje się, że wcale tak nie jest. Oczywiście zmieniłem te adresy w programie i hula wielkie dzięki za naprowadzenie na błąd.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 kwi 2012, o 14:05 
    Offline
    Moderator
    Avatar użytkownika

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

    Po jakiego diabła ? ;) - podoba mi się to pytanie i już odpowiadam

    Ale obiecaj że doczytasz o podstawach komunikacji I2C bo tu też widzę braki - OK ?

    otóż to czy masz zapis czy odczyt - zależy od najmłodszego bitu w pierwszym przesyłanym bajcie także adresu....

    Po choinkę więc mam sobie zawracać łeb - i pamiętać kiedy mam użyć adresu 0xA2 a kiedy 0xA3 - gdy nieraz nazwy funkcji są niewiele mówiące ???? no po co ???? Przecież funkcja

    i2c_write_buf() sama wie że ma zapisać - tak ??? No to też sama sobie ustawi ten najmłodszy bajt na 1 i od razu zrobi się 0xA3 zgadza się ???

    a funkcja

    i2c_read_buf() sama wie że ma odczytać tak ??? więc nigdy sama nie ustawi sobie tego bitu i poleci 0xA2

    i teraz dzięki temu ZAWSZE mogę sobie gdzie bym nie chciał używać tzw adresu BAZOWEGO

    przez to właśnie pokazuję w książce dobrą technikę programowania - jak tworzysz funkcje to rób to tak żeby później sobie usprawnić życie a nie utrudnić - bo potem to sam przyznaj jest tak:

    - kurdę jaki tu adres użyć 0xA2 czy 0xA3 ... a może 0xA0 ... nie zaraz a może jednak 0xA2 --- hmmm a może 0xA3

    a po DIABŁA mi to ???? ;)

    w moich programach i bibliotekach - ja zawsze użyję 0xA2 i już

    teraz jaśniej ? ;)

    _________________
    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: 15 kwi 2012, o 14:16 
    Offline
    Użytkownik

    Dołączył(a): 18 lut 2012
    Posty: 50
    Pomógł: 0

    Czyli jeżeli dobrze rozumie to nie ważne pod który adres(oczywiście taki który mogę) zapiszę ale ważne jakich komend użyję wewnątrz funkcji, która wykonuje polecenie? A rozdział doczytam tylko troche mnie powstrzymał ten incydent zegarowy :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 kwi 2012, o 14:29 
    Offline
    Moderator
    Avatar użytkownika

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

    Musisz zacząć od przeczytania panie kochany bo dlatego nie rozumiesz -

    pomyśl czym różni się 0xA2 od 0xA3 ---> no tylko tym, że najmłodszy bit (ten odpowiedzialny za operację ZAPIS/ODCZYT) jest inny

    jeśli dla innego układu masz np adres do odczytu 0xC0 - to dzięki takim fajnie przygotowanym funkcjom używasz tylko tego adresu bazowego - co za problem żeby i2c_write_buf() ustawiło sobie wewnątrz najmłodyszy bit na 1 dzięki czemu automatycznie wyśle 0xC1

    a ty nie będziesz musiał wciąż pamiętać i mylić się z tymi adresami

    dlatego właśnie w moich przykładach masz na stałe zdefiniowane np:


    Kod:
    #define PCF8583_ADDR 0xA2

    #define _24C04_ADDR 0xA8


    rozumiesz ? ;) - dzięki temu funkcje zapisujące same ustawiają sobie najmłodszy bit i robią automatycznie adres do zapisu czyli 0xA3 dla RTC albo 0xA9 dla EEPROM ;) po co ja - jako programista użytkownik takich bibliotek mam wykonywać tą czarną robotę - niech biblioteki robią to za mnie ;)

    i tak podchodź do programowania również dla siebie - jakbyś robił dla kogoś - to zobaczysz jak szybko docenisz rezultaty i jakość ;)

    _________________
    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO