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



Teraz jest 14 lis 2024, o 20:33


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 40 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 5 sie 2013, o 11:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Mam problem z uruchomieniem zegara DS1302 w języku C.
Zegar nie pracuje.
Na mojej płytce mam procesor Atmega16 taktowany kwarcem 16MHz
Poniżej wysyłam kod main.c w celu analizy.


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



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


Obrazek



Ostatnio edytowano 11 sie 2013, o 11:39 przez mirek1968, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2013, o 18:38 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

W rejestrze sekund jest taki bit CH, który służy do zatrzymania zegara. Po uruchomieniu układu ma on wartość przypadkową. Konieczne jest zatem wpisanie tam 0 (należy przy tym zwrócić uwagę na inny bit o nazwie WP).

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2013, o 19:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

przepraszam ale gdzie mam szukać tych bitów w której bibliotece main.c ,rtc.c czy rtc.h? bo nie widzę tego nigdzie:-(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2013, o 19:37 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Ja też nie wiem co tam jest w pliku rtc.c i rtc.h. "Zakomentowana" linia, gdzie ustawiasz czas jest zawsze potrzebna, bo tam wpisujesz 0 do sekund (i możliwe, że zeruje to bit CH), który jest właśnie w tym rejestrze:
http://datasheets.maximintegrated.com/en/ds/DS1302.pdf

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2013, o 21:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

znalazłem to chyba w pliku rtc.c ale niewiem czy to tam jest gdzieś błąd czy nie jest.

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


Jest to dokładnie pewnie w tej linii

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: 5 sie 2013, o 21:57 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Brakuje mi w tym kodzie wyłączania ochrony zapisu. Spróbuj tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Ostatnio edytowano 7 sie 2013, o 20:31 przez Krauser, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2013, o 22:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Niestety nic to nie zmieniło ,na LCD wyświetla nadal same zera przy czasie i 01.01.2000 przy dacie
Na początku mojego postu pisałem przez nieuwagę że "Można ustawić jedynie datę ".,ale to nie prawda co kolwiek bym nie próbował ustawić funkcją to i tak niema żadnego efektu na LCD
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: 5 sie 2013, o 22:25 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Odczytaj sobie ten rejestr 0x8F i wyświetl . Zapisz 0 pod 0x8E i jeszcze raz odczytaj 0x8F. Spróbuj też zmienić kolejność w funkcji rtc_set_time i zaraz po zapisie 0 do 0x8E umieść zapis sekund, bo nie mam pewności czy to działa raz a dobrze czy może ma być przed każdym zapisem.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Ostatnio edytowano 7 sie 2013, o 20:31 przez Krauser, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2013, o 23:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Prawdopodobnie zrobiłem wszystko tak jak napisałeś ,ale nadal to samo niestety



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2013, o 23:57 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Przynajmniej odczyt działa, więc wyświetlaj na starcie zawartość całego rejestru 0x81. Jak będzie na najstarszym bicie 1 to czas powinien stać, ale skoro ta wartość jest przypadkowa to za którymś razem może pojawi się 0 i wtedy jak układ jest sprawny czas powinien się zmieniać. Należy odłączać całkowicie zasilanie i poczekać na rozładowanie kondensatorów.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2013, o 11:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Wymieniłem układ na nowy i zegar ruszył:-)
Mam jeszcze dwa pytania na temat tego układu.Na wysłanej przeze mnie fotce przy kwarcu układu DS1302 są dwa kondensatory 6pF których nie posiadam fizycznie,czy one są konieczne?
A drugie pytanie dotyczy tego że układ pracuje teraz ale jest jeszcze jeden problem po włożeniu baterii podtrzymującej CR2032 do gniazda na PCB układ zegara bardzo się grzeje(za gorący jest) natomiast po wyjęciu baterii wszystko wraca do normy i jest ok_pisałem na ten temat kiedyś juz na forum elektrody ale nie dostałem jasnej odpowiedzi,pisałem nawet do Chińczyków bo od nich kupiłem te układy a oni oddali mi kasę za te układy bo kupiłem ich 10szt ale nie odpowiedzieli mi dlaczego układ się grzeje przy włożonej baterii.Myślałem już o opcji wlutowania diody w sposób jaki znalazłem w internecie na jednej ze stron.Patrz po niżej i proszę o opinie Twoją:-)

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2013, o 17:16 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

1. Kondensatory nie są konieczne, bo są wbudowane w układ
2. Teoretycznie dioda nie jest konieczna, zastanowić się należy czy nie jest włączony układ ładowania w który wyposażony jest ten scalak (baterii się nie ładuje i po starcie powinien być ten obwód wyłączony). Konfigurację ładowania ustala się w rejestrze 0x90, a odczytuje pod adresem 0x91. Wyłącz ładowanie i sprawdź amperomierzem w którą stronę i o jakiej wartości jest prąd płynący przez VCC1.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2013, o 22:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Zauważyłem jeszcze jedną nieprawidłowość zegarek działa nie za każdym włączeniem,czasami raz na trzy włączenia,niekiedy pokazuje wszystko na LCD ale nie rusza zegarek,niekiedy jest czysty wyświetlacz,a czasami jeszcze włączam reset i zegarek rusza_nie rozumiem dlaczego tak jest może w programie głównym mam coś nie tak jeszcze?.
A odnośnie "Konfigurację ładowania ustala się w rejestrze 0x90, a odczytuje pod adresem 0x91" mam prośbę czy mógłbyś mi napisać w formie kodu w języku C jak wyłączyć ładowanie bo nie wiem raz nie jestem pewien jak to zrobić :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sie 2013, o 20:37 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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

PS.
W poprzednich przykładach źle użyłem funkcję rtc_comms :oops: i miało prawo nie działać (zamiast przekazania adresu było 0 co odnosi się w sumie do tego co jest w pamięci RAM pod tym adresem, więc poprawiłem)

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sie 2013, o 22:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Wstawiłem dziś diodę pomiędzy zaciskiem plus baterii a pinem nr 8 układu DS1302_układ już się nie grzeje bo bateria nie jest ładowana.Mam prośbę jeszcze abyś mi pomógł w sprawie pierwszej części mojego ostatniego postu tzn.chodzi o to że układ zegarka jednak nie zawsze startuje po podaniu zasilania na PCB,niekiedy trzeba klika razy załączyć go a niekiedy zrobić reset procesora i wtedy się budzi-nie wiem dlaczego tak jest.Dzięki za Twój ostatni post z kodem_sprawdzę go jak się uporamy z poprawną pracą DS1302 za każdym podaniem napięcia zasilania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2013, o 16:20 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Zaraz na początku funkcji main możesz dodać opóźnienie 1 sekundę.
Zegar nie startuje czasem, bo bit CH ma przypadkową wartość. Wypróbuj kod po poprawce.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2013, o 22:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Wstawiłem delay 1000ms na początku main.c ale niestety nadal to jeszcze jest z tym problem.Teraz czasami LCd jest czysty po załączeniu zasilania i daję reset procesora na PCB i wtedy zegarek rusza.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sie 2013, o 12:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

przepraszam za pytanie ale nie rozumiem w którym pliku mam wpisać funkcję
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


tzn czy w pliku rtc.c ,rtc.h czy może w programie głównym.
Bo jak wpisałem do programu głównego tę funkcję w wywołałem ja poprzez

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


to nie przynosi żadnego rezultatu,tzn czy dam 0 czy 1 to i tak mogę wgrać nastawę zegaraka a myślałem że to blokuje właśnie tę funkcję.
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: 10 sie 2013, o 12:36 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Funkcje najlepiej umieścić w pliku rtc.c, a jej prototyp w rtc.h.
Bit WP jest na najstarszej pozycji i 0 to oczywiście 0b00000000, czyli w porządku, a 1 to 0b00000001, a ma być 0b10000000.

_________________
Dragonus Cracovus: Biomagia



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

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

DS1302 , 06 i 07 to jedne z bardziej przyjaznych RTC na rynku
w przypadku DS1302 używałem kodu zamieszczonego poniżej , obecnie
nie używam już DS1302 , a DS1306 i DS1337


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



przepraszam za brak komentarzy , ale stary to juz kod :(

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



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

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

czy mogę cały ten kod umieścić w pliku main.c?



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

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

to jest plik biblioteki DS1302.c

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2013, o 12:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

tzn że mój plik rtc.h i main.c to muszę dostosować do tego pliku?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2013, o 12:04 
Offline
Użytkownik
Avatar użytkownika

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

tak wypadało by :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2013, o 12:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Dzięki za ten plik:-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2013, o 12:16 
Offline
Użytkownik
Avatar użytkownika

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

Zadanie masz proste dorobić sobie plik ds1302.h co będzie proste :)
i zmodyfikować używane funkcje w main.c

masz gotową inicjację , zapis i odczyt z DSA wiec teraz nie powinieneś mieć problemów

Wiem zostanę za kod zlinczowany przez Mirka i Antego :)
no ale ja strasznie lubię zamotać wszystko :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2013, o 12:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

No tak ja jestem jeszcze początkujący w języku c i stale muszę się uczyć,dorobienie pliku ds1302.h i modyfikacja main.c zajmnie mi sporo czasu i nie jest pewne czy mi się uda to uruchomić ale dziękuję za te wiadomości i za czas poświęcony i chęć pomocy:-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2013, o 12:43 
Offline
Użytkownik
Avatar użytkownika

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

wydaje mi się jednak że jestem zbyt okrutny dla ciebie ...
dlatego postanowiłem nieco uprościć całość :

plik DS1302.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 DS1302.h

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



oraz przykładowe użycie w 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.


mam nadzieję że teraz sobie poradzisz bez problemu

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2013, o 14:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Dzięki bardzo,jak dostosuję jeszcze sobie main.c do moich bibliotek dla LCD hd44780 to dam znać czy wszystko działa poprawnie i odezwię się.:-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2013, o 20:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Po przeróbce w zasadzie dostosowaniu bibliotek LCD do Twojego programu wszystko ruszyło OK.
Ale jest dokładnie taki sam problem jak w przypadku mojego kodu opisanego powyżej,tzn: jak odłączę napięcie i podłączę znów to niekiedy jest czysty wyświetlacz i nic nie pokazuje a niekiedy za np. następnym załączeniu zasilania jest ok.Wtedy jak na LCD nic nie pokazuje wystarczy zresetować na PCB procesor i zegarek pracuje poprawnie-dzieje się dokładnie to samo co na moim kodzie,czyli raz działa a po wyłączeniu i załączeniu jest czasami problem.Ale najbardziej ciekawe jest to że jak podłączę zasilanie PCB z zasilacza to za każdym razem kasuje się zegarek i nie pracuje,wtedy muszę podłączyć go ponownie do programatora USBasf i ustawić wszystko i wtedy pracuje znów OK.Ale się rozpisałem ale nie daje mi to spokoju bo wygląda na to ze soft jest ok i jeden i drugi ten Twój a więc co jest nie tak bo już zgupiałem.:-)



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: 40 ]  Przejdź na stronę 1, 2  Następna strona

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO