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



Teraz jest 28 kwi 2024, o 15:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 11 sie 2012, o 21:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Witam

Postanowiłem "pobawić się" trochę układem RTC PCF8563 i w tym celu sięgnąłem od książki Pana Mirosława Kardasia. Na podstawie informacji zawartych w książce, przykładowych kodów z płyty oraz informacji zawartych w notach katalogowych (mikrokontrolera i układu) zrobiłem sobie układ który wygląda mniej więcej tak jak na rysunku poniżej. Kod (załączony poniżej) jest to w zasadzie okrojona wersja przykładu. Do obsługi wyświetlacza 2x16 na HD44780 użyłem również przykładów z płyty (o ile pamiętam nic tam nie zmieniałem) i teraz w czym rzecz.

Z tego co wydedukowałem to w pętli głównej sprawdzane jest "wystawienie" flagi przerwanie INT0. Czyli jeśli nastąpi przerwanie, a z tego co wyczytałem w książce powinno ono następować z częstotliwością 1Hz więc co sekunde wystawiana jest flaga a tym samym wykonywany kod znajdujących się w "ifie", czyli odczytywany jest czas. Tylko że u mnie po podłaczeniu zasilania (zasilany układ z portu usb przez programator) pojawia się godzina która stoi w miejscu. Po wyłączeniu i ponownym załączeniu pojawia się inna godzina (zgodna z czasem jaki upłyną) czyli że niby tam wszystko działa tylko, układ odmierza czas ale nie jest to wyświetlane co sekunde, a tylko raz po załączeniu zasilania. Czyli ja tak wnioskuje że po prostu cały czas jest wystawiona flaga przerwania, tak jak by na początku po pierwszy odczycie nie została ona wyzerowana, ale w kodzie jest wszystko ok i nie rozumiem co może być nie tak. Układ budowałem sam bo nie mam zestawu uruchomieniowego a w sumie też chce się trochę pobawić elektroniką a nie tylko samym programowaniem ale błędu tam nie widze żadnego. Nie wiem, może ktoś będzie w stanie mi coś doradzić. To jest taki głównym probmem bo wogóle jeśli chodzi o samą obsługę wyświetlacza to też nie zawsze coś gra, bo czasmi po podłaczeniu programatora nic się nie wyświetla (przy zaprogramowanym uC) a po ponownym załaczeniu zasilania wszystko gra. Ale narazie przedewszystkim ciekawi mnie co jest nie tak z tym układem PCF8563 bo problem z wyświetlaczem może w końcu uda mi się samemu rozgryźć a narazie "przynajmniej czasmi" działa. :)

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


Schemat:
Obrazek

Z góry dziękuje za jakiekolwiek zainteresowanie tematem :)



Ostatnio edytowano 11 sie 2012, o 21:45 przez The River, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2012, o 21:41 
Offline
Moderator
Avatar użytkownika

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

Witam,

Tak na samym wstępie - przed analizą dalej to dopytam czy to tylko literówka ???? kolega użył scalaka PCF8563 czy PCF8583 ???

czy się po prostu dziabnął na maxa ? :( ........ Bo jeśli użyłeś rzeczywiście użyłeś scalaka PCF8563 to hmmm -

czy kolega nie widzi że to CAŁKIEM INNY SCALAK ???? (no może nie całkiem, jest nawet bardzo podobny - ale jednak inny)

- inne wyprowadzenia
- inna obsługa programowa

a tymczasem kolega pokazał schemat jak dla PCF8583 no i zastosował kod z książki dla PCF8583

toż to nie ma prawa działać z PCF8563 :(

_________________
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: 11 sie 2012, o 21:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

Jeśli jednak jest to PCF8563 to poczytaj od tego miejsca
topic1289-30


Autor postu otrzymał pochwałę

_________________
eDiyCraft.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2012, o 22:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Nie to nie była literówka, zastosowałem układ PCF8583 ponieważ taki akurat miałem, aczkolwiek podejżewałem na początku że faktycznie przykładowy kod pewno nie będzie działał, a tu prosze. Po przeanalizowaniu obu not katalogowych stwierdziłem że różnice nie są wcale duże np. ten sam adres układu slave do czytania i zapisu. Mapa pamięci się trochę różni i trochę kombinowałem w kodzie od której komórki rozpocząć zapis, efekty były różne ale w końcu zostawiłem tak jak było bo najlepiej dziłało. Jeśli chodzi o wyprowadzenia to różnica jest tylko w jednym pinie, 8583 ma A0 a 8563 ma CLKOUT ale tego wyjścia akurat nie użyłem a A0 z tego co pamiętam z książki służyło do zmiany adresu. Więc generalnie będąc świadomy różnic w tych układach postanowiłem zastosować ten kod i tak jak napisałem działa :) tylko cyfry na wyświetlaczu nie zmieniają mi się co sekunde. A układ faktycznie liczy, bo po wyłączeniu zasilania i jego załączeniu pojawia się godzina która powinna się pojawić (biorąc pod uwage czas który upłynął). Nawet sobie wpisałem godzine dzisiaj gdzieś koło południa żeby z zegarkiem systemowym zsynchornizować i teraz dalej pokazuje dobrą godzine. Ale poczytam jeszcze jutro obydwie te noty katalogowe i może nasuną mi się jakieś spostrzeżenia.

-------edit:

dzięki savian za link do tematu, przekope jeszcze raz jutro note katalogową, przynajmniej teraz wiem na co zwrócić szczególną uwagę



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2012, o 22:17 
Offline
Moderator
Avatar użytkownika

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

Ok dobrze - jak spojrzałem na twój schemat i symbol tego scalaka ;) .... to mi się wydało że jakoś zbyt mocno końcówki pomieszałeś ....

ale na pewno masz podłączony źle kondensator 22pF .... w tym scalaku ma być od OSCI do GND a ty podłączyłeś do VCC tak jak w PCF8583 - więc to wypada poprawić

No to teraz jak zwykle - skoro masz taki objaw jak opisałeś to wynika jakby się przerwanie nie generowało. A dlaczego może się nie generować ? no bo może coś źle jest podłączone wyjście INT od RTC do INT0 w procku - sprawdź połączenie i w ogóle sprawdź zwykłą diodą LED podłączając ją katodą do wyjścia INT scalaka RTC. Oczywiście przez rezystor do VCC i powinna sobie migać co sekundę wtedy będziesz miał pewność że masz w ogóle sygnał podawany na INT0

a potem to już rzeczywiście trzeba trochę nieco dopasować kod


Autor postu otrzymał pochwałę

_________________
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: 12 sie 2012, o 13:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Kondensator poprawiony a po podłączeniu diody tak jak Mirku mówiłeś brak reakcji, znaczy się przerwania nie były generowane, bo faktycznie nie były skonfigurowane. Po przeczytaniu tematu który kolega savian podesłał i po analizie kodu który z kolei kolega xbary w nim zamieścił oraz po ponownym zagłębieniu się w note katalogową udało się problem naprawić. W ogóle teraz bardziej "zaczaiłem" całą idę całej obsługi I2C przy pomocy modułu TWI więc dzięki Panowie za pomoc. Zmiany w kodzie jakie dokonałem zamieszczam poniżej gdyż może jeszcze komuś się przydadzą.

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

oraz plik główny main.c dodane 3 linie konfigurujące przerwanie

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

Reasumujac, biorąc pod uwagę drobne zmiany a w zasadzie parę dopisanych lini kodu, przykładowy kod do obsługi PCF8583 działa również na PCF8563 ale z jednym mały błędem. Mianowicie zauważyłem że przy sekundach powyżej 40 dziesiątki godzin przeskakują na 5. Ale już w następnej minucie dla sekund od 0 do 40 liczba dziesietna godzin wraca do prawidłowej i tak w kóło, przeskakuje na 5 i wraca. Ale jak rozwiązać ten problem to już będę się starał samemu dojść. Narazie jeszcze raz dzięki wielkie za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sie 2012, o 13:24 
Offline
Moderator
Avatar użytkownika

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

a czy nie masz przypadkiem na tej samej magistrali I2C jeszcze jakiejś pamięci EEPROM ? ;) aprop'os tych skaczących sekund ?

_________________
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: 12 sie 2012, o 16:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Nie, nie używam żadnej pamięci EEPROM.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2012, o 16:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Witajcie, mam pewien problem odnośnie tej komunikacji. Posiadam ATtiny 2313, skorzystałem z implementacji programowej I2C. Kodów użyłem z książki Pana Mirka. Chciałem sprawdzić jak pracuje ten PCF jednak po wgraniu wsadu pokazuje mi się tylko

[start. . . #########]
[165:165:165 ]

i nic się wiecej nie dzieje. Dodałem funkcję które wyczytałem z postów The river'a i nic. Mozliwe, że mam coś źle w kodzie i tego nie widzę. Nurtuje mnie jeszcze jedno pytanie, złożyłem układ PCF8563 według schematu z książki i gdy zasilam tylko baterią cr2032 to na pinach VCC i GND PCF mam 3.14V, jednak gdy zasilam układ z portu USB na układzie PCF jest 3.19 V, inaczej jak wyjmę baterie i zasilam tylko z USB jest 1.25V na PCF. Jest to normalne ??

Proszę o sprawdzenie kodu, w pozostałych plikach nic nie zmieniałem poza zmianą pinów i dopisania funkcji w pliku i2c_soft.c
Kod:
void TWI_write_byte( u08 device, u08 adr, u08 bajt)


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

[plików bibliotek nie umieszczamy na forach - czy kolega nie wiedział o tym? - mirekk36]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2012, o 20:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

Zarzuć schemat. Piszesz że złożyłeś schemat wg książki, a dla PCF8563 kondensator przy kwarcu należy podłączyć do GND, a nie do VCC.

_________________
eDiyCraft.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2012, o 20:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Tak, tak o tym pamiętałem 22p są podłączone do GND.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2012, o 20:31 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

no to zarzuć pan schematem ;)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2012, o 20:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

schematu obecnie nie mam, ale jest prawie identyczny jak kolegi The river'a w pierwszym poście. rozni się tylko tym że ja mam ATtiny 2313, rezonator wewnętrzny 8MHz, rezystory które idą od SDA i SCL mają po 4,5k a nie 4,7k



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2012, o 10:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Sprostowanie problemu, sytuacja opanowana.
Sprawdziłem diodą LED czy układ PCF generuję przerwanie i faktycznie nie generował. Poczytałem jeszcze raz PDF'a oraz z pomocą kolegi z forum (The river) dodałem linie konfigurujące przerwanie. Miałem je dodane w złym miejscu. Poźniej lekka kosmetyka main'a. Zmniejszenie tablicy o setne sekundy bo 8563 ich nie generuję, i wszystko pokazuje dokładnie.Problem opisywałem posługując się ATtiny 2313 i programową obsługą I2C, natomiast układ obecnie ruszył w konfiguracji ATmega16 i sprzętowa obsługa I2C. Teraz spróbuję przenieś układ na ATtiny 2313 z obsługą programową I2C.

Dzięki za pomoc i sorry za zamieszanie.
Pozdrawiam.
Jacek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2013, o 23:45 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 16 mar 2013
Posty: 5
Pomógł: 0

zlata_n mógłbyś wkleić poprawiony kod na forum, bo mam dokładnie taki sam problem jak twój, tzn. nie działa mi przerwanie. Układ PCF8563 działa poprawnie, w pętli ładnie wysyła czas, tylko zależy mi na tym by to przerwanie zaczęło działać (podłączyłem diodę i nie miga, połączenie sprawdzałem multimetrem i jest w porządku).

No i witam wszystkich, gdyż to mój pierwszy post na forum :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 10:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 maja 2012
Posty: 53
Lokalizacja: Białystok
Pomógł: 0

Udało mi się rozwikłać zagadkę z tymi dziesiątkami godzin. Pies jest pogrzebany w rejestrach ostatnich dwóch nieużywanych bitach rejestru godzin, wystarczy je zamaskować.

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


Co do tego przerwania, zadziałała mi taka kombinacja wysłana na początku programu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 kwi 2013, o 14:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Way poradziłeś sobie z tym przerwaniem? (ja sprawdziłem także przykład kolegi mesho). Ja mam dziwną sytuację bo, w październiku tamtego roku przerabiałem ten problem i udało mi się uruchomić układ na Attiny2313 oraz ATmega16, mam gotowy kod i nawet rysunki z połączeniami.... Podłączam teraz i nie działa :| (RTC pracuje, bo po wysłaniu danych po I2C zapisuje datę, godzinę i zaczyna sobie wewnątrz tykać, przy resecie pokazuje zmianę czasu, lecz nie działa przerwanie na INT w RTC i nie mam zmiany na LCD co 1sek)
(Rezystory na I2C są, filtrowanie zasilania jest, kondensator od rezonatora do masy jest). W kodzie na początku mam wysyłanie informacji do PCF'a o generowanie przerwania... ale dioda nie świeci (zapali się jakoś losowo co 40sek) Hmm?


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: 27 kwi 2013, o 22:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 maja 2012
Posty: 53
Lokalizacja: Białystok
Pomógł: 0

Przerobiłem jeszcze parę kombinacji (tamta opcja nie działała poprawnie :() i wyszło mi, że za każdym razem trzeba załączyć w pętli przerwanie:

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


Bez tej linijki program odbiera godzinę tylko raz.

_________________
sig off ;(



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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