www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Mala šola AVR - 4.dan

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sob Sep 18, 2010 1:05 pm    Naslov sporočila:  Mala šola AVR - 4.dan Odgovori s citatom

"Prejšni dan" smo se dotaknili časovnih zakasnitev. Ker se na to temo da napisati ogromo stvari, sem se odločil, da grem po korakih predstavljati projekt, ki sem ga ta čas pripravljal za naš "končni izdelek". Mikrokontroler bo v našem primeru imel funkcijo vmesnika med temperaturnim senzorjem DS1820 ter na drugi strani PC-jem. Spisali bomo oba protokola za serijsko komunikacijo ter 1Wire. Osnovno vezje je sila enostavno. Na njem je le tiny13 upor 4k7 , še en upor ter led - dioda, ki bo na vezju simulirala rele. Tole se brez težav v par minutah sestavi na protobordu. Potrebovali bomo še neko vezje kot vmesik med mikrokontrolerjem ter PC-jem. V koliko bomo vezje priključili na serijska vrata računalnika je zelo primerno proteusovo vezje. V navzi z USB-jem pa vezje na osnovi FT232. (tiskanina sledi v sledečem sporočilu)
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sob Sep 18, 2010 1:56 pm    Naslov sporočila:   Odgovori s citatom

Načrt testnega vezja.


Potrebovali bomo še kak terminalski program. Priporočam braye-v termilal katerega lahko snamete tukaj.

Izgled vmesnika, ki bo v rabi v končni verziji.





Kdo bo sodeloval naj si pripravi vezje. Začeli bomo zvečer.



BILD0723.JPG
 Opis:
Sestavljeno na testni plošči
 Velikost datoteke:  700.92 KB
 Pogledana:  12 krat

BILD0723.JPG



BILD0725.JPG
 Opis:
Vmesnik se da elegantno spakirati v ohišje običajnega 9 polnega konektorja.
 Velikost datoteke:  174.88 KB
 Pogledana:  4 krat

BILD0725.JPG



ft232LAY.pdf
 Opis:
Tiv + razpored za USB vmesnik s FT232RL

Download
 Ime datoteke:  ft232LAY.pdf
 Velikost datoteke:  12.19 KB
 Downloadano:  38 krat


_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sob Sep 18, 2010 3:52 pm    Naslov sporočila:   Odgovori s citatom

Sedajle se mi je nekaj planiranega prestavilo, zato bom nadaljeval kar sedaj:

Kodo prenesite v svoj editor:

Kodo sem po večini pokomentiral. Če kaj ni jasno lahko vprašate. Gre za softwerski serijski protokol. (za enkrat TX osalo še sledi) Glede na to, da je v uporabi interni oscilator količina podatkov, ki se bo pošiljala/ sprejemala pa je zelo mala zato je hitrost 2400 brez paritetnega bita ter enim stop bitom (2400-N-1) Brez težav mi je sicer delalo tudi z precej večjo hitrostjo, a zaradi odstopanja internega oscilatorja sem se odločil uporabiti nizko hitrost. Pri programiranju je potrebno izbrati interni oscilator 9.6MHz ter odmakniti kljukico CKDIV8, ki je pri novih mikrokontrolerjih običajno postavjena prevzeto.

Koda:
;----------------------------------------------
;Mala šola AVR 4.dan
;pisanje protokola za serijsko komuniciranje
;-----------------------------------------------
.include "tn13def.inc"  ;napovemo INC datoteko za mikrokontroler katerega bomo pač uporabili


;poimenovanje splošno namenskih registrov

.def tmp=r16         ;začasni splošnonameski register
.def stevec=r17    ;register bom uporabljal za razno štetje


;direktive za predprevajalnik

#define PortTx DDRB,3      ;port, ki bo uporabljen za serijsko pošiljanje
#define TxPin PortB,3      ;pin ki bo uprabljen za serijsko pošiljanje



.org 0x0
   rjmp GlProg

.org 0x0A
   
;------------------------------------------------
;glavni program
;Osnovni program iz katerega se potem kličejo
;podrutine
;------------------------------------------------
GlProg:
   ldi tmp,low(ramend)
   out SPL,tmp                  ;določitev sklada

   sbi PortTx                  ;določim port, ki bo uporabljen za ser.pošiljanje kot izhod



GlZanka:
   ldi tmp,'A'
   rcall SerialTx
;   rcall Napis1
   rjmp GlZanka


;****************************************************************
;razne procedure
;****************************************************************

Tekst1:
.db "*** www.elektronik.si Forum o elektroniki in racunalnistvu ***",0

Napis1:
   ldi ZL,low(Tekst1*2)
   ldi ZH,high(Tekst1*2)
   rjmp PosljiRS232

PosljiRS232:
   lpm tmp,Z
   tst tmp
   breq KonecTxt
   rcall SerialTx
   inc ZL
   brne PC+2
   inc ZH
   rjmp PosljiRS232


KonecTxt:
   ret

;serijska komunikacija
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

;-----------------------------------------------------
;serijsko pošiljanje
;procedura ob klicu pošlje na serijski port byte, ki ga
;dobi v register tmp
;hitrost 2400-N-1  (2400bps 0-paritetni 1 stop bit)
;------------------------------------------------------
SerialTx:
   ldi stevec,8         ;poslano bo 8 bitov
   cbi TxPin               ;tx pin na nizko stanje
   rcall Pavza415uS   ;pavza enega bita (start bit)
NextBit:
   ror tmp                  ;shift desno Izrinjen bit bo poslan
   brcs Bit1               ;če je C postavljen se pošlje 1
   cbi TxPin               ;sicer 0
   rjmp StejBit         ;
Bit1:
   sbi TxPin
StejBit:
   rcall Pavza415uS   ;pavza dolžine trajanja bita
   dec stevec            ;stevec -1
   brne NextBit         ;če rezultat še ni 0 potem nadaljuj
   sbi TxPin               ;konec bitov
   rcall Pavza415uS   ;stop bit    
   ret


;-----------------------------------------------------------
;Pavza 415uS   Oscilator 9,6Mhz
;-----------------------------------------------------------
Pavza415uS:
   push r20
   push r21
   ldi r20,38
   ldi r21,6
P_zanka:
   dec r20
   brne P_zanka
   dec r21
   brne P_zanka
   pop r21
   pop r20
   nop
   nop
   ret


Če je z povezavo s PC-jem vse ok potem bo bray-ev terminal sprejemal nekaj takega kot je v screenshotu v prilogi.


PS
Morebitna vprašanja lahko zastavite kar v to sporočilo.



terminal2.jpg
 Opis:
V koliko pa v GlZanki odmaknete prvo ter drugo vrstico
ldi tmp,'A'
rcall SerialTx
ter vključite
rcall Napis1
bo izgled tak.
 Velikost datoteke:  531.12 KB
 Pogledana:  90 krat

terminal2.jpg



terminal1.jpg
 Opis:
 Velikost datoteke:  417.77 KB
 Pogledana:  44 krat

terminal1.jpg



_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 723
Aktiv.: 3.05
Kraj: Severna primorska

PrispevekObjavljeno: Sob Sep 18, 2010 9:35 pm    Naslov sporočila:   Odgovori s citatom

No tole vsekakor postaja zanimivo!

Bi pa potreboval malo pojasnila v tistem delu kode kjer se pošilja sporočilo shranjeno v EPROMu. Think
Dokaj jasno je kaj je potrebno narediti, kako pa je to narejeno pa ne ravno.

Silvo, pohvale! Nastaja lep "quickstart" za začetnike čez korake katere je sam precej zamudno prebroditi. Applause
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sob Sep 18, 2010 10:02 pm    Naslov sporočila:   Odgovori s citatom

Sporočilo ni v eepromu ampak v tabeli programskega pomnilnika. V naši aplikaciji v nadaljevanju tole ne bo uporabljeno. Procedurco sem napisal za test.

Directiva DB v danem primeru kreira tabelo 8 bitnih konstant v programski pomnilik. Kje se le ta nahaja sem programsko "označil" z labelo "Tekst1"

Tabelo potem s pomočjo instrukcije LPM (Load Program Memory) ter registrov ZL ter ZH čitam. V registre ZL ter ZH vpišem začetno lokacijo tabele. (Tekst1) po instrukciji LPM se v register r0 prepiše vrednost s te lokacije. To vrednost potem prepišem v naš delovni register, katerega uporablja procedura "SerialTx" nato povečam lokacijo branja za 1 (ZL +1) zanka se ponovi, dokler prebrano ni 0. 0 sem postavil na konec tabele.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 723
Aktiv.: 3.05
Kraj: Severna primorska

PrispevekObjavljeno: Sob Sep 18, 2010 10:34 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
Sporočilo ni v eepromu ampak v tabeli programskega pomnilnika.
Aha, sem prehitro bral v helpu, kjer sta omenjena oba.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3359
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Ned Sep 19, 2010 10:51 am    Naslov sporočila:   Odgovori s citatom

Pozdrav!
Konstruktiven predlog:
Verjetno bi bilo dobrodošlo nekaj besed o tem, kako narediti / izračunati zakasnilne zanke, da se dobi prava bodna hitrost.
Pozorno vas spremljam, čeprav nimam opreme za preverjanje napisanega, a pije vodo, kot temu rečemo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Sep 19, 2010 11:21 am    Naslov sporočila:   Odgovori s citatom

Za izračun zank sem si sam naredil programček. (če se prav spomnim, je pripet tudi nekje na forumu.) Sicer izračun ni zelo težak. Če pogledaš na "prvi dan" na zadnji strani datasheta, kjer so opisane instrukcije (poglavje 21) je v zadnjem stolpcu napisano koliko ciklov traje instrukcija. En cikel izračunaš z 1/frekvenca.


Koda:
Nzanka:
   ldi tmp,3      ;1
ZN:
   dec tmp         ;1
   brne ZN         ;2 /1
   ret            ;4


Primer:

Zraven sem napisal koliko ciklov traja instrukcija.

Torej 1+(2*3)+2+4= 13 ciklov


Pri Frekvenci 9.6Mhz je to 1/9.6 * 13= 1,35 mi S

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3359
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Ned Sep 19, 2010 11:51 am    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
Če pogledaš na "prvi dan" na zadnji strani datasheta, kjer so opisane instrukcije (poglavje 21) je v zadnjem stolpcu napisano koliko ciklov traje instrukcija. En cikel izračunaš z 1/frekvenca.


Aha, našel hvala. Upam, da je vsaj nabor instrukcij za vse avr-e bolj ali manj identičen.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Sep 19, 2010 11:57 am    Naslov sporočila:   Odgovori s citatom

Vilko,

Tukaj sem pripel moj generator kode za pavze.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3359
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Ned Sep 19, 2010 12:31 pm    Naslov sporočila:   Odgovori s citatom

Dobro narejen program, prijazen do programerja. Hvala.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Sep 19, 2010 12:48 pm    Naslov sporočila:   Odgovori s citatom

Naj omenim, da je vse procedure, ki bodo pisane pod označbo "Razne procedure" možno kasneje dati v lastno datoteko ali makroje ter jih uporabljati v drugih programih. Našega "glavnega" programa pa potem pratično ni. Pred vsem hočem povedati, da assembler ni tako zelo "trd" kot nekateri mislijo. Lahko je kar prijazen do uporabnika.

Serijsko komunikacijo v smer mikrokontroler -> PC smo naredili. Vzrok, da smo se najprej lotili serijske komunikacije je v tem, da bomo v nadaljnem programiranju imeli vez z mikrokontrolerjem. Načeloma sedaj lahko pošljemo stanje vsakega registra na PC. Preizkusili pa bomo lahko tudi naše nadaljne procedure. Najprej bomo spisali 1Wire protokol.

Nadaljevanje sledi v "5. dnevu..."

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.00
Kraj: Žalec

PrispevekObjavljeno: Čet Sep 23, 2010 8:03 pm    Naslov sporočila:   Odgovori s citatom

@Silvo, v prvi objavi si omenil in pokazal izgled vmesnika, ki bo v rabi v končni verziji. Ali bo opisana tudi sama izdelava vmesnika?
_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.94
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Čet Sep 23, 2010 8:18 pm    Naslov sporočila:   Odgovori s citatom

NUFAN je napisal/a:
@Silvo, v prvi objavi si omenil in pokazal izgled vmesnika, ki bo v rabi v končni verziji. Ali bo opisana tudi sama izdelava vmesnika?


Software bo dan v uporabo. Dopisal bom še nekaj stvari. Med drugim beleženje temperatur v datoteko, pa še morda graph. Vmesnik je napisan v Delphiju. Samo programiranje v Delphiju pa presega meje tega tečaja.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
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
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group