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



Teraz jest 7 lut 2025, o 16:04


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 ]
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: 27354
Lokalizacja: Szczecin
Pomógł: 1042

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: 8605
Pomógł: 337

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: 27354
Lokalizacja: Szczecin
Pomógł: 1042

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: 27354
Lokalizacja: Szczecin
Pomógł: 1042

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: 27354
Lokalizacja: Szczecin
Pomógł: 1042

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: 27354
Lokalizacja: Szczecin
Pomógł: 1042

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 1 gość


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