| Author |
Message
|
drg Poziom 8

Joined: 13 Dec 2003 Posts: 31
|
#1
21 Dec 2003 01:50 sekundy w at89s51 lub at89c51 |
|
|
|
hi,
jak w atmelach 89s51 albo 89c51 zaimplikować odmierzanie sekund? mam zamiar zrobić na tym zegarek i zależy mi na dokładności.
pozdrawiam,
paweł.
|
|
| Back to top |
|
 |
Nemo Poziom 22

Joined: 03 Feb 2003 Posts: 2025 Location: Radom/Lublin
|
#2
21 Dec 2003 02:49 Re: sekundy w at89s51 lub at89c51 |
|
|
|
Podziel częstotliwość zegara przez 12, a potem przez tyle, ile zostanie więcej. Czyli: kwarc 6MHz :12 = 500 kcykli. Czyli musisz zrobić pętlę, która będzie się wykonywać przez 500 000 cykli. No i potem modlić się, aby kwarc faktycznie taktował na takiej częstotliwości.
Inny sposób, to zastosować specjalizowany układ do pomiaru czasu z wyjściem 1 Hz (lub PPS - Pulse Per Second). Może być np. PCF8283 (o ile dobrze pamiętam, ale on chyba nie ma wyjścia PPS).
Jeszcze inaczej - moduły GPS mają wyjście PPS.
Jeszcze inaczej - scalak 4060, do tego np. 4013 i kwarc z zegarka (32,768kHz), sygnał podzielony przez 2^15 to 1 PPS.
Pozdrawiam.
|
|
| Back to top |
|
 |
GienekS Poziom 22

Joined: 12 Oct 2003 Posts: 1964 Location: Tarnowskie Góry
|
#3
21 Dec 2003 12:21 Re: sekundy w at89s51 lub at89c51 |
|
|
|
Zrobienie takiej pętli jest nie możliwe. To raczej chodzi o licznik który będzie Ci zliczał impulsy z kwarcu. Dla '51 najlepiej jest użyć 12 lub 6 MHz bo ten procek dzieli kwarc przez 12. I tak dla 12 MHz kwarcu procek jest taktowany 1 mikro sekundą. Licznik T0 kofigurujesz jako 8 bit auto-reload i TH0 ładujesz wartością 256-250. Dalej włączasz przerwanie od T0 i tu robisz kolejny, ale już programowy licznik do 40, który daje Ci impulsy dokładnie co 0,01 sekundy. No a z tąd do 1 sekundy to tylko jeszcze jeden licznik do 100. Jeżeli Ci nie zależy na impulsach mniejszych od jednej sekundy to oczywiście te dwa ostatnie liczniki możesz połączyć w jeden 2 bajtowy (int) i zrobić go do 4000.
W ten oto prosty sposób na '51 robisz stabilny czas 1 sekundy. A jeżeli procek jest mocno obciążony to dobrze jest to przerwanie od T0 dać na wysoki priorytet.
|
|
| Back to top |
|
 |
ACULA Poziom 23

Joined: 11 Apr 2003 Posts: 3025 Location: Bydgoszcz
|
#4
21 Dec 2003 12:38 Re: sekundy w at89s51 lub at89c51 |
|
|
|
ja użyłbym tak jak Nemo pcf8583, chcesz zrobić zegarek z budzikiem, dodatkowo miałbyś kalendarz ;)
za 4zł ATmel i 8zł pcf znikają wszystkie Twoje problemy ;)
PS zrobienie pętli 500000 jest łatwe, więc nie niemożliwe, jednak na liczniku ładniej wygląda ;)
|
|
| Back to top |
|
 |
GienekS Poziom 22

Joined: 12 Oct 2003 Posts: 1964 Location: Tarnowskie Góry
|
#5
21 Dec 2003 13:42 Re: sekundy w at89s51 lub at89c51 |
|
|
|
Na '51 też można zrobić kalendarz i nie trzba żadnego PCF-a
Co do pętli. Może się źle zrozumieliśmy, pętla zajmuje na jakiś czas procek aż się nie zakończy a licznik jest incrementowany ze sprawdzeniem i to wszystko, procek może lacieć dalej.
|
|
| Back to top |
|
 |
Google

|
#
21 Dec 2003 13:42 |
|
|
|
|
|
| Back to top |
|
 |
marchewa101 Poziom 16

Joined: 04 Jan 2003 Posts: 303 Location: Poznań
|
#6
21 Dec 2003 13:48 |
|
|
|
Jaki maja procent bledu kwarce do uC ze niemozna ich zastosowac w roli zegarkow, po co stosowac pcf'a za 8zł jesli mozna go niestosować
Program staje sie bardziej skomplikowany, ale koszty sie zmniejszaja.
A tez trzeba opracowac wymiane danych na i2c, chyba ze sie ma juz ja opracowana :)
|
|
| Back to top |
|
 |
Nemo Poziom 22

Joined: 03 Feb 2003 Posts: 2025 Location: Radom/Lublin
|
#7
21 Dec 2003 13:52 Re: sekundy w at89s51 lub at89c51 |
|
|
|
Obsługa I2C - 5 minut. Poza tym przeładowywanie licznika trwa kilka cykli, raz np. 6 raz 7. Jeśli policzymy np. 1000 przeładowań na sekundę (albo 500) to po pomnożeniu przez np. 24h*3600s wychodzi niezłe opóźnienie dobowe. Proponuję rozważyć i to.
Pozdrawiam.
|
|
| Back to top |
|
 |
arcu Poziom 18

Joined: 17 Apr 2003 Posts: 531 Location: Kraków
|
#8
21 Dec 2003 14:12 Re: sekundy w at89s51 lub at89c51 |
|
|
|
Ja mam zegar na przerwaniu i z dokladnoscia swietnie sobie radzi, choc kupilem wczesniej pcf'a ale wolalem zrobic na przerwaniu
|
|
| Back to top |
|
 |
Wilku Poziom 16

Joined: 23 Jun 2002 Posts: 333 Location: Warszawa
|
#9
21 Dec 2003 14:49 Re: sekundy w at89s51 lub at89c51 |
|
|
|
:arrow: Acula
Gdzie są takie przyjemne ceny tych układów?
|
|
| Back to top |
|
 |
drg Poziom 8

Joined: 13 Dec 2003 Posts: 31
|
#10
21 Dec 2003 15:22 |
|
|
|
arcu, a chciałoby ci się zeskanować jakieś szkice tego układu i je tu teges, albo coś?
|
|
| Back to top |
|
 |
marchewa101 Poziom 16

Joined: 04 Jan 2003 Posts: 303 Location: Poznań
|
#11
21 Dec 2003 18:04 Re: sekundy w at89s51 lub at89c51 |
|
|
|
Nemo:
Przeciez nie ma to znaczenia gdyz przerwanie nastepuje co rowny okreslony czas, tylko ze z opuznieniem
a opuznienie zedu mikrosekund nikomu chyba nieprzeszkadza ;)
Zgloszenie przerwania --> skok do timer
0,1s
Zgloszenie przerwania --> skok do timer
0,1s
Zgloszenie przerwania --> skok do timer
0,1s
...
Timer:
czeka pare cykli
wykonuje procedury
i funkcja timer jest wywolana w: x * 0,1s
natomiast procedury wykonuje w: (x * 0,1s) + pare cykli,
a nie jak ty piszesz: x * (0,1 + pare cykli)
gdzie x jest nr kolejnego przerwania
|
|
| Back to top |
|
 |
Google

|
#
21 Dec 2003 18:04 |
|
|
|
|
|
| Back to top |
|
 |
Nemo Poziom 22

Joined: 03 Feb 2003 Posts: 2025 Location: Radom/Lublin
|
#12
21 Dec 2003 18:47 Re: sekundy w at89s51 lub at89c51 |
|
|
|
A widziałeś kwarc oscylujący z częstotliwością 6 000 000 ± 1Hz ?
Czepiam się, bo sam coś takiego robiłem. W moim opracowaniu chodziło o wytworzenie impulsu dodatniego (H) o długości 1s. Z praktyki wynika, że w przypadku licznika było to o tyle niewygodne, że nie mogłem zapanować nad całym czasem, tylko nad jednym okresem. Zmiana wartości licznika pociągała za sobą zmianę wszystkich przeładowań. Prościej było zbudować wielokrotnie powtarzaną pętlę i kilka rozkazów dodatkowych. Masa liczenia, ale opłaciło się. Wystarczyła jednak zmiana temperatury o 2°C i wszystko trzeba było zestawiać od nowa. Ale to nie temat na ten post.
Pozdrawiam.
|
|
| Back to top |
|
 |
olekewaagata Poziom 19

Joined: 08 Nov 2003 Posts: 641 Location: Kielce
|
#13
21 Dec 2003 21:11 Re: sekundy w at89s51 lub at89c51 |
|
|
|
Byłem na Twojej stronie www i widzę, że masz spore możliwości.
Mam program w asemblerze mcs51 z funkcją zegara, ale jest to program,
który robi jeszcze kilkanaście innych rzeczy. Zegar to tylko mały fragment
jego możliwości (w sumie to 8k asemblera). Dane wyświetlane są na
lcdx2linie po 20 znaków. Mogę Ci ten program wysłac wraz z komentarzami w zródle. będziesz miał na czym się uczyć. Jeśli chcesz
napisz.
|
|
| Back to top |
|
 |
drg Poziom 8

Joined: 13 Dec 2003 Posts: 31
|
#14
21 Dec 2003 21:16 |
|
|
|
Bardzo chętnie, dzięki. Jeszcze jak by Ci się udało schemat części hardware'owej walnąć, byłoby jeszcze milej.
|
|
| Back to top |
|
 |
olekewaagata Poziom 19

Joined: 08 Nov 2003 Posts: 641 Location: Kielce
|
#15
21 Dec 2003 21:33 Re: sekundy w at89s51 lub at89c51 |
|
|
|
No to pięknie. Tylko ja nie wiem jak ten plik Ci wysłać.
|
|
| Back to top |
|
 |
Google

|
#
21 Dec 2003 21:33 |
|
|
|
|
|
| Back to top |
|
 |
drg Poziom 8

Joined: 13 Dec 2003 Posts: 31
|
#16
21 Dec 2003 21:37 |
|
|
|
Może po prostu na drg(malpa)secprog.org ?
|
|
| Back to top |
|
 |
olekewaagata Poziom 19

Joined: 08 Nov 2003 Posts: 641 Location: Kielce
|
#17
21 Dec 2003 22:17 Re: sekundy w at89s51 lub at89c51 |
|
|
|
Jak wysyłam na ten adres to dostaję odpowiedz, że wymagana
autoryzacja SMTP błąd ileśtam i wiadomość nie może być wysłana.
|
|
| Back to top |
|
 |
ACULA Poziom 23

Joined: 11 Apr 2003 Posts: 3025 Location: Bydgoszcz
|
#18
21 Dec 2003 22:19 Re: sekundy w at89s51 lub at89c51 |
|
|
|
| olekewaagata wrote: |
Jak wysyłam na ten adres to dostaję odpowiedz, że wymagana
autoryzacja SMTP błąd ileśtam i wiadomość nie może być wysłana. |
masz źle ustawione opcje autoryzacji w kliencie poczty
spróbuj przez PW ;)
PS. Takie dwustronne rozmowy ustalające szczegóły prowadzcie na PW a nie na forum
|
|
| Back to top |
|
 |
arcu Poziom 18

Joined: 17 Apr 2003 Posts: 531 Location: Kraków
|
#19
22 Dec 2003 02:18 Re: sekundy w at89s51 lub at89c51 |
|
|
|
drg: no problem, ale jak bede u siebie w kraku, to ci podesle, czyli po swietach.
A jaka jest strona Nemo?
pozdrawiam
|
|
| Back to top |
|
 |
Tdv Poziom 22

Joined: 27 Aug 2002 Posts: 2263 Location: Śląsk
|
#20
22 Dec 2003 08:16 Re: sekundy w at89s51 lub at89c51 |
|
|
|
| GienekS wrote: |
Zrobienie takiej pętli jest nie możliwe. To raczej chodzi o licznik który będzie Ci zliczał impulsy z kwarcu. Dla '51 najlepiej jest użyć 12 lub 6 MHz bo ten procek dzieli kwarc przez 12. I tak dla 12 MHz kwarcu procek jest taktowany 1 mikro sekundą. Licznik T0 kofigurujesz jako 8 bit auto-reload i TH0 ładujesz wartością 256-250. Dalej włączasz przerwanie od T0 i tu robisz kolejny, ale już programowy licznik do 40, który daje Ci impulsy dokładnie co 0,01 sekundy. No a z tąd do 1 sekundy to tylko jeszcze jeden licznik do 100. Jeżeli Ci nie zależy na impulsach mniejszych od jednej sekundy to oczywiście te dwa ostatnie liczniki możesz połączyć w jeden 2 bajtowy (int) i zrobić go do 4000.
W ten oto prosty sposób na '51 robisz stabilny czas 1 sekundy. A jeżeli procek jest mocno obciążony to dobrze jest to przerwanie od T0 dać na wysoki priorytet. |
Nie zgodzę się z tym. Jeżeli chcesz zegarek na '51 to o wiele lepsze są kwarce 11,0592MHz. Do typowych zastosowań zegar zrobiony na kwarcu i przerwaniach jest wystarczająco dokładny. Co do doboru wartosci początkowych do licznika proponuję zajrzeć na moją stronę, tam jest FAQ, w któym jest to opisane (także to dlaczego kwarc 11,0592 a nie 12). Ten plik jest też na elektoda.pl wystarczy poszukać.
|
|
| Back to top |
|
 |
GienekS Poziom 22

Joined: 12 Oct 2003 Posts: 1964 Location: Tarnowskie Góry
|
#21
22 Dec 2003 09:36 Re: sekundy w at89s51 lub at89c51 |
|
|
|
6 lub 12MHz dzieli się bez reszty i nie ma żadnego "ogona" zero korekty. Mam kilka już zegarów zrobinych na tej zasadzie liczenia i chodzą jak "Atom" Aregulacja kwarcu to na sygnale ALE można ustawić z taką dokładnością jak Ci się wumaży, kwestia dokładności częstotliwościomierza.
|
|
| Back to top |
|
 |
Tdv Poziom 22

Joined: 27 Aug 2002 Posts: 2263 Location: Śląsk
|
#22
22 Dec 2003 09:51 |
|
|
|
No ja nie twierdze, że to się nie da ale, że znacznie prościej na kwarcu 11059200...
Z kwarcami 12MHz ta komplikacja polega na konieczności wpisywania nie tylko do THx ale też do TLx, w którym już coś może być (nigdy nie wiesz czy Ci przerwanie tre trafi w 1 cyklu maszynowym wykonywania instruscki DIV albo MUL) i trzeba o tym pamiętać, przy 11,0592MHz przeładowuje się tylko THx i nie ma problema ;-D
|
|
| Back to top |
|
 |
drg Poziom 8

Joined: 13 Dec 2003 Posts: 31
|
#23
23 Dec 2003 00:09 |
|
|
|
A tak przy okazji, temat programatorów był już poruszany nie raz, ale poszukuję sprawdzonego, jak najtańszego programatora do omawianego w temacie at89c51 (lub at89s51). Ktoś może podzielić się swoimi przeżyciami? ;-)
|
|
| Back to top |
|
 |
marmur99 Poziom 16

Joined: 01 Dec 2003 Posts: 288 Location: Zielona Góra
|
#24
23 Dec 2003 00:29 |
|
|
|
Tu masz rację TDV z tym trafieniem przerwania. Wiecie czym różnią się zwykłe banany od bananów ... (reklamowanej marki)? Tym samym czym programista od programisty przewidującego nieszczęśliwe trafnienia przerwań.
Diabeł zawsze tkwi w szczegółach. Sam robiłem wiele rzeczy na przerwaniach i pomimo tego, że są bardzo potrzebne to zwykle zdarzają się w najmniej odpowiednim momencie. Im mniej okazji żeby narozrabiały tym lepiej. Ja optuje za PCF8583.
Marmur99
|
|
| Back to top |
|
 |
Google

|
#
23 Dec 2003 00:29 |
|
|
|
|
|
| Back to top |
|
 |
arcu Poziom 18

Joined: 17 Apr 2003 Posts: 531 Location: Kraków
|
#25
22 Feb 2004 17:09 Re: sekundy w at89s51 lub at89c51 |
|
|
|
GienekS:
A nie lepiej skonfigurowac licznik T0 na 16 bitowy?
potem co przerwanie ladowac do niego roznice 65535 - 50000 (dla kwarcu 6MHz) i zostaje uaktywniane przerwanie co 0,1sec
I teraz pozostaje zrobic licznik do 10 ktory odmierzalby 1 sekunde
Hm?
Po drugie, T0 chyba domyslnie jest ustawiane na najwyzszy priorytet, po nim jest T1, a po nim T2
|
|
| Back to top |
|
 |
Tdv Poziom 22

Joined: 27 Aug 2002 Posts: 2263 Location: Śląsk
|
#26
23 Feb 2004 08:39 Re: sekundy w at89s51 lub at89c51 |
|
|
|
| arcu wrote: |
GienekS:
A nie lepiej skonfigurowac licznik T0 na 16 bitowy?
potem co przerwanie ladowac do niego roznice 65535 - 50000 (dla kwarcu 6MHz) i zostaje uaktywniane przerwanie co 0,1sec
I teraz pozostaje zrobic licznik do 10 ktory odmierzalby 1 sekunde
Hm?
Po drugie, T0 chyba domyslnie jest ustawiane na najwyzszy priorytet, po nim jest T1, a po nim T2 |
Piszesz co wiesz, ale nie wieszc o piszesz... Jak chcesz ładować liczbę 16 bitową w '51?
|
|
| Back to top |
|
 |
viki Poziom 15

Joined: 21 Mar 2003 Posts: 250 Location: częstochowa
|
#27
23 Feb 2004 10:02 Re: sekundy w at89s51 lub at89c51 |
|
|
|
Tdv - żółta kartka:
mov DPTR,#data16
|
|
| Back to top |
|
 |
bolek Poziom 23

Joined: 04 Jun 2002 Posts: 3876 Location: stolica
|
#28
23 Feb 2004 10:09 sekundy w at89s51 lub at89c51 |
|
|
|
a może by zrobic korekcje czasu? np o trzeciej w nocy dodać albo odjać 3 sekundy (czy ile tam)...
|
|
| Back to top |
|
 |
Tdv Poziom 22

Joined: 27 Aug 2002 Posts: 2263 Location: Śląsk
|
#29
23 Feb 2004 10:19 Re: sekundy w at89s51 lub at89c51 |
|
|
|
| viki wrote: |
Tdv - żółta kartka:
mov DPTR,#data16 |
Taa, szczewgólnie, że DPTR słuzy do ładowania tajmera, co?
Przeczytaj może najpierw o czym się dyskutuje zanim zabierzesz głos...
|
|
| Back to top |
|
 |
radek.kaba Poziom 13

Joined: 07 Sep 2003 Posts: 122 Location: Inowrocław
|
#30
23 Feb 2004 23:44 sekundy w at89s51 lub at89c51 |
|
|
|
Robiłem zegarki programowo i na RTC, rzeczywiście robiąc to programowo trzeba dokładnie panować praktycznie nad każdym cyklem.
Ale chciałem zwrócić uwagę na problem z działaniem zegarka po wyłączeniu zasilania, a to sensownie można tylko zrobić za pomocą RTC - wystarczy bateryjka 1,5V i zegarek działa po wyłączeniu zasilania, procesorek nie zadowoli się takim rozwiązaniem (chyba że ktoś dołoży mu bateryjkę 4,5V :-) ).
|
|
| Back to top |
|
 |