CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Masz problem? Zapytaj na forum elektroda.pl
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 12:06:00 +0200
Witam!
Tak sie zastanawiam teoretycznie:
Mam CPU który popędzam kwarcem który źle się dzieli aby uzyskać
całkowiete odstępy czasu (wielokrotności 1ms). Na przykład kwarcem
11,059MHz. W dodatku timer generuje przerwanie co 256 zliczeń. W ogóle
można powiedziec, że 1ms nie jest całkowitą wielokrotnością okresu
pojawiania się przerwania.
W jaki sposób obliczyc co które przerwanie wywołać moją funckję, która
powinna być wywołana co 1ms. Zastanawiam się nad tym i ewidentnie nie
mogę wywoływac co z góry założoną ilość przerwań timera - musze wewnatrz
przerwania timera to wyliczyć. Zakładam, że nie mogę korzystać z
dzielenia/mnożenia. Dobrze by było również nie korzystać z dużych liczb
(procesor ma inne rzeczy na głowie niż arytmetyka 4-bajtowa).
Czy istnieje jakaś wygodna sztuczka do tego ? na razie mam to zrobione
tak, że jest duży licznik 4 bajty, ale on mi się nie podoba (za dużo
czasu zajmuje liczenie, to jest 8-bitowy AVR). Niestety brakuje mi już
mocy obliczeniowej ...
PS. Zakładam że nie chce wywoływać dokładnie co 1ms, ale statystycznie
powinno wypaśc 100 wywołań na 100ms. Zakładam równiez że znam wartośc
kwarcu w momencie kompilacji (program w C).
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: "Tomasz Bednarz" <tb(usunTO)_at_nospam_internet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 16:07:54 +0200
Użytkownik "Sebastian Bialy" <heby_at_nospam_poczta.onet.pl> napisał w wiadomości
news:da0gfs$ch0$1_at_nospam_nemesis.news.tpi.pl...
Witam!
Tak sie zastanawiam teoretycznie:
Mam CPU który popędzam kwarcem który źle się dzieli aby uzyskać
całkowiete odstępy czasu (wielokrotności 1ms). Na przykład kwarcem
11,059MHz. W dodatku timer generuje przerwanie co 256 zliczeń. W ogóle
można powiedziec, że 1ms nie jest całkowitą wielokrotnością okresu
pojawiania się przerwania.
A nie mozesz uzyc innego kwarca?
A jakbys ten timer mogl programowac co do ilosci zliczen po kotrym generyje
przerwanie to problem bylby rozwiazany?
Zrob w obludze przerwania TIMER obslugiwany programowo ktory zliczy ile
trzeba i wtedy obsluzy reszte przerwania (te wlasciwa)
Jak pokombinujesz to uzyskac mozesz rozne czasy
TB
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 17:15:54 +0200
Tomasz Bednarz wrote:
A nie mozesz uzyc innego kwarca?
Nie, stabilnośc transmisji szeregowej ma większe znaczenie niż
stabilonośc okresów między przerwaniami.
A jakbys ten timer mogl programowac co do ilosci zliczen po kotrym generyje
przerwanie to problem bylby rozwiazany?
Nawet gdybym mógł, to niestety podział czestotliwości zegara przez ilośc
spodziewanych wywołań funkcji jest niecałkowity. Z resztą timer jest
prostacki, generuje overflow przy przekroczeniu pojemności, której nie
mozna regulowac.
Zrob w obludze przerwania TIMER obslugiwany programowo ktory zliczy ile
trzeba i wtedy obsluzy reszte przerwania (te wlasciwa)
Oczywiście, tylko wszystkie obliczenia albo wymagają
dzielenia/monożenia, albo dużych liczników (u mnie na razie sprawnie
działa na 4 bajtach, ale wymaga on jednego dodawania, jednego porównania
i sporadycznie jednego odjęcia - co jest w sumie pracochłonne w jednym
cyklu)./
Jak pokombinujesz to uzyskac mozesz rozne czasy
owszem, tylko ja szukam drogi do kombinowania w sposób optymalnie
najszybszy :)
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: "Bushi" <pxe_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 20:22:50 +0200
Nawet gdybym mógł, to niestety podział czestotliwości zegara przez ilośc
spodziewanych wywołań funkcji jest niecałkowity. Z resztą timer jest
prostacki, generuje overflow przy przekroczeniu pojemności, której nie
mozna regulowac.
Witam ! Poczatkujacy jestem jesli chodzi o mikroprocki i moze sie nie znam
ale jaki timer w takim madz razie nie jest prostacki ?? Przciez z tego co ja
wiem to timer ma stala "pojemnosc" jak to nazwales i w chwili przepelnienia
wystawia flage overflow (chyna ze generuje ta flage tez w innych
przypadkach, ale ja o tym nic nie wiem). Przeciez o to chyba chodzi w
timerach ze chodzi sobie niezaleznie do procka (w koncu kiedys musi sie
przepelnic no nie :] ) i dzieki temu mozna go wykorzystywac do wielu rzeczy
!! Myle sie ?? :o)
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 22:35:30 +0200
Bushi wrote:
> [ciach]
!! Myle sie ?? :o)
jest tak:
istnieje zegar popędzany kwarcem 11059000MHz który steruje licznikiem
jednobajtowym. Licznik ten przepełnia się po 256 zliczeniach generując
przerwanie.
Czyli pojawia się przerwanie z częstotliwością 43199.21875Hz. A ja chce,
żeby pojawiało się z częstotliwością 1000Hz.
Może to zrobić albo zmianiając kwarc na taki, który da "ładny podział"
przez 256 (ale tego zrobic nie mogę bo musi być tak a nie inny ->
transmisja szeregowa).
Mogę też wywoływac przerwanie z częstotliwością ~43199Hz i raz na jakiś
czas wywołać moją procedurę. Cała zabawa polega na znalezieniu metody
obliczania co które przerwanie wywołać moją.
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: Jack Houseman <KILLSPAMjado_at_nospam_chello.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 01:07:46 +0200
Sebastian Bialy wrote:
Czyli pojawia się przerwanie z częstotliwością 43199.21875Hz. A ja chce,
żeby pojawiało się z częstotliwością 1000Hz.
Może to zrobić albo zmianiając kwarc na taki, który da "ładny podział"
przez 256 (ale tego zrobic nie mogę bo musi być tak a nie inny ->
transmisja szeregowa).
Mogę też wywoływac przerwanie z częstotliwością ~43199Hz i raz na jakiś
czas wywołać moją procedurę. Cała zabawa polega na znalezieniu metody
obliczania co które przerwanie wywołać moją.
A czemu licznik musi dzielic przez 256? Przeciez mozna go przeladowywac
podczas kazdego przerwania (to jeden sposob)
Inny sposob bedzie taki:
Znajac czestotliwosc przerwan z licznika, musisz obliczyc ile przerwan musi
zaistniec dla otrzymania okraglej liczby czasu - np. podwielokrotnosci 1ms.
Im wieksza czestotliwosc przerwan, tym wieksza bedzie dokladnosc, ale wiecej
impulsow musisz zliczyc (wiecej bajtow zajetych).
Nastepnie robisz kaskade licznikow - kazdy o odp. podziale czestotliwosci -
tak zeby na wyjsciu ostatniego byla czestotliwosc odp. 1ms (1000Hz).
A pozniej wystarczy ustawiac flage sygnalizacyjna dla procedur w petli
glownej - tlko uwaga - jesli flaga jest typu toggle - to dzieli ona przez
dwa, wiec trzeba to uwzglednic podczas obliczen dzielnikow i dac np. 0,5ms
na wyjsciu ostatniego licznika.
Wszystkie te operacje wymagaja tylko instrukcji inc (zwieksz o 1) i
porownania (np. xor i spr. zera) - zadnego mnozenia czy dzielenia, i
minimalnie obciazaja procesor.
--
Pozdrawiam
Jado
---> Zegarus - Otwarty Projekt Automatyki Domowej -
http://zegaruz.republika.pl
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 07:51:15 +0200
Jack Houseman wrote:
A czemu licznik musi dzielic przez 256? Przeciez mozna go przeladowywac
podczas kazdego przerwania (to jeden sposob)
Hmmm jesli skróce czas liczenia to niestety cały algorytm będzie
zajmował więcej czasu cpu. Zalezy mi na tym, żeby nie trzeba było nic
wyliczć ręcznie w kodzie, tylko podać #define CRYSTAL=11.59200 w kodzie
i miec automatycznie wyliczone. Co jesli wyliczy mi 10 cykli :) ?
Znajac czestotliwosc przerwan z licznika, musisz obliczyc ile przerwan musi
zaistniec dla otrzymania okraglej liczby czasu - np. podwielokrotnosci 1ms.
Im wieksza czestotliwosc przerwan, tym wieksza bedzie dokladnosc, ale wiecej
impulsow musisz zliczyc (wiecej bajtow zajetych).
Nastepnie robisz kaskade licznikow - kazdy o odp. podziale czestotliwosci -
tak zeby na wyjsciu ostatniego byla czestotliwosc odp. 1ms (1000Hz).
Hmmm jesli kaskada liczników - to prawie ocieram się o rozwiązanie które
już mam na 4 bajtach. Dalej jest problem jak wyliczyć tą kaskadę (i
ilośc stopni) mając do czynienia wyłacznie z preprocesorem w C.
Zastanwoei się w ogóle, czy rozwiązanie z 4-bajtowym licznikiem nie jest
jednak optymalne.
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: Adam Jurkiewicz <sword_at_nospam_NIEMATEGOajpic.zonk.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 09:10:29 +0200
Sebastian Bialy wrote:
istnieje zegar popędzany kwarcem 11059000MHz który steruje licznikiem
jednobajtowym. Licznik ten przepełnia się po 256 zliczeniach generując
przerwanie.
To nie jest kwarc 11059000MHz tylko 11059200MHz i dzieli się równo przez
wszystko do 2^14
Czyli pojawia się przerwanie z częstotliwością 43199.21875Hz. A ja chce,
żeby pojawiało się z częstotliwością 1000Hz.
11059200/256 -> 43200
1ms z tego nie dostaniesz równo, najwyrzej 10ms
sword
--
e-mail: sword_at_nospam_TEGONIEMAajpic.zonk.pl
www: http://ajpic.zonk.pl/
gg#: 1781804
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 11:03:56 +0200
Adam Jurkiewicz wrote:
istnieje zegar popędzany kwarcem 11059000MHz który steruje licznikiem
jednobajtowym. Licznik ten przepełnia się po 256 zliczeniach generując
przerwanie.
To nie jest kwarc 11059000MHz tylko 11059200MHz i dzieli się równo przez
wszystko do 2^14
Masz rację, ale ja specjalnie podałem przykład który się _nie dzieli_
żeby zobrazowac problem. Oczywiście 11059200 jest ok, ale dla dowolnego
kwarcu już nie.
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: gophi.at.chmurka.net_at_nospam_nospam.invalid (Adam Wysocki)
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Sun, 7 Aug 2005 11:21:47 +0000 (UTC)
Sebastian Bialy <heby_at_nospam_poczta.onet.pl> wrote:
istnieje zegar popędzany kwarcem 11059000MHz
A nie 11059 MHz? Czyli 11059000 kHz?
Czyli pojawia się przerwanie z częstotliwością 43199.21875Hz.
A nie 43199.21875 kHz? Czyli 43199218.75 Hz?
A ja chce, żeby pojawiało się z częstotliwością 1000Hz.
Musisz dzielić przez 43199.21875000000000000000, co nie jest optymalne.
Ja bym zrobił tak:
1. Punkt wejścia do przerwania.
2. Zwiększ licznik1 (8 bitowy).
3. Jeśli licznik1 się nie przepełnił, to koniec.
4. Zwiększ licznik2 (8 bitowy).
5. Jeśli licznik2 nie osiągnął 168 to koniec.
6. Wyzeruj licznik2.
7. Wywołaj swoją procedurę.
8. Koniec.
Procedura będzie wywoływana 43199218.75/(256*168) razy na
sekundę, czyli 1004.44612048921130952380 Hz. Może być?
--
Adam Wysocki * http://www.gophi.rotfl.pl/ * GG 1234 * Fido 2:480/138
...a łyżka siedzi i zawija świstaki w sreberka... (C) jceel 20.05.04
From: pisz_na.mirek_at_nospam_dionizos.zind.ikem.pwr.wroc.pl
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 22:26:39 +0000 (UTC)
Sebastian Bialy <heby_at_nospam_poczta.onet.pl> wrote:
Tomasz Bednarz wrote:
A nie mozesz uzyc innego kwarca?
Nie, stabilnośc transmisji szeregowej ma większe znaczenie niż
stabilonośc okresów między przerwaniami.
A jakbys ten timer mogl programowac co do ilosci zliczen po kotrym generyje
przerwanie to problem bylby rozwiazany?
Nawet gdybym mógł, to niestety podział czestotliwości zegara przez ilośc
spodziewanych wywołań funkcji jest niecałkowity. Z resztą timer jest
prostacki, generuje overflow przy przekroczeniu pojemności, której nie
mozna regulowac.
Zrob w obludze przerwania TIMER obslugiwany programowo ktory zliczy ile
trzeba i wtedy obsluzy reszte przerwania (te wlasciwa)
Oczywiście, tylko wszystkie obliczenia albo wymagają
dzielenia/monożenia, albo dużych liczników (u mnie na razie sprawnie
działa na 4 bajtach, ale wymaga on jednego dodawania, jednego porównania
i sporadycznie jednego odjęcia - co jest w sumie pracochłonne w jednym
cyklu)./
Jak pokombinujesz to uzyskac mozesz rozne czasy
owszem, tylko ja szukam drogi do kombinowania w sposób optymalnie
najszybszy :)
A rozkład na ułamki, jaka dokładność potrzebna?
f=11059000;c=f/256/1e3,;C=round(c);cx=(c-C); for i=2:4;C(i)=round(1/cx);cx=cx-1/C(i);endfor;printf('%d\n',C);
c = 43.199
43
5
-1280
-90425216047595840
Czyli cykle po l=43 takty, co piąty l=44, ...
czyli dwa liczniki jednobajtowe, z których tylko jeden jest dekrementowany
każdym impulsem zegara.
Chyba starczy, jak zależy ci na prędkości, jak nie, to co 1280 l=43-1+1=43
(bo 1280 dzieli się przez pięć), co 90425216047595840, ech to chyba już nie
będę liczył ;)
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 07:52:56 +0200
pisz_na.mirek_at_nospam_dionizos.zind.ikem.pwr.wroc.pl wrote:
A rozkład na ułamki, jaka dokładność potrzebna?
f=11059000;c=f/256/1e3,;C=round(c);cx=(c-C); for i=2:4;C(i)=round(1/cx);cx=cx-1/C(i);endfor;printf('%d\n',C);
c = 43.199
43
5
-1280
-90425216047595840
Czyli cykle po l=43 takty, co piąty l=44, ...
czyli dwa liczniki jednobajtowe, z których tylko jeden jest dekrementowany
każdym impulsem zegara.
A jak to zrobic preprocesorem C :) ? Bo proces wyznaczania ma być
automagiczny, programista docelowy zmienia CRYSTAL=20000000 i powinno mu
podczas kompilacji przeliczyć nowe współczynniki.
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: pisz_na.mirek_at_nospam_dionizos.zind.ikem.pwr.wroc.pl
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 1 Jul 2005 09:11:02 +0000 (UTC)
Sebastian Bialy <heby_at_nospam_poczta.onet.pl> wrote:
pisz_na.mirek_at_nospam_dionizos.zind.ikem.pwr.wroc.pl wrote:
A rozkład na ułamki, jaka dokładność potrzebna?
f=11059000;c=f/256/1e3,;C=round(c);cx=(c-C); for i=2:4;C(i)=round(1/cx);cx=cx-1/C(i);endfor;printf('%d\n',C);
c = 43.199
43
5
-1280
-90425216047595840
Czyli cykle po l=43 takty, co piąty l=44, ...
czyli dwa liczniki jednobajtowe, z których tylko jeden jest dekrementowany
każdym impulsem zegara.
A jak to zrobic preprocesorem C :) ? Bo proces wyznaczania ma być
automagiczny, programista docelowy zmienia CRYSTAL=20000000 i powinno mu
podczas kompilacji przeliczyć nowe współczynniki.
Podpiąć octavę lub whatever(TM) do makefile?
Właściwe narzędzie do danego celu - powiedział magik wbijając wkręty
młotkiem ;)
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 1 Jul 2005 19:17:26 +0200
pisz_na.mirek_at_nospam_dionizos.zind.ikem.pwr.wroc.pl wrote:
Podpiąć octavę lub whatever(TM) do makefile?
No bez przesady -- wystarczy dopisać dwa krzyżyki do tego C
i rzecz stanie się implementowalna na poziomie języka, bez potrzeby
używania dodatkowych narzędzi.
Pozdrawiam
Piotr Wyderski
From: "Piotrek Sz." <zumek_at_nospam_NOSPAM.gazeta.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 17:27:27 +0000 (UTC)
Sebastian Bialy <heby_at_nospam_poczta.onet.pl> napisał(a):
Witam!
Tak sie zastanawiam teoretycznie:
Mam CPU który popędzam kwarcem który źle się dzieli aby uzyskać
całkowiete odstępy czasu (wielokrotności 1ms). Na przykład kwarcem
11,059MHz. W dodatku timer generuje przerwanie co 256 zliczeń. W ogóle
można powiedziec, że 1ms nie jest całkowitą wielokrotnością okresu
pojawiania się przerwania.
W jaki sposób obliczyc co które przerwanie wywołać moją funckję, która
powinna być wywołana co 1ms. Zastanawiam się nad tym i ewidentnie nie
mogę wywoływac co z góry założoną ilość przerwań timera - musze wewnatrz
przerwania timera to wyliczyć. Zakładam, że nie mogę korzystać z
dzielenia/mnożenia. Dobrze by było również nie korzystać z dużych liczb
(procesor ma inne rzeczy na głowie niż arytmetyka 4-bajtowa).
Czy istnieje jakaś wygodna sztuczka do tego ? na razie mam to zrobione
tak, że jest duży licznik 4 bajty, ale on mi się nie podoba (za dużo
czasu zajmuje liczenie, to jest 8-bitowy AVR). Niestety brakuje mi już
mocy obliczeniowej ...
PS. Zakładam że nie chce wywoływać dokładnie co 1ms, ale statystycznie
powinno wypaśc 100 wywołań na 100ms. Zakładam równiez że znam wartośc
kwarcu w momencie kompilacji (program w C).
Ja bym zrobił tak:
11059200/64(preskaler)/256(pełen obrót licznika)=675 , a to już tylko 2 bajty
do obróbki ;-)
Piotr
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Piotrek Sz." <zumek_at_nospam_NOSPAM.gazeta.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 17:32:11 +0000 (UTC)
Piotrek Sz. <zumek_at_nospam_NOSPAM.gazeta.pl> napisał(a):
Ja bym zrobił tak:
11059200/64(preskaler)/256(pełen obrót licznika)=675 , a to już tylko 2 bajty
do obróbki ;-)
Upssss....zapędziłem się i wyszła z tego sekunda :(
Piotr
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Piotrek Sz." <zumek_at_nospam_NOSPAM.gazeta.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 19:14:02 +0000 (UTC)
Może mi się uda naprawić poprzednią wpadkę ;-)
#include <mega8.h>
register unsigned char licznik5=0;
register unsigned char licznik43=43;
register unsigned char licznik100=0;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
licznik43--;
if(licznik43==0)
{
licznik43=43;
licznik5++; //to sie wykonuje co ~1ms
licznik100++;
if(licznik5==5)
{
licznik43++;
licznik5=0;
}
if(licznik100==100)
{licznik100=0;} //to sie wykonuje co 100ms
}
}
..
Piotr
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Thu, 30 Jun 2005 22:40:09 +0200
Piotrek Sz. wrote:
Ja bym zrobił tak:
11059200/64(preskaler)/256(pełen obrót licznika)=675 , a to już tylko 2 bajty
do obróbki ;-)
Świetnie, ale ten akurat kwarc to był przykład, a ja pytam dla DOWOLNEJ
wartości kwarcu :) I to w dodatku wyliczalne na poziomie kompilacji.
Akurat 11059200 nie jest jeszcze taki upierdliwy :)
Konkretnie piszę procedurę która musi być wywaołana co 1ms bez względu
na to jakim kwarcem poganiam procesor. Decyzja co do kwarcu podejmowana
jest na etapie kompilacji za pomocą #define.
Zrobiłem algorytm który robi to bardzo ładnie i w dodatku jest
prostacki, jednak korzysta z operacji dodawania 4 bajtowej liczby i
porównywania. To jest troche sporo pracy jak na przerwanie timera.
Szukam jakiegoś genialnie prostego sposobu.
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 02:28:52 +0200
On Thu, 30 Jun 2005 22:40:09 +0200, Sebastian Bialy wrote:
Świetnie, ale ten akurat kwarc to był przykład, a ja pytam dla DOWOLNEJ
wartości kwarcu :) I to w dodatku wyliczalne na poziomie kompilacji.
Akurat 11059200 nie jest jeszcze taki upierdliwy :)
Sztuczka jest imho taka ze liczymy najmniejsza wspolna wielokrotnosc
[NWW, LCM] kwarcu i pozadanej czestotliwosci - tu 1000Hz.
Tu wychodzi nam 55296000.
Teraz bedziemy liczyc w jednostce j=1/55296000 sekundy.
Co kazde przerwanie dodajemy do licznika ilosc jednostek odpowiednia
dla okresu - czyli u nas 5*256=1280. Jak licznik przekroczy 55296
- minela 1 ms. Obie liczby mozemy jeszcze zredukowac o czynnik
wspolny, ktory tu wynosi az 256. Czyli co przerwanie dodajemy do
licznika 5, a jak przekroczy 216 - odejmujemy tylez i wolamy procedure
1ms.
Na dobra sprawe to niepotrzebnie bralismy czestotliwosc kwarcu.
Mozna bylo od razu liczyc dla 11059200/256=43200 i 1000.
Tyle ze w przypadkach szczegolnych moga tu wychodzic niecalkowite
liczby.
Konkretnie piszę procedurę która musi być wywaołana co 1ms bez względu
na to jakim kwarcem poganiam procesor. Decyzja co do kwarcu podejmowana
jest na etapie kompilacji za pomocą #define.
No to w makrach C mozesz miec problem z LCM/GDC :-)
Zrobiłem algorytm który robi to bardzo ładnie i w dodatku jest
prostacki, jednak korzysta z operacji dodawania 4 bajtowej liczby i
porównywania.
Mozna od razu liczyc w ps. Niby bedzie jakis blad .. ale dla typowej
dokladnosci kwarcu to 16 bit dokladnosci powinno wystarczyc.
Albo od razu przyjmij jako jednostke pewna niewielka wielokrotnosc
kwarcu. np 8. Wtedy co przerwanie dodajemy 8*256, a zliczyc
musimy do 8*11059200/1000=88437.6~=88438. Tym sposobem
licznik jest tylko 3 bajtowy, dodawanie banalnie proste, porownywanie
troche gorzej, a dokladnosc na poziomie 10ppm i tak lepsza niz kwarcu.
Przy wielokrotnosci mniejszej - 2,3,4 - dokladnosc niewiele mniejsza,
a kwarce do 16M powinny zapewnic licznik tylko 2 bajty ..
No i jakbys sie nie upieral przerwan robic co 256 taktow,
to byc moze by sie znalazl kwarc dobry do precyzyjnego taktowania
i seriala i ms - np 15.360MHz.
J.
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 08:05:25 +0200
J.F. wrote:
Sztuczka jest imho taka ze liczymy najmniejsza wspolna wielokrotnosc
[NWW, LCM] kwarcu i pozadanej czestotliwosci - tu 1000Hz.
Tu wychodzi nam 55296000.
Teraz bedziemy liczyc w jednostce j=1/55296000 sekundy.
Co kazde przerwanie dodajemy do licznika ilosc jednostek odpowiednia
dla okresu - czyli u nas 5*256=1280. Jak licznik przekroczy 55296
- minela 1 ms. Obie liczby mozemy jeszcze zredukowac o czynnik
wspolny, ktory tu wynosi az 256. Czyli co przerwanie dodajemy do
licznika 5, a jak przekroczy 216 - odejmujemy tylez i wolamy procedure
1ms.
Hmmm mam coś podobnego w tej chwili, tylko nie licze wspólnej
wielokrotności tylko na zywca dodaje tak:
#define CRYSTAL=11059200
#define FREQ=1000
// 256 cykli na przerwanie licznika i preskaler przez 8
#define COUNTER_VALUE_ADD ((unsigned long)FREQ*256*8)
SIGNAL(SIG_OVERFLOW0)
{
static unsigned long counter=0;
counter+=COUNTER_VALUE_ADD;
if(counter>CRYSTAL)
{
counter-=CRYSTAL;
/* tu mam co 1ms */
}
}
I bardzo ładnie i stabilnie dostaje 1ms odstepu.
Jednak: szukam czegoś szybszego albo metody na zgadnięcie podczas
kompilacji, czy licznik jest unsigned long czy unsigned short.
Założenie jest takie, że kod do tego licznika nie powinien podlegac
ręcznej poprawce, jedyne co może docelowy programista to zmienić CRYSTAL
i na podstawie tego preprocesor ustali wszystkie parametry (i fajnie jak
by ustalił również szerokość zmiennej).
No to w makrach C mozesz miec problem z LCM/GDC :-)
To niezłe ćwiczenie by było pod warunkiem że GCC pozwalałby na jakąś
arytmetykę i porównania :D
musimy do 8*11059200/1000=88437.6~=88438. Tym sposobem
licznik jest tylko 3 bajtowy, dodawanie banalnie proste, porownywanie
troche gorzej, a dokladnosc na poziomie 10ppm i tak lepsza niz kwarcu.
Przy wielokrotnosci mniejszej - 2,3,4 - dokladnosc niewiele mniejsza,
a kwarce do 16M powinny zapewnic licznik tylko 2 bajty ..
Inne wielkości licznika niż 2/4 bajty odpadaja ponieważ nie mam szans na
optymalizację kodu z użyciem C. Nie mam dostępu do bitu carry i
musiałbym testować wynik dodawania co będzie trwało więcej jak moja
prosta procedurka na 4 bajtach.
No i jakbys sie nie upieral przerwan robic co 256 taktow,
to byc moze by sie znalazl kwarc dobry do precyzyjnego taktowania
i seriala i ms - np 15.360MHz.
Za szybko :) Biedactwo 90S2313 nie da rady ...
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: Adam Jurkiewicz <sword_at_nospam_NIEMATEGOajpic.zonk.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 09:16:30 +0200
Sebastian Bialy wrote:
Założenie jest takie, że kod do tego licznika nie powinien podlegac
ręcznej poprawce, jedyne co może docelowy programista to zmienić CRYSTAL
i na podstawie tego preprocesor ustali wszystkie parametry (i fajnie jak
by ustalił również szerokość zmiennej).
W życiu nie uzyskasz czegoś takiego, kwarc dobiera się do konkretnego
zastosowania, a nie układ do kwarcu. Nigdy nie dostaniesz dobrego
podziału dla obliczeń czasu i UARTA przy dowolnym kwarcu.
Zawsze pisze tak program aby na podstawie zdefiniwanego kwarcu
program się odpowiednio skompilował ale są granice takiego doboru.
Jak chcesz mieć poprawnie wyznaczany czas to nie dobieraj kwarcu
pod kątem UARTA bo odchyłki do kilku % nic w tej transmisji i tak
nie zmienią.
pozdrawiam,
sword
--
e-mail: sword_at_nospam_TEGONIEMAajpic.zonk.pl
www: http://ajpic.zonk.pl/
gg#: 1781804
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 11:07:43 +0200
Adam Jurkiewicz wrote:
W życiu nie uzyskasz czegoś takiego, kwarc dobiera się do konkretnego
zastosowania, a nie układ do kwarcu. Nigdy nie dostaniesz dobrego
podziału dla obliczeń czasu i UARTA przy dowolnym kwarcu.
Statystycznie zawsze dostacje w granicach błędu samego kwarcu - mi to
pasuje. Nie jestkrytyczny odstęp "1ms" a jedynie statystyczna ilośc
takich przerwań na jednostkę czasu. Innymi słolwy mi taki podział wystarcza.
Zawsze pisze tak program aby na podstawie zdefiniwanego kwarcu
program się odpowiednio skompilował ale są granice takiego doboru.
Oczywiście ze tak, w pełni uniwersalnie można by napisać, jednak
wymagało by to wsparcia obliczeniowego samego CPU co w moim przypadku
odpada.
Jak chcesz mieć poprawnie wyznaczany czas to nie dobieraj kwarcu
pod kątem UARTA bo odchyłki do kilku % nic w tej transmisji i tak
nie zmienią.
Hmmm nie wiadomo, mam przesłać blok danych ponad 100 bajtów i z moich
doświadczeń wynika, że marnie się to robi z kwarcami nie będącymi
UART-komaptybilne. Po prostu ilośc błędów rośnie poza granicę akceptacji.
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: Adam Jurkiewicz <sword_at_nospam_NIEMATEGOajpic.zonk.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 11:36:56 +0200
Sebastian Bialy wrote:
Hmmm nie wiadomo, mam przesłać blok danych ponad 100 bajtów i z moich
doświadczeń wynika, że marnie się to robi z kwarcami nie będącymi
UART-komaptybilne. Po prostu ilośc błędów rośnie poza granicę akceptacji.
No to na pewno nie z tego powodu masz błędy, to ile bajtów jest do
wysłania nie ma przecież znaczenia bo synchronicacja jest do każdego.
Teoretycznie to odchyłka może sięgać 10%, tylko wtedy to raczej
dostaniesz frame error. Przyczyny takich przekłamań szukałbym
raczej w innym miejscu (np. pcb).
sword
--
e-mail: sword_at_nospam_TEGONIEMAajpic.zonk.pl
www: http://ajpic.zonk.pl/
gg#: 1781804
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 11:50:54 +0200
Adam Jurkiewicz wrote:
No to na pewno nie z tego powodu masz błędy, to ile bajtów jest do
wysłania nie ma przecież znaczenia bo synchronicacja jest do każdego.
Teoretycznie to odchyłka może sięgać 10%, tylko wtedy to raczej
dostaniesz frame error. Przyczyny takich przekłamań szukałbym
raczej w innym miejscu (np. pcb).
Nie, raczej nie. Odbiornikiem jest fabryczny konwerter RS232->RS485.
Ponieważ nie miałem w domu kwarcu 11.0592 musiałem wstawić 10.
Prawidłowo obliczyłem (z resztą jest w dokumantacji do CPU) parametry.
Ilośc błędów CRC modbus wzrosła do niepokojącego poziomu. Program różnił
się wyłacznie współczynnikiem podziału UART.
Zmiana nastepnego dnia kwarcu na 11.0592 spowodowała powrót do normalnej
pracy (jeden/dwa CRC na godzinę).
Może powodem jest _dośc odległa_ magistrala (około 300m).
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: "Piotr Gałka" <piotr.galka_at_nospam_CUTTHISmicromade.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 1 Jul 2005 11:44:20 +0200
Użytkownik "Sebastian Bialy" <heby_at_nospam_poczta.onet.pl> napisał w
wiadomości news:da31em$b2k$1_at_nospam_nemesis.news.tpi.pl...
Hmmm nie wiadomo, mam przesłać blok danych ponad 100 bajtów i z
moich
doświadczeń wynika, że marnie się to robi z kwarcami nie będącymi
UART-komaptybilne. Po prostu ilośc błędów rośnie poza granicę
akceptacji.
RS232 synchronizuje się do każdego bitu startu, a nie do całego bloku.
Dokładność musi wytrzymać tylko 10 bitów.
Odchyłka częstotliwości 2% da błąd odczytu ostatniego bitu 20%
(zamiast w środku bitu (50%) to w 30% lub 70% jego czasu).
Trzeba wiedzieć, co się dzieje ze zboczami w transmisji (eye diagram)
i można praktycznie uniknąć jakichkolwiek błędów.
P.G.
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 11:29:57 +0200
On Fri, 01 Jul 2005 09:16:30 +0200, Adam Jurkiewicz wrote:
Sebastian Bialy wrote:
Założenie jest takie, że kod do tego licznika nie powinien podlegac
ręcznej poprawce, jedyne co może docelowy programista to zmienić CRYSTAL
i na podstawie tego preprocesor ustali wszystkie parametry (i fajnie jak
by ustalił również szerokość zmiennej).
W życiu nie uzyskasz czegoś takiego, kwarc dobiera się do konkretnego
zastosowania, a nie układ do kwarcu. Nigdy nie dostaniesz dobrego
podziału dla obliczeń czasu i UARTA przy dowolnym kwarcu.
Kwestia wielkosci arytmetyki tylko :-)
Spojrz na linuxa - masz mikroadjustacje zegara w jadrze i akceptuje
wszystkie kwarce :-)
J.
From: Adam Jurkiewicz <sword_at_nospam_NIEMATEGOajpic.zonk.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 11:30:55 +0200
J.F. wrote:
Kwestia wielkosci arytmetyki tylko :-)
Spojrz na linuxa - masz mikroadjustacje zegara w jadrze i akceptuje
wszystkie kwarce :-)
Tja, zaraz na Army wejdziemy z tą arytmetyką ;)
sword
--
e-mail: sword_at_nospam_TEGONIEMAajpic.zonk.pl
www: http://ajpic.zonk.pl/
gg#: 1781804
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 1 Jul 2005 19:04:57 +0200
Adam Jurkiewicz wrote:
i fajnie jak by ustalił również szerokość zmiennej).
W życiu nie uzyskasz czegoś takiego
-)))
Zawsze pisze tak program aby na podstawie zdefiniwanego kwarcu
program się odpowiednio skompilował ale są granice takiego doboru.
Ano ni ma, Panocku. :-)
Pozdrawiam
Piotr Wyderski
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 11:29:57 +0200
On Fri, 01 Jul 2005 08:05:25 +0200, Sebastian Bialy wrote:
J.F. wrote:
Hmmm mam coś podobnego w tej chwili, tylko nie licze wspólnej
wielokrotności tylko na zywca dodaje tak:
#define CRYSTAL=11059200
#define FREQ=1000
// 256 cykli na przerwanie licznika i preskaler przez 8
#define COUNTER_VALUE_ADD ((unsigned long)FREQ*256*8)
SIGNAL(SIG_OVERFLOW0)
{
static unsigned long counter=0;
counter+=COUNTER_VALUE_ADD;
if(counter>CRYSTAL)
{
counter-=CRYSTAL;
/* tu mam co 1ms */
}
}
I bardzo ładnie i stabilnie dostaje 1ms odstepu.
Hm - z powodu tego /8 masz czestotliwosc 5400 Hz. To daje jitter
~0.1ms
Jednak: szukam czegoś szybszego albo metody na zgadnięcie podczas
kompilacji, czy licznik jest unsigned long czy unsigned short.
Zauwaz ze mozesz podzielic obie liczby przez 100. A nawet przez 200.
Przy zalozeniu ze kwarc zawsze podasz z dwoma zerami na koncu, to w
zasadzie zawsze mozesz podzielic
No to w makrach C mozesz miec problem z LCM/GDC :-)
To niezłe ćwiczenie by było pod warunkiem że GCC pozwalałby na jakąś
arytmetykę i porównania :D
troche pozwala .. a C++ to ponoc nawet duzo :-)
No i jakbys sie nie upieral przerwan robic co 256 taktow,
to byc moze by sie znalazl kwarc dobry do precyzyjnego taktowania
i seriala i ms - np 15.360MHz.
Za szybko :) Biedactwo 90S2313 nie da rady ...
Nie musi byc taki. Z jednej strony chcesz wielokrotnosc
153600 [16*9600 - czy szybciej]. Z drugiej - wielokrotnosc 1000
[8000 ?]. LCM wychodzi 768kHz .. i dowolna wielokrotnosc tego bedzie
dobra. W szczegolnosci:
7680000
8448000
9216000
9984000
10752000
11520000
hm .. chyba zadnych takich nie robia :-(.
Z drugiej strony .. chyba 10MHz by sie ladnie nadawal, dla RS te 0.2%
roznicy nie ma zadnego znaczenia :-)
J.
J.
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 11:54:33 +0200
J.F. wrote:
I bardzo ładnie i stabilnie dostaje 1ms odstepu.
Hm - z powodu tego /8 masz czestotliwosc 5400 Hz. To daje jitter
~0.1ms
Nic nie szkodzi, chodzi o stabilnośc długofalową (rzedu parudziesięciu
sekund).
Zauwaz ze mozesz podzielic obie liczby przez 100. A nawet przez 200.
Przy zalozeniu ze kwarc zawsze podasz z dwoma zerami na koncu, to w
zasadzie zawsze mozesz podzielic
Mogę, niestety muszę to znaleźć w sposób, który zwalnia programistę
wykorzystaującego ten moduł od myślenia (bo tak się składa, że to ja
będe :P).
Za szybko :) Biedactwo 90S2313 nie da rady ...
Nie musi byc taki.
Żartuje :)
hm .. chyba zadnych takich nie robia :-(.
Z drugiej strony .. chyba 10MHz by sie ladnie nadawal, dla RS te 0.2%
roznicy nie ma zadnego znaczenia :-)
No nic, potestuje teraz na moim konwerterze czy faktycznie kwarce
"nie-rs" nie będa robic różnicy. Niestety na fabrycznym konwerterze
sypie błędami CRC przy kwarcu 10MHz :(
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 14:19:56 +0200
On Fri, 01 Jul 2005 11:54:33 +0200, Sebastian Bialy wrote:
J.F. wrote:
Zauwaz ze mozesz podzielic obie liczby przez 100. A nawet przez 200.
Przy zalozeniu ze kwarc zawsze podasz z dwoma zerami na koncu, to w
zasadzie zawsze mozesz podzielic
Mogę, niestety muszę to znaleźć w sposób, który zwalnia programistę
wykorzystaującego ten moduł od myślenia (bo tak się składa, że to ja
będe :P).
Jesli to zawsze bedzie 1000Hz, i kwarc w miare z zakresu 5-15MHz,
to mozesz przez 100 dzielic od razu. Niech sobie programista wpisuje
ile chce na koncu, po podzialeniu i tak wyyjdzie dobrze.
A kwarc .. przy 50ppm i tak mamy +/-500Hz :-)
Z drugiej strony .. chyba 10MHz by sie ladnie nadawal, dla RS te 0.2%
roznicy nie ma zadnego znaczenia :-)
No nic, potestuje teraz na moim konwerterze czy faktycznie kwarce
"nie-rs" nie będa robic różnicy. Niestety na fabrycznym konwerterze
sypie błędami CRC przy kwarcu 10MHz :(
A predkosc masz 9600 i zadnych preskalerow ? bo niestety
10M/9600/16=65.1, i na zaden inny podzial 65 nie ma tu juz miejsca ..
J.
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 1 Jul 2005 19:00:15 +0200
Sebastian Bialy wrote:
Jednak: szukam czegoś szybszego albo metody na zgadnięcie podczas
kompilacji, czy licznik jest unsigned long czy unsigned short.
template <typename T> struct property {
enum { is_unsigned_short = 0 };
};
template <> struct property<unsigned short> {
enum { is_unsigned_short = 1 };
};
test:
std::cout << property<int>::is_unsigned_short << " " << property<unsigned
short>::is_unsigned_short << std::endl;
0 1
-) To tylko drobna próbka. Teraz rozumiesz, czemu cierpię pisząc w VHDL?
;-)
To niezłe ćwiczenie by było
Z nieznajomości C? ;-> Makroekspansja nie działa rekurencyjnie,
więc preprocesorem niczego nie zwojujesz. Potrzebujesz szablonów,
a więc C++. One są z kolei trochę "za silne" -- da się w nich zakodować
maszynę Turinga, a więc i DOWOLNY program. W poprzednim liście
zapisałem alg. Euklidesa.
pod warunkiem że GCC pozwalałby na jakąś arytmetykę i porównania :D
Standardowy C++ pozwala. Co prawda jego twórcy tego
nie przewidzieli, ale oni w ogóle mało przewidzieli. ;-D
Pozdrawiam
Piotr Wyderski
--
"The universe is full of magical things, patiently waiting for our wits to
grow sharper."
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 1 Jul 2005 18:42:49 +0200
J.F. wrote:
No to w makrach C mozesz miec problem z LCM/GDC :-)
I właśnie po to mikrokontrolerom jest potrzebne C++ (a nie
do jakiegoś tam programowania obiektowego):
template <unsigned long m, unsigned long n> struct gcd {
enum { val = gcd<n, (m % n)>::val };
};
template <unsigned long m> struct gcd<m, 0U> {
enum { val = m };
};
template <unsigned long m, unsigned long n> struct lcm {
enum { val = (m*n)/gcd<m,n>::val };
};
test:
std::cout << gcd<20,24>::val << " " << lcm<20,24>::val << std::endl;
4 120
Pozdrawiam
Piotr Wyderski
--
"There is no spoon. There's a difference between knowing the path, and
walking the path." :-P
From: Tomasz Piasecki <mtbrider_at_nospam__-nospam-_.poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 17:57:14 +0200
Sebastian Bialy wrote:
PS. Zakładam że nie chce wywoływać dokładnie co 1ms, ale statystycznie
powinno wypaśc 100 wywołań na 100ms. Zakładam równiez że znam wartośc
kwarcu w momencie kompilacji (program w C).
Sprawa jest prosta.
Masz zegar 11059000 Hz. Wliczając że przerwanie jest co 256 cyknięć to
okres przerwań wynosi w przybliżeniu 23149 ns. Potrzebujesz odmierzać
1ms = 1000000 ps.
deklarujesz co najmniej 24-bitowy licznik. Za każdym tyknięciem
przerwania dodajesz mu 23149 i sprawdzasz, czy przekroczono 1000000.
Jeśli tak to robisz co trzeba co te 1ms i od zawartości licznika
odejmujesz 1000000. Reszta która zostanie powoduje że w następnej
rundce pamiętana jest poprawka na to że to 1ms jest całkowicie
niesychroniczne z czymkolwiek w procku.
TP.
--
| _ _ _ |
| _____ _| |_| | __ (o) | | __ __ _at_nospam_poczta.onet.pl |
| | \ | | |o \| \| |/o |/ _\| \ |
| |_|_|_| \_| |__/|_| |_|\__|\__||_| Tomasz Piasecki |
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 18:03:55 +0200
Tomasz Piasecki wrote:
deklarujesz co najmniej 24-bitowy licznik. Za każdym tyknięciem
przerwania dodajesz mu 23149 i sprawdzasz, czy przekroczono 1000000.
> [...]
Dokładnie tak mam teraz, szukam jednak czegos prostszego i uniwersalnego
jednocześnie. coraz bardziej jednak utwierdzam się w przekonaniu, że
pewnie prościej (i uniwersalniej jednoczęsnie) się nie da.
--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl
From: Tomasz Piasecki <mtbrider_at_nospam__-nospam-_.poczta.onet.pl>
Subject: Re: CPU z kwarcem do transmisji szeregowej a odliczanie 1ms
Date: Fri, 01 Jul 2005 18:04:41 +0200
Tomasz Piasecki wrote:
1ms = 1000000 ps.
Oczywiście 1ms = 1000000 ns.
TP.
--
| _ _ _ |
| _____ _| |_| | __ (o) | | __ __ _at_nospam_poczta.onet.pl |
| | \ | | |o \| \| |/o |/ _\| \ |
| |_|_|_| \_| |__/|_| |_|\__|\__||_| Tomasz Piasecki |