 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Sep 18, 2010 1:05 pm Naslov sporočila: Mala šola AVR - 4.dan |
|
|
"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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Sep 18, 2010 1:56 pm Naslov sporočila: |
|
|
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.
Opis: |
Sestavljeno na testni plošči |
|
Velikost datoteke: |
700.92 KB |
Pogledana: |
12 krat |

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

|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Sep 18, 2010 3:52 pm Naslov sporočila: |
|
|
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.
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 |

|
Opis: |
|
Velikost datoteke: |
417.77 KB |
Pogledana: |
44 krat |

|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
eddie Član

Pridružen-a: Sre 10 Dec 2003 21:02 Prispevkov: 723 Aktiv.: 3.05 Kraj: Severna primorska
|
Objavljeno: Sob Sep 18, 2010 9:35 pm Naslov sporočila: |
|
|
No tole vsekakor postaja zanimivo!
Bi pa potreboval malo pojasnila v tistem delu kode kjer se pošilja sporočilo shranjeno v EPROMu.
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.
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Sep 18, 2010 10:02 pm Naslov sporočila: |
|
|
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 |
|
 |
eddie Član

Pridružen-a: Sre 10 Dec 2003 21:02 Prispevkov: 723 Aktiv.: 3.05 Kraj: Severna primorska
|
Objavljeno: Sob Sep 18, 2010 10:34 pm Naslov sporočila: |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Ned Sep 19, 2010 10:51 am Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Sep 19, 2010 11:21 am Naslov sporočila: |
|
|
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 S
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Ned Sep 19, 2010 11:51 am Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Sep 19, 2010 11:57 am Naslov sporočila: |
|
|
Vilko,
Tukaj sem pripel moj generator kode za pavze.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Ned Sep 19, 2010 12:31 pm Naslov sporočila: |
|
|
Dobro narejen program, prijazen do programerja. Hvala.
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Sep 19, 2010 12:48 pm Naslov sporočila: |
|
|
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 |
|
 |
NUFAN Član


Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.00 Kraj: Žalec
|
Objavljeno: Čet Sep 23, 2010 8:03 pm Naslov sporočila: |
|
|
@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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Sep 23, 2010 8:18 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|