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



Teraz jest 9 maja 2026, o 14:46


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 16 lut 2016, o 15:39 
Offline
Użytkownik

Dołączył(a): 09 kwi 2014
Posty: 25
Pomógł: 0

Witam serdecznie użytkowników forum.

Mam problem z dogadaniem się z układem PCF8583. Jest on podłączony do atmegi sygnałami SDA oraz SCLK, zasilanie jest (sprawdzałem multimetrem), przerwania na INT działają bo podpięta tam diodka ładnie świeci co ok sekundę. Z pomocą książki p. Mirka naskrobałem kilka prostych funkcji do obsługi I2C i chciałem sobie wyświetlić godzinę na ekranie LCD (stosowne funkcje do LCD działają poprawnie). Jednak nie mogę za nic w świecie się dobrać do tego mojego zegarka ... Funkcja main wygląda następująco :

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


wyświetlacz nie wyświetla tekstu, po zakomentowaniu I2C_write_buff wszystko działa.

Czyli problem jest w w/w funkcji. Oto ona:

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


I tu się chyba wszystko sypie. W celu debugowania sprawdzam sobie linijka po linijce gdzie przestanie mi wyświetlać cokolwiek na wyświetlaczu. Okazuje się że w miejscu

I2C_write(address);

procesor utknie i dalej nie pójdzie ... ale linijkę wyżej jest dokładnie ta sama funkcja z adresem urządzenia i wszystko śmiga do tej pory. Czy ktoś jest mi w stanie pomóc ?

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 16:06 
Offline
Moderator
Avatar użytkownika

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

Po pierwsze to na DVD masz w pełni działający kod, po drugie w funkcji bibliotecznej I2C_write_buff() z książki nie ma żadnego błędu ...

a skoro ci nie działa to znaczy , że niechybnie zbaboliłeś połączenia tylko jak zwykle to bywa - każdy początkujący zarzeka się jak nie powiem kto i czego, że ma od strony sprzętowej WSZYSTKO dobrze - więc po co tam schemat pokazywać jak to łączy no nie ? ;) ... a tymczasem to zwykle tu się każdy wykłada (podpowiem, że wcale nie chodzi o same poprawne połączenia SDA i SCL) ...

druga sprawa to dlaczego nie skorzystasz jak mówię z gotowego kodu na DVD i do tego ze sprzętowego TWI .... Zabrałeś się za bibliotekę do programowego I2C a ta biblioteka bez zmian w kodzie powinna być odpalona co najwyżej na taktowaniu 8MHz więc jeśli masz większe to już masz problem

_________________
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: 16 lut 2016, o 16:35 
Offline
Użytkownik

Dołączył(a): 09 kwi 2014
Posty: 25
Pomógł: 0

a więc problemem może być prędkość taktowania, bo schemat jest ten sam co na ATB 1.04.

Pewnie w takim razie wypada ustawić taktowanie na odpowiednie w jakiejś funkcji inicjalizującej tak ?

Będę kombinował zatem dalej, dziękuję za porady :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 16:44 
Offline
Moderator
Avatar użytkownika

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

Taktowanie procka chcesz funkcją ustawiać ? .... a jak myślisz do czego są fusebity ?

_________________
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: 16 lut 2016, o 16:48 
Offline
Użytkownik

Dołączył(a): 09 kwi 2014
Posty: 25
Pomógł: 0

nie nie nie ... nie taktowanie procka. Taktowanie magistrali I2C na 100kHz lub 400kHz. Ale może najpierw spróbuję faktycznie obniżyć do wewnętrznego 8MHz taktowanie procka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 16:50 
Offline
Moderator
Avatar użytkownika

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

no ja o taktowaniu procka mówiłem na potrzeby soft I2C

_________________
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: 16 lut 2016, o 17:12 
Offline
Użytkownik

Dołączył(a): 09 kwi 2014
Posty: 25
Pomógł: 0

a jeśli mam taktowany procek zewnętrznie 16MHz to oprócz ustawienia konkretnych rejestrów żeby I2C śmigała z prędkością 400kHz lub 100kHz to trzeba jeszcze coś zmieniać ? Bo dość wymagane jest w mojej aplikacji to 16MHz na procku i zastanawiam się czy da się wtedy współpracować z PCF8583 (spodziewam się żę można ;) )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 17:40 
Offline
Moderator
Avatar użytkownika

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

Już pisałem tobie, że robisz (nie obraź się bez sensu) .... że robisz to na programowym I2C zamiast na sprzętowym TWI bo wtedy będzie działać niezależnie od taktowania procka i będzie działać funkcja do ustawiania prędkości I2C. A dla programowego i2c ona nie działa - więc mówię - przekombinowujesz wszystko do góry nogami troszkę ... tak mi się wydaje. I tym bardziej jeśli robisz programowe i2c to zapomnij o 400 kHz

_________________
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: 16 lut 2016, o 17:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2014
Posty: 438
Lokalizacja: Zambrów
Pomógł: 22

mefimess napisał(a):
I tu się chyba wszystko sypie. W celu debugowania sprawdzam sobie linijka po linijce gdzie przestanie mi wyświetlać cokolwiek na wyświetlaczu. Okazuje się że w miejscu

I2C_write(address);

procesor utknie i dalej nie pójdzie ... ale linijkę wyżej jest dokładnie ta sama funkcja z adresem urządzenia i wszystko śmiga do tej pory. Czy ktoś jest mi w stanie pomóc ?

Może masz zły adres układu? Sprawdź jaką masz wersję z "A" czy bez i wtedy dobierz odpowiedni adres. Może wtedy przejdzie tę linijkę. A tak poza tym to wszystko to co mówi Mirek :D

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 19:28 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Pokaż cały kod, bo tak mało informacji i ciężko pomóc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 20:47 
Offline
Użytkownik

Dołączył(a): 09 kwi 2014
Posty: 25
Pomógł: 0

Dziękuję Panowie za dotychczasową pomoc.

Aczkolwiek mam pytanie p. Mirku - jak to zrobić 'sprzętowo' ? W bluebooku jest chyba tylko ten 'programowy' sposób albo coś przeoczyłem ? Czym one się różnią ?

P.S. A i na przyszłość - absolutnie się nie obrażam, wręcz dziękuję za słowa krytyki, bo jeśli krytyka jest słuszna (a w tym wypadku istotnie chyba jest) to wtedy człowiek staje się lepszy i nie popełnia głupich błędów :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 21:01 
Offline
Moderator
Avatar użytkownika

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

mefimess napisał(a):
Aczkolwiek mam pytanie p. Mirku - jak to zrobić 'sprzętowo' ? W bluebooku jest chyba tylko ten 'programowy' sposób albo coś przeoczyłem ?

Ostatnio mówiłem tak do SunRivera ale i do ciebie powiem, za to co w cytacie - no normalnie tylko nasłać na ciebie milicję obywatelską :lol: .... no panie kochany , panie kochany litości - poczytaj wyżej ci pisałem - już DWA RAZY pisałem a teraz TRZECI ale przysięgam ostatni.

Dlaczego rzuciłeś się na programowy i2c zamiast na sprzętowy TWI ( toż TWI to I2C) i jest w bluebooku .... no ręce i pałki milicyjne opadają ;)

mefimess napisał(a):
A i na przyszłość - absolutnie się nie obrażam,

To się cieszę bo ja w żadnym momencie nie mam zamiaru nikogo obrażać ;) ... wszystko co mówię to jest żartobliwie i w tonie przyjacielskim a nie jakiejś chorej krytyki i zadufania .....

Więc w tył zwrot panie kochany i dawaj na TWI - 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: 16 lut 2016, o 21:03 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Obydwie wersje są w bluebook. Programowa to taka gdzie stany na pinach ustawiasz sam sam taktujesz linię scl i sam wysyłasz dane na sda a sprzętowe twi to wewnętrzny moduł który za nas to robi my musimy tylko odpowiednio ustawić jego rejestry.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 21:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 sie 2013
Posty: 795
Lokalizacja: Poznań
Pomógł: 59

Ze swojej strony proponuję sprawdzić adres na I2C - są dwa kodowania na 7 i 8 bitach. Arduino ma te krótsze...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 21:13 
Offline
Użytkownik

Dołączył(a): 09 kwi 2014
Posty: 25
Pomógł: 0

Takie podejście do ucznia powinno być wszędzie ;)

Hmmm... chyba się tu nam wkradła mała pomyłka, bo jak teraz tak patrzę do BB to ja korzystam z rozdziału "RTC - sprzętowa implementacja TWI" i stamtąd sobie rozumowałem funkcje i starałem się je użyć u siebie - tylko przedrostki zamiast TWI_* dawałem I2C_* bo tak jak Pan mówi to jest to samo a mi jakoś bardziej I2C_* podchodzi, sam nie wiem czemu. Dlatego całkiem możliwe że po prostu mam taktowanie 16MHz i to mi psuje wszystko, bo resztę mam tak jak w tym rozdziale. Sprawdzę co i jak i dam znać jak mi się coś uda wykombinować.

Pozdrawiam ! :)

@Bartek123:
Teraz chyba rozumiem różnicę i z tego co patrzę to rzeczywiście bazuję na sprzętowych rozwiązaniach tylko nieporozumienie jest w nazwach moich funkcji. Sprawdzę taktowanie procka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 21:26 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Jak masz sprzętową wersję to powinno ci ruszyć nawet przy 20mhz prześlij cały kod z wszystkimi funkcjami, bo tak ciężko powiedzieć chociaż chyba wiem co robisz źle jest taka linika w bluebook np DDRC = (1<<7) i ważne w tym jest to, że niema tam | A ty pewnie robisz tak DDRC |= (1<<7).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 22:17 
Offline
Użytkownik

Dołączył(a): 09 kwi 2014
Posty: 25
Pomógł: 0

Ruszyło.

Nie mam pojęcia co, nie mam pojęcia jak - ruszyło. Zostało to okupione co prawda jednym programatorem, odnalezieniem starego (hoho ! mój pierwszy zbudowany układ elektroniczny) programatora, zablokowania w jakiś sposób atmegi, znalezienia innej.

Ale było warto :) Teraz szukam przyczyn i analizuję.

Pozdrawiam wszystkich !



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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