Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

GLCD z ST9720 kontrolerjem
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Ned Apr 15, 2012 2:02 pm    Naslov sporočila: Odgovori s citatom

No lepo.

Sedaj napisi nov makro. (kar onega prekopiraš pa malo spremeniš)
Koda:

macro Znak
   ldi stevec,8
   sbi CS                  ;vkop vodila
   ldi tmp,0b11111010
   rcall Poslji
   ldi tmp,(0xf0&@0)
   rcall Poslji
   ldi tmp,(0xf&@0)*16
   rcall Poslji
   cbi CS
.endm




Pa v nadaljevanju napiši :

Koda:

     Znak 'P'
      Znak 'r'
      Znak 'o'
      Znak 't'
      Znak 'o'
      Znak 'n'
      Znak 'c'
      Znak 'e'
      Znak 'k'
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Profesionalec


Pridružen/-a: Sob Maj 2007 9:25
Prispevkov: 303
Kraj: Mengeš

PrispevekObjavljeno: Ned Apr 15, 2012 2:26 pm    Naslov sporočila: Odgovori s citatom

joj,ne...bom še veselje do zbirnika dobil Smile
medtem sem ugotovil da je bascom očitno prepočasen za tole...preden LCD dobi impulz iz njega, že obupa in gre adijo...
torej mi ostane vgradnja podprograma iz zbirnika.
Tale nov makro je pa sploh špica, ja. Veliko lažje je pisati po LCD-ju.
EDIT: evo še slikco, da bo potrjeno...

_________________
http://www.protoncek.com
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Ned Apr 15, 2012 2:35 pm    Naslov sporočila: Odgovori s citatom

Ne bi rekel, da je vzrok hitrost. Po moje ga nekje lomiš. CLK spuščaš z visokega na nizko ter ga ob inicializaciji postaviš na visoko?

Na podoben način si lahko spišeš makroje za vse ostalo. (brisanje, poziconiranje....) Za zadeve, ki se ponavljajo pa je bolje spisati proceduro. Makro ob enem tudi požira programski pomnilnik saj se ob vsaki navedbi koda ponovi. Sicer ga je za tole kar sva sedaj napisala na megi32 ni vzel niti 1% tako da ni krize.

ps
Simatičen displej Cool
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Profesionalec


Pridružen/-a: Sob Maj 2007 9:25
Prispevkov: 303
Kraj: Mengeš

PrispevekObjavljeno: Ned Apr 15, 2012 2:39 pm    Naslov sporočila: Odgovori s citatom

Aha, torej če prav razumem je makro zgolj neke sorte ukaz prevajalniku, v bistvu bližnjica zame, da ne pišem stokrat isto, v HEX datoteki pa se ponovi vedno, ko ga kličem...torej bi bilo mogoče za ponavljajoče ukaze bolje napisati podprogram?
_________________
http://www.protoncek.com
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Ned Apr 15, 2012 2:46 pm    Naslov sporočila: Odgovori s citatom

Predprevajalnik zamenja vso kodo v makru s tistim kar je napisano v makro. Parametre, ki so navedeni z @ pa zamenja z vrednostmi. Če so kaki izračuni, še tudi to stori. V drugem primeru se nad prejetemu parametru vrši logični AND torej 0b11110000 nad prejet parameter. Tako dobimo le zgornje 4 bite ki jih potrebujemo. V drugem delu "poreže" zgornje bite ter rezultat pomnoži z 16 tako se spodnji biti "premaknejo" na zgornje. (kar pač potrebujemo v danem primeru) - izračunani rezultati so že v kodi. Tega procesor torej ne računa.

Koda bi načeloma mogla delat brez kakih sprememb tudi na tiny-ih - No pine bo potrebno ustrezno določit.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Profesionalec


Pridružen/-a: Sob Maj 2007 9:25
Prispevkov: 303
Kraj: Mengeš

PrispevekObjavljeno: Ned Apr 15, 2012 2:50 pm    Naslov sporočila: Odgovori s citatom

aha...jasno.
No, ravnokar sem uspešno ustvaril pavzo vrednosti 2 ms. Namreč - po ukazu CLS je treba počakati 1,6 mS, toliko časa namreč traja brisanje. Uporabil sem kar r20 in r21. Smile
Sicer pa tole, kar se vidi na sliki zgoraj trenutno zasede 4.3% mege16 (698 bytes)

_________________
http://www.protoncek.com
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Ned Apr 15, 2012 3:53 pm    Naslov sporočila: Odgovori s citatom

No sem še spisal procedurco. V kombinaciji z makrom bi moralo iti še enostavneje pisati na displej besede.

zgoraj definiraj še en register .def tmp2=r18

Pa dodaj tole kodo:
Koda:

;-----------------------------------------------
;procedura pošlje na LCD znak ki ga dobi v tmp2
;----------------------------------------------
PosljiZnak:
ldi stevec,8
   sbi CS                        ;vkop vodila
   ldi tmp,0b11111010         ;sinhro niz + rw,rs bit
   rcall Poslji
   push tmp2
   andi tmp2,0b11110000         ;gornji biti
   mov tmp,tmp2
   rcall Poslji
   pop tmp
   swap tmp2
   andi tmp2,0b11110000         ;spodji biti
   mov tmp,tmp2
   rcall Poslji
   cbi CS
   ret



.macro Tekst
   ldi ZL,low(Napis*2)
   ldi ZH,high(Napis*2)
NovZnak:
   lpm tmp2,Z+
   tst tmp2
   breq KonecTeksta
   rcall PosljiZnak
   rjmp NovZnak
Napis:
   .db @0,0
KonecTeksta:
.endm



makro pa uporabiš ime makra + besedilo v narekovajih. Upam da bo delalo nimam možnosti probati.

Koda:
   Tekst "Test 01234567890"


No makroje ter vse ostalo navlako lahko daš v svojo datoteko ter jo uporabljaš tudi v drugih programih. (navedeš jo na začetku kot inc file)Tako ti glavni program ostane pregleden.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Profesionalec


Pridružen/-a: Sob Maj 2007 9:25
Prispevkov: 303
Kraj: Mengeš

PrispevekObjavljeno: Ned Apr 15, 2012 5:56 pm    Naslov sporočila: Odgovori s citatom

hm...pri prevajanju mi izpiše opozorilo pri vrstici .db @0,0:
warning: .cseg .db misalignment - padding zero byte

procedura pa pri vnosu "012345" izpiše samo 6 krat prvi znak (torej 000000). Kot da manjka nek shift ali podobno...

_________________
http://www.protoncek.com
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Ned Apr 15, 2012 6:22 pm    Naslov sporočila: Odgovori s citatom

Vidim napako Sad ... Popravi tisti "pop tmp" v "pop tmp2" (v sklad sem dal tmp2 kjer dejansko tisto kar je bilo pobrano s tabele. visoki biti so poslani pravi, nizki pa ne. ) Tisto opozorilo te naj ne moti. Na koncu tabele je dodano 0. Ko je iz tabela pobrano 0 porgram ve, da je teksta konec.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Profesionalec


Pridružen/-a: Sob Maj 2007 9:25
Prispevkov: 303
Kraj: Mengeš

PrispevekObjavljeno: Ned Apr 15, 2012 6:38 pm    Naslov sporočila: Odgovori s citatom

Super. Dela! hvala!
_________________
http://www.protoncek.com
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Ned Apr 15, 2012 7:02 pm    Naslov sporočila: Odgovori s citatom

No sedaj si napišeš en makro za določitev pozicije pisanja pa imaš vse.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Profesionalec


Pridružen/-a: Sob Maj 2007 9:25
Prispevkov: 303
Kraj: Mengeš

PrispevekObjavljeno: Ned Apr 15, 2012 7:25 pm    Naslov sporočila: Odgovori s citatom

Ja, to bom pa že znal. Saj zdaj je vse v istem stilu.
Vidim da tale asembler kljub vsemu je in ni lahek...če bi hotel kaj več, bi definitivno moral prebrati kakšen vodič za začetnike ali kaj takega.
Nekaj me še zanima okoli samega zbirnika:
- ukaz .org0x0 naj bi postavil adreso, kje se program začne. Ali je ukaz .org 0x030 potem v temle primeru brez potrebe?
- vsi makri so napisani pred začetkom programa, namreč če ga postavim ZA ukazom ,ki ga kliče dobim ERROR...pravilno?
- Podprograme (call-ret) pa lahko postavim tudi na konec - nenazadnje je tako bolj pregledno.
- Na začetku je treba definirati kje bo sklad, porte inpodobno "navlako".
Upam da nisem preveč siten...in še enkrat hvala za vse!

_________________
http://www.protoncek.com
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Ned Apr 15, 2012 7:45 pm    Naslov sporočila: Odgovori s citatom

protoncek je napisal/a:
Ja, to bom pa že znal. Saj zdaj je vse v istem stilu.
Vidim da tale asembler kljub vsemu je in ni lahek...če bi hotel kaj več, bi definitivno moral prebrati kakšen vodič za začetnike ali kaj takega.
Nekaj me še zanima okoli samega zbirnika:
- ukaz .org0x0 naj bi postavil adreso, kje se program začne. Ali je ukaz .org 0x030 potem v temle primeru brez potrebe?
- vsi makri so napisani pred začetkom programa, namreč če ga postavim ZA ukazom ,ki ga kliče dobim ERROR...pravilno?
- Podprograme (call-ret) pa lahko postavim tudi na konec - nenazadnje je tako bolj pregledno.
- Na začetku je treba definirati kje bo sklad, porte inpodobno "navlako".
Upam da nisem preveč siten...in še enkrat hvala za vse!


Po vrsti:
Avr ima od začetka pomnilika prekinitvene vektroje. Od mikrokontrolerja zavisi koliko jih ima. (poglej v datashet Interups) Na lokaciji 0x0 je reset. Glede na to, da nismo uporabili nobene prekinitve bi načeloma lahko začeli pisati kar od 0x0.
Makroje uporablja predprevajalnik. Ko gre čez program zamenja vse makroje z dejansko kodo. Enako je z directivami. (napovedi na začetku programa ki se začnejo #) Predprevajalnik zamenja vse direktive z tistim kar napovedujejo. Pozor! Ločuje velike in male črke. Napovedana direktiva mora biti v programu popolnoma enako napisana.
Sklad se standardno definira - določen je konec rama. Tja se odlaga programski števec pri klicih call pa vrednosti potisnene v sklad s POP itd...

Kje v programskem pomniliku se zaključene procedure nahajajo pri AVR praktično ni pomembno. Malo več težav pri tem je pri PIC-u.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Profesionalec


Pridružen/-a: Sob Maj 2007 9:25
Prispevkov: 303
Kraj: Mengeš

PrispevekObjavljeno: Ned Apr 15, 2012 7:56 pm    Naslov sporočila: Odgovori s citatom

Ufff.. veliko za zacetek. Hvala. Brez tvoje pomoči mi LCD definitivno ne bi delal.
_________________
http://www.protoncek.com
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Profesionalec


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Ned Apr 15, 2012 8:06 pm    Naslov sporočila: Odgovori s citatom

Ni problema. Wink Zato obstajajo forumi. Važno, da je displej zagnan. Če kaj ni jasno glede tega kar sva spisala kar vprašaj.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
Stran 2 od 3

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group