procedury delay dla 89s8252

Witam!

Czy ma ktos moze gotowe procedury delay dla procesora at89s8252 ? Ew: jesli ktos moglby mi powiedziec jak to wyliczyc samemu, albo moze link jakis ? Ciekawe ale w sieci nie moge nic znalezc... Serio dorwalem jakies przyklady z 8051.de ale po niemiecku, w ktorych petla wyglada jakby zrobiono ja na oko... Niestety potrzebuje cos dokladniejszego... Kwarc 11.0592, interesuje mnie 1us oraz 1ms. I jak to wlasciwie jest ?

100us -> 1 ms 100ms -> 1 s ?

pozdr. LB

Reply to
drozdu
Loading thread data ...

moze warto zakupic jakas ksiazke do '51 jest kilka pozycji w kazdej dobrej ksiegarni technicznej (nawet w czestochowie :)))

a czasy?

1000us -> 1 ms 1000ms -> 1 s

sa jeszcz setne sekundy, ale to w sporcie stosowane:)))

1 setna to 10ms:))))

pozdr

Reply to
invalid unparseable
Reply to
invalid unparseable

W artykule <cbon1a$flg$ snipped-for-privacy@news.dialog.net.pl> Jacek Bogusz napisal(a):

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

Reply to
Marcin Stanisz

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

Milego dnia Marcinie. __ Pzd, Irek.N.

Reply to
Ireneusz Niemczyk

Ano wlasnie.

U mnie standard wyglada tak:

- zawsze mam jakies cykliczne przerwanie w procku, a to do klawiatury, a to do LCD-ka czy tez obslugi portow, staram sie to przerwanie miec co 1ms lub

10ms jak przerwanie dlugie wychodzi w obsludze.

- zmienna globalna z gatunku unsigned int jest w rzeczonym wyzej przerwaniu dekrementowana, chyba ze jest na _lopatkach_, czyli jej wartosc jest rowna zero.

- procedura DELAY(unsigned int) przepisuje argument do zmiennej globalnej, a 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.

Reply to
Ireneusz Niemczyk

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

Reply to
drozdu

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.

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.

Mam wrazenie ze rozwiazujesz problem metoda silowa....

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.

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.

Reply to
Ireneusz Niemczyk

Oczywiscie rozmawiamy o znakowym. Nie rozumiem, czeszcze ekran, potem wpisuje cala linie, ustawiam adres drugiej lini i pisze druga linie. Lancuchy ktore wpisuje nie sa dopelniane spacjami do 16bajt, dlatego zawsze czyszcze.

Wyliczenie funkcji delay oraz zmniejszenie czasow oczekiwania zmniejszylo mruganie do poziomu ktory jest akceptowalny.

Sprawdzanie stanu flagi gotowosci z pewnoscia wyeliminuje problem w zupelnosci.

Procek jest w temacie, dzieki wszystkim za ten delay !

Moje to gcc i avrstudio ;) np: w keilu jest problematyczna kwestia obslugi wewnetrznego eepromu ale jeszcze tego nie przerobilem.

Tak, standardowy - 16x2.

pamietam ;)

pozdr. LB

Reply to
drozdu
124F6CA55074EE493EC720AE Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 7bit

OK.

Wyswietlacz ma taka przypadlosc, ze jesli dostanie w adres powiedzmy 0x80 jakis znak, to bedzie chcial go wyswietlic, jesli dostanie w to samo miejsce chwile pozniej inny znak - to tez bedzie chcial go wyswietlic. W efekcie na tej pozycji pole bedzie migalo - raz bedzie jeden znak wyswietlany, raz drugi - to oczywiste, prawda? Traz pomysl, ze czesto na wyswietlaczu umieszcza sie jakas etykiete, a zaraz za niawartosc jej przynalezna.

Jesli wezmiemy pod uwage wyswietlacz z linijka 16-to znakowa i bedziemy chcieli wyswietlic w taki sposob jak nizej i etykiete i wartosc - bedzie miganie na ekranie...

123456789ABCDEF0 - linijka wyswietlacza "ETYKIETA = " - przykladowa etykieta, za dluga "12345" - przykladowa wartosc

W tym przypadku zachodza na siebie 2 pola - wiec oba beda migac (spacje z 1 i

2). Tak samo jest jesli zrobisz czyszczenie wyswietlacza - wtedy on po prostu wpisze spacje we wszystkie swoje pola...a wiec wszysko co pozniej na nim bedziesz umieszczal - bedzie migalo. Pomijam, ze czyszczenie zajmuje chyba wiecej czasu niz wypelnienie spacjami ;-))

Ale nie rozwiazalo problemu...

Mozesz po prostu zadbac o to, aby nie mieszac mu w zawartosci pamieci ekranu niepotrzebnie. Tez nie bedzie migalo i nie bedzie problemu z czasem dla niego.

O, a to dlaczego jest problem? Ja jakos nie przepadam za AVR-ami...jakos tak...

__ Pzd, Irek.N.

Reply to
Ireneusz Niemczyk

I tak nalezy do tego podejsc. Z tym ze czasem raportowano problemy z ta flaga - procek gotowosc sygnalizuje, a naprawde wcale nie jest gotowy..

J.

Reply to
J.F.
8363E425AC235F44FD4B0CFD Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 7bit

Po pierwsze jest to duplikat postu, ktory newsowy serwer Dialogu ignorowal - nie wiem dla czego, zlapalem juz 2-gi taki przypadek, cos sie nie staraja. Na szczescie google _zlapalo_ ;-) Pewnie dla niektorych bedzie to powtorka - sorki Panowie. ;-)

OK.

Wyswietlacz ma taka przypadlosc, ze jesli dostanie w adres powiedzmy 0x80 jakis znak, to bedzie chcial go wyswietlic, jesli dostanie w to samo miejsce chwile pozniej inny znak - to tez bedzie chcial go wyswietlic. W efekcie na tej pozycji

pole bedzie migalo - raz bedzie jeden znak wyswietlany, raz drugi - to oczywiste, prawda? Traz pomysl, ze czesto na wyswietlaczu umieszcza sie jakas etykiete, a zaraz za nia wartosc jej przynalezna.

Jesli wezmiemy pod uwage wyswietlacz z linijka 16-to znakowa i bedziemy chcieli wyswietlic w taki sposob jak nizej i etykiete i wartosc - bedzie miganie na ekranie...

123456789ABCDEF0 - linijka wyswietlacza "ETYKIETA = " - przykladowa etykieta, za dluga o 2 znaki "12345" - przykladowa wartosc

W tym przypadku zachodza na siebie 2 pola - wiec oba beda migac (spacje z 1 i

2). Tak samo jest jesli zrobisz czyszczenie wyswietlacza - wtedy on po prostu wpisze spacje we wszystkie swoje pola...a wiec wszysko co pozniej na nim bedziesz umieszczal - bedzie migalo. Pomijam, ze czyszczenie zajmuje chyba wiecej czasu niz wypelnienie spacjami ;-))

Ale nie rozwiazalo problemu...

Mozesz po prostu zadbac o to, aby nie mieszac mu w zawartosci pamieci ekranu niepotrzebnie. Tez nie bedzie migalo i nie bedzie problemu z czasem dla niego.

O, a dlaczego jest z tym problem? Ja jakos nie przepadam za AVR-ami...jakos tak...

__ Pzd, Irek.N. ps. Jarku - o co chodzilo z ta flaga, nie pamietam zadnych _powtarzalnych_ klopotow...

Reply to
Ireneusz Niemczyk

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.