Odp: procedury delay dla 89s8252



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <lbajger_at_nospam_wp.pl>
Subject: Odp: procedury delay dla 89s8252
Date: Mon, 28 Jun 2004 10:13:51 +0200


[ciach]

az tak dokladnie nie potrzebuje ale to co znalazlem to bylo:

pisze ze delay okolo 5ms ;((
for (n = 0; n < count; n++)
for (m = 0; m < 255; m++) ;

Przy pomocy pętli - rozkazów, można zrobić delay tylko
"na oko". A jak liczyć? A no lista rozkazów do ręki, ten zajmuje 2 cykle,
ten 3 - zsumować, pomnożyć przez okres zegara (w większości 51-ek kwarc
dzielony jest przez 12) i wszystko.

Dalej nie rozumiem... czemu przerz 12 ? a kwarc nie ma znaczenia ???
ok policze sobie ile kazda petla zjada cykli i co dalej ? ile na przyklad
czasu zajmie 10 cykli przy kwarcu 11.0592 ?

us - to 10^-6 sekundy, ms - to 10^-3. No cóż... Policz sobie gdzie
zrobiłeś
błąd ;-)

hmm czyli:
1000us -> 1ms
1000ms -> 1s
? ;)

pozdr.
LB



========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <lbajger_at_nospam_wp.pl>
Subject: Odp: procedury delay dla 89s8252
Date: Sat, 3 Jul 2004 12:09:18 +0200


Dziekuje wszystkim za odpowiedz

Potrzebuje tego poniewaz napisalem procedurki obslugi lcd
z taka funkcja delay na oko, wyswietlacz jest aktualizowany co
ok 1s i opoznienia sa tak duze ze zauwazam mruganie wyswietlacza.
A dokladniej opoznienia (po wyslaniu komendy lub danych):
5ms czyszczenie
1ms goto
1ms pisanie
wiec zapisanie calego wyswietlacza (2x16):
5+1+(16x1) = 22ms opoznienia do tego cala reszta obslugi lcd...
w sumie to moze mrugac z innego powodu...

Eksperymentowalem z czasami i udalo mi sie dojsc do etapu gdzie
mrugniecia sa prawie nie zauwazalne (wklejalem nop`y). Ale wolal
bym sie tzymac scisle specyfikacji kontrolera lcd. Do tego celu
potrzebne mi sa wlasnie dokladne procedurki (zedu 1us). Oczywiscie
procedurki napisze sobie w asmie inaczej nie mialo by to sensu...

Co sie tyczy pomyslu zaimplementowania funkcji delay na przerywaniu tick
w moim przypadku nie ma juz wiecej ramu na licznik ;) a poza tym moim
zdaniem osiagniecie takiej dokladnosci w srodowisku przerywaniowym
(nie tylko przerywanie tick) jest nie mozliwe.

Teraz prosze mnie nie zlinczowac z tego co rozumiem przy zegarze
11.0592Mhz w ciagu jednej sekundy procesor wykona 921600 cykli.
Czyli nop/cykl zajmuje 1.08... us tak ?

btw: pisze w asmie i C uzywam keil`a

pozdr.
LB



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Ireneusz Niemczyk <Adres_at_nospam_znajdziesz.w.starym.archiwum>
Subject: Re: Odp: procedury delay dla 89s8252
Date: Sat, 03 Jul 2004 15:29:21 +0200


A dokladniej opoznienia (po wyslaniu komendy lub danych):
5ms czyszczenie
1ms goto
1ms pisanie
wiec zapisanie calego wyswietlacza (2x16):
5+1+(16x1) = 22ms opoznienia do tego cala reszta obslugi lcd...
w sumie to moze mrugac z innego powodu...

A czy musisz czyscic?
Zazwyczaj LCD-ki migaja, gdy pod jeden adres wpisywane sa rozne znaki,
przykladowo spacja wypelnia liniewyswietlacza do konca, a nastepnie
umieszczasz w tej linii jakies znaki - bankowo beda migac. Zakladam
oczywiscie ze rozmawiamy o znakowym.

Eksperymentowalem z czasami i udalo mi sie dojsc do etapu gdzie
mrugniecia sa prawie nie zauwazalne (wklejalem nop`y). Ale wolal
bym sie tzymac scisle specyfikacji kontrolera lcd. Do tego celu
potrzebne mi sa wlasnie dokladne procedurki (zedu 1us). Oczywiscie
procedurki napisze sobie w asmie inaczej nie mialo by to sensu...

A nie lepiej czekac na flage gotowosci - jesli oczywiscie kontroler
wyswietlacza ja wystawia (Hitachi wystawia na bicie 7-mym). Wtedy wszystko
dzieje sie optymalnie szybko.Trzeba tylko przewidziec sytuacje, w ktorej
kontroler wyswietlacza nie zechce wystawic potwierdzenia (zwis, cos zle
odbierze). Warto wtedy pchnac go w reset...na moment.

Co sie tyczy pomyslu zaimplementowania funkcji delay na przerywaniu tick
w moim przypadku nie ma juz wiecej ramu na licznik ;) a poza tym moim
zdaniem osiagniecie takiej dokladnosci w srodowisku przerywaniowym
(nie tylko przerywanie tick) jest nie mozliwe.

Mam wrazenie ze rozwiazujesz problem metoda silowa....

Teraz prosze mnie nie zlinczowac z tego co rozumiem przy zegarze
11.0592Mhz w ciagu jednej sekundy procesor wykona 921600 cykli.
Czyli nop/cykl zajmuje 1.08... us tak ?

Zalezy jaki procek, ale zwyczajowo 51-ki i bliskie klony dziela zegar przez
12-cie. Wiec NOP (jako ze jest jednotaktowy) wykona sie dokladnie tak jak
piszesz.

btw: pisze w asmie i C uzywam keil`a

I bardzo dobrze robisz - moje ulubione srodowisko :-)))

Milego dnia.

__
Pzd, Irek.N.
ps. Czy rozmawiamy o standardowym LCD-ku z kontrolerem Hitachi?
ps2. Pamietaj, aby zawsze przy starcie procka resetowac LCD-a programowo.


========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Przemek Żyła" <przemcio_at_nospam__at_nospam_onet.pl>
Subject: Re: procedury delay dla 89s8252
Date: Mon, 28 Jun 2004 10:36:08 +0200



az tak dokladnie nie potrzebuje ale to co znalazlem to bylo:

pisze ze delay okolo 5ms ;((
for (n = 0; n < count; n++)
for (m = 0; m < 255; m++) ;

to jak w koncu? dokladnie czy niedokladnie???
niedokladnie masz juz zrobione, a dokladnie Jacek
podal ci rozwiazanie...
to co wkleiles za kod, to zalezy od tego w jakim
kompilatorze to kompilujesz... w jednym petla
moze zajmowac 5ms, w drugim 40ms, zas w trzecim 1ms...

Przy pomocy pętli - rozkazów, można zrobić delay tylko
"na oko". A jak liczyć? A no lista rozkazów do ręki, ten zajmuje 2
cykle,
ten 3 - zsumować, pomnożyć przez okres zegara (w większości 51-ek kwarc
dzielony jest przez 12) i wszystko.

Dalej nie rozumiem... czemu przerz 12 ? a kwarc nie ma znaczenia ???
ok policze sobie ile kazda petla zjada cykli i co dalej ? ile na przyklad
czasu zajmie 10 cykli przy kwarcu 11.0592 ?
nie myl cyklu z taktem
przewaznie (te najpopularniejsze) '51 maja
cykl rowny 12 taktom zegara...
jesli masz kwarc 12Mhz to twoj procek moze zrobic
max 1 milion instrukcji jednocyklowyc, np NOP...
jesli chcesz wiedziec wiecej, to poczytaj lepiej,
bo nie sadze, zeby komus sie chcialo omawiac
cala architekture '51, zebys ty zrozumial czemu dzielimy
zegar przez 12...
a jesli masz procek TI, to dzielisz, albo przez 12, albo przez 4,
zalezy jak sobie ustawisz...
jesli masz DALLASa, to nawet sa takie co nie dzielisz:)))


us - to 10^-6 sekundy, ms - to 10^-3. No cóż... Policz sobie gdzie
zrobiłeś
błąd ;-)

hmm czyli:
1000us -> 1ms
1000ms -> 1s
? ;)
widzisz tu gdzies niescislosc???
bo moim zdaniem jest wszystko oki


--
Przemcio Żyła
www.nasza.resnet.



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek Bogusz" <jacek.bogusz_at_nospam_ep.com.pl>
Subject: Re: procedury delay dla 89s8252
Date: Mon, 28 Jun 2004 11:05:26 +0200


az tak dokladnie nie potrzebuje ale to co znalazlem to bylo:

No widzisz... Rzecz pierwsza - nie piszesz jakim językiem programowania się
posługujesz. Myślałem, że asemblerem. A z listingu wynika, że C. Niestety w
takich przypadkach najlepsza jest metoda uczonego "Macajewa" ;-). Tzn
piszesz funkcję, najlepiej jakiś długi czas, i mierzysz ją ze stoperem w
ręku. Na przykład funkcję "delay_1ms" wywołujesz w postaci (tu tylko
symbolicznie!) "5000 x delay_1ms". Potem tylko dobierasz stałe w pętli, aby
było jak najlepiej (najdokładniej). W przypadku języków wysokiego poziomu
bardzo często postać pętli zależy od rodzaju włączonej optymalizacji.
Dlatego też aby dokładnie wyliczyć czas trwania twojego "delay" musisz
sięgnąć do listingu w postaci tekstu asemblera. Czasami (większość)
kompilatory produkują taki zbiór przejściowy.

Dalej nie rozumiem... czemu przerz 12 ? a kwarc nie ma znaczenia ???

Oczywiście, że ma znaczenie. Częstotliwość kwarcu przez 12 i to jest cykl
maszynowy (dla większości 51-ek). Każdy rozkaz zajmuje od 1 do iluś tam
cykli (różnie w różnych uK, trzeba sprawdzać w pdf).

ok policze sobie ile kazda petla zjada cykli i co dalej ? ile na przyklad
czasu zajmie 10 cykli przy kwarcu 11.0592 ?

(1/11059200) sekundy x 12 x 10 = ....

BTW - na mojej stronie http://www.easy-soft.tsnet.pl/ znajdziesz przykłady
programów w C (np obsługa wyświetlacza LCD), gdzie jest tego rodzaju pętla
opóźnienia zrobiona "na oko" ;)

Jacek



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.ipartners.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
Subject: Re: procedury delay dla 89s8252
Date: 28 Jun 2004 10:06:57 GMT


W artykule <cbon1a$flg$1_at_nospam_news.dialog.net.pl> Jacek Bogusz napisal(a):
No widzisz... Rzecz pierwsza - nie piszesz jakim językiem programowania się
posługujesz. Myślałem, że asemblerem. A z listingu wynika, że C. Niestety w
takich przypadkach najlepsza jest metoda uczonego "Macajewa" ;-). Tzn
piszesz funkcję, najlepiej jakiś długi czas, i mierzysz ją ze stoperem w
ręku. Na przykład funkcję "delay_1ms" wywołujesz w postaci (tu tylko

Kompilatory generują również kod w asemblerze - można też policzyć na palcach
cykle. I pamiętać, żeby nie zmieniać opcji optymalizacji.

Pozdrawiam

Marcin Stanisz
--

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.task.gda.pl!opal.futuro.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Ireneusz Niemczyk <Adres_at_nospam_znajdziesz.w.starym.archiwum>
Subject: Re: procedury delay dla 89s8252
Date: Mon, 28 Jun 2004 14:27:26 +0200


Kompilatory generujš również kod w asemblerze - można też policzyć na palcach
cykle. I pamiętać, żeby nie zmieniać opcji optymalizacji.

Mozna sobie niechcacy RS-a uruchomic, czy tez inne irq i szlak trafia wszystkie
mozolne przeliczenia ;-)


Milego dnia Marcinie.
__
Pzd, Irek.N.


========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek Bogusz" <jacek.bogusz_at_nospam_ep.com.pl>
Subject: Re: procedury delay dla 89s8252
Date: Mon, 28 Jun 2004 15:41:31 +0200


Mozna sobie niechcacy RS-a uruchomic, czy tez inne irq i szlak trafia
wszystkie
mozolne przeliczenia ;-)

Hehe, no właśnie to sugeruję ;-)

Jacek



========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Ireneusz Niemczyk <Adres_at_nospam_znajdziesz.w.starym.archiwum>
Subject: Re: procedury delay dla 89s8252
Date: Mon, 28 Jun 2004 23:04:39 +0200


Hehe, no właśnie to sugeruję ;-)

Ano wlasnie.

U mnie standard wyglada tak:
do LCD-ka czy tez obslugi portow, staram sie to przerwanie miec co 1ms lub
10ms jak przerwanie dlugie wychodzi w obsludze.
dekrementowana, chyba ze jest na lopatkach, czyli jej wartosc jest rowna
zero.
nastepnie zapetla sie czekajac, az owa zmienna sie wyzeruje.

Jakos taki mi sie kiedys napisalo - i tak juz pozostalo. Mozna by jedynie
pomyslec nad optymalizacja fragmentu argument->zmienna, jesli komus sie chce.
;-)

__
Pzd, Irek.N.


========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.nask.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai