|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
tonni Profesionalec
Pridružen/-a: Tor Jan 2004 9:27 Prispevkov: 108
|
Objavljeno: Pet Jul 25, 2008 11:49 am Naslov sporočila: avr in serijski port |
|
|
živjo
Počasi se prebijam skozi avr-je,imam pa težavo z serijskim portom.Pri 8052 mi je lepo delal z atmego8515 pa so težave.Rad bi,da podatki na serijskem portu sprožijo prekinitev in program skoči na rutino npr serrutina.Spodaj je primer nastavitve serijskega porta pa me zanima
če sem še kaj pozabil definirati.
Koda: |
$crystal = 11059200
$baud = 19200
Print ;
Enable Urxc
Enable Serial
On Urxc Serrutina
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Enable Interrupts
Do
-
-
Loop
End
'
Serrutina:
'Prebere podatke ser.porta
-
Return
|
upam,da ima kdo kakšno rešitev
lp |
|
Nazaj na vrh |
|
|
Jure Urednik
Pridružen/-a: Pon Jan 2004 12:51 Prispevkov: 2132 Kraj: Ljubljana
|
Objavljeno: Pet Jul 25, 2008 11:08 pm Naslov sporočila: |
|
|
Oj,
rajši podaj celotno rutino, ki ti ne dela. To, kar si napisal izgleda OK.
Lp
Jure |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Sob Jul 26, 2008 8:55 pm Naslov sporočila: tu |
|
|
Tudi jaz sem nov na avr bascomu, in često naletim na presenečenja.
Serijsko prekinitev pa sem uporabil na podoben način, kot pri bascomu 8051, seveda je prešla prekinitev za vsak bajt posebej. In mislim, da sem nekje slišal, da omogoča bascom avr tudi branje podatkov z input, kjer prebereš cel niz hkrati, ker je bascom avr sposoben spraviti podatke v medpomnilnik (Buffer).
Kot rečeno, z enim samim bajtom po prekinitvi mi je delalo tako kot pri 8051. _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
tonni Profesionalec
Pridružen/-a: Tor Jan 2004 9:27 Prispevkov: 108
|
Objavljeno: Pon Jul 28, 2008 6:40 am Naslov sporočila: |
|
|
živjo
Najprej hvala za odgovore.Pri meni je problem,da mi noče
izvesti serijske prekinitve.Pri 8051 mi dela,z avr-jem pa ne
in ne vem včem je štos.Vilko mi lahko pošlješ tvojo
varianto z avr-jem,da vidim,kje sem se uštel.
lp |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Tor Jul 29, 2008 6:04 pm Naslov sporočila: N |
|
|
Na pc-u mi je verjetno umrl krmilnik za enote, kajti ne dela mi disk d: in cd enota. kar nenadoma, konec, ni jih na seznamu enot...
PC bo šel na servis,
lahko surfam, ker imam sistem na disku c:
vse moje zadeve pa so bile na disku d: a si tudi z kopijo na cd-u ne morem nič pomagati.
Tako lahko samo malo klepetava... _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
tonni Profesionalec
Pridružen/-a: Tor Jan 2004 9:27 Prispevkov: 108
|
Objavljeno: Čet Jul 31, 2008 7:07 am Naslov sporočila: |
|
|
ok. če boš kaj imel napiši.
lp |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Ned Avg 03, 2008 10:55 am Naslov sporočila: Pozaboč |
|
|
Malo sem pozabil nate. Ali je koda še aktualna, oziroma ali si že sam rešil problem?
Oprosti! _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
tonni Profesionalec
Pridružen/-a: Tor Jan 2004 9:27 Prispevkov: 108
|
Objavljeno: Pon Avg 04, 2008 4:51 am Naslov sporočila: |
|
|
živjo
še je aktualna.Vesel bom kakšnega dobrega namiga.
lp |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pon Avg 04, 2008 4:54 pm Naslov sporočila: ja |
|
|
Celoten program ti bom poslal zasebno
Tukaj samo izvlečke, ki bi lahko bili poučni.
Komuniciral sem z GSM telefonom Siemens C35i z namenom sprejemanja in oddajanja SMS sporočil. Celoten članek je nekje na Svetu elektronike pod imenom 'Z SMS-i vodeni avtomat', ali nekaj takega.
Serijsko prekinitev definiram z
Koda: | On Urxc Si_rtn 'define serial receive ISR
Enable Urxc 'enable receive isr
|
Kadarkoli pride bajt na vhod rx se starta prekinitvena rutina, ki bajt sprejme in ga da na pravo mesto. Rutina bi lahko tudi ugotavljala, ali je sporočilo kompletno, in potem bi lahko postavil zastavico, (bit), ki bi glavnemu programu povedala, da je novo sporočilo prebrano, a nisem tako delal. Ker je GSM aparat vedno le odgovarjal na od programa poslane mu ukaze, sem enostavno po izdanem ukazu sekundo ali dve kasneje pogleda, kaj je v vhodnem področju, ki ga je napolnila prekinitvena rutina.
Koda: | Si_rtn: 'Serial interrupt: GSM
Bajt = Udr
------ obdelamo sprejeti bajt
Return
|
Ukaze pa nisem pisal na tx v prekinitveni tehniki, temveč sem kar v glavnem programu z ukazom Print poslal ukaz:
Koda: | ' File Poslji.bas
Poslji: 'Poslji: <------
Disable Urxc
Print Niz
Reg14 = I : Push R14
For I = 2 To 16
Y(i) = 0
Next
Pop r14 : I = Reg14
X = 2
Enable Urxc
Return
' --------------------------------------------------------- End Poslji |
_________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
tonni Profesionalec
Pridružen/-a: Tor Jan 2004 9:27 Prispevkov: 108
|
Objavljeno: Tor Avg 05, 2008 9:02 am Naslov sporočila: |
|
|
živjo
hvala za program.zanima me kaj pomeni " \par",ker jih je res veliko.Kolikor sem gledal imam sprejemno rutino ravno tako narejeno,moram si vzeti čas in še enkrat vse pregledati.
lp |
|
Nazaj na vrh |
|
|
tonni Profesionalec
Pridružen/-a: Tor Jan 2004 9:27 Prispevkov: 108
|
Objavljeno: Pon Avg 18, 2008 9:53 am Naslov sporočila: |
|
|
živjo
Sem že mislil,da sem rešil problem komunikacije,pa se je spet zalomilo.Prilagam print programa.
Koda: |
$crystal = 11059200
$baud = 19200
Print ;
Enable Urxc
Enable Serial
On Urxc Serrutina
Enable Interrupts
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Led_dela Alias Portd.3
Ddrd = &B0011_1100
Ddrb = &B0111_1100
Ddrc = &B0111_1111
Oddaja Alias Portd.2
Dim Tlrg As Bit
Dim Adr As Byte
Dim Y(4) As Byte
Dim Indeks As Byte
Dim Podatek(4) As Byte
Dim Podatekb(4) As Byte
Dim Vhod As Byte , S As Byte
Dim aa As String * 4
Dim bb As String * 6
Dim Cc As String * 2
Dim Celota As String * 33
Enable Interrupts
Indeks = 5
Enable Serial
'Reset Scon.1
Tlrg = 0
Oddaja = 0
Tlrg = 0
Adr = 1
aa = "12/"
bb = "456/"
Cc = "4/"
Celota = Aa + Bb + Cc
Do
'
If Tlrg = 1 Then
Tlrg = 0
Disable Serial
For S = 1 To 4
Podatekb(s) = Podatek(s)
Next
'
'če je naslov 1 in podatek 1 potem pošlji string
If Podatekb(2) = Adr And Podatekb(3) = 1 Then
Cls
Lcd "1 1"
Oddaja = 1 'čip 485 v oddajni režim
Print Celota 'Pošiljanje stringa
Oddaja = 0 'čip 485 v sprejemni režim
End If
'
' Ce je naslov 1 in podatek 2 samo izpiši na LCD
If Podatekb(2) = Adr And Podatekb(3) = 2 Then
Cls
Lcd "1 2"
End If
Enable Serial
End If
'
Locate 2 , 1
Lcd Usr.7
Locate 2 , 4
Lcd Ucr.7
Locate 2 , 6
Lcd Usr.6
Locate 2 , 8
Lcd Ucr.6
Locate 2 , 10
Lcd Tlrg
Waitms 50
Loop
End
'
Serrutina:
Disable Timer0
Vhod = Inkey()
'Scon.1 = 0
'kontrola ce je prvi byte 88 (X)
If Vhod = 88 And Indeks > 4 Then
'potem pobrisi stari telegram
For Indeks = 2 To 4
Y(indeks) = 0
Vhod = 0
Next
Indeks = 1
End If
'ce je indeks < 5 potem vpisi sprejeti znak
If Indeks <= 4 Then
Y(indeks) = Vhod
Incr Indeks
End If
'ce indeks je 5 in Etx (89) je konec telegrama
'in skopiraj v podatek
If Indeks = 5 And Y(4) = 89 Then
For S = 1 To 4
Podatek(s) = Y(s)
Next
' Scon.1 = 0
Tlrg = 1
Usr.6 = 0
End If
Enable Timer0
Return
|
Problem:V kolikor iz PC-ja pošljem ukaz naslov=1 in podatek=1 in se izvrši Print ukaz in ta print sproži ponovno serrutino Tlrg gre v 1 in ponovno se izvede Print ukaz in tako se zadeva vrti v nedogled ,dokler ne pošljem naslov=1 in podatek=2 ali pa izštekam kabel za Rs232 iz PC-ja.
Če ima kdo idejo in misli,da ve kaj je narobe naj mi prosim sporoči.
lp |
|
Nazaj na vrh |
|
|
tonni Profesionalec
Pridružen/-a: Tor Jan 2004 9:27 Prispevkov: 108
|
Objavljeno: Sre Avg 20, 2008 1:33 pm Naslov sporočila: |
|
|
živjo
nič odgovorov?
lp |
|
Nazaj na vrh |
|
|
Bojan Profesionalec
Pridružen/-a: Ned Mar 2004 22:24 Prispevkov: 70
|
Objavljeno: Pet Avg 22, 2008 8:21 pm Naslov sporočila: |
|
|
Živjo,
8051 serijski dela drugače kot AVR.
Tukaj je en del mojega program za neko stvar...
Koda: |
$crystal = 3686400
$regfile = "8535DEF.DAT"
$baud = 38400
Enable Interrupts
On Urxc Rec_isr 'define serial receive ISR
Enable Urxc 'enable receive isr
Dim Rxbuf As String * 20
Do
wait 1
cls
lcd rxbuf
loop
Rec_isr: 'Kaj je prislo po RS232
Rxbuf = Rxbuf + Chr(udr) 'string
Return
|
Res je da je to že precej staro ampak za razumevanje najbolje.
Ko nekaj pride po RS232 se sproži prekinitev. iz UDR registra daš podatek v string in jih lepiš skupaj.
Zdaj obstaja kar nekaj novih ukazov za lažje delo. Poglej AVR SAMPLES pod dirktorij SERIAL! |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pon Avg 25, 2008 2:28 pm Naslov sporočila: Hmm, |
|
|
Težko je kar iz lliste najti napako, ki je morda niti ni in je razlog za nedelovanje kje drugje.
Da se kar naprej vrača v rutino bi lahko bil razlog tudi pomanjkanje stack prostora. Daj spredaj v program
$hwstack = 128
$swstack = 64
$framesize = 64
in potem še enkrat probaj.
Daj malo napiši, kaj pričakuješ, ko bereš v prekinitveni rutini, kako zaporedje bajtov pričakuješ, oziroma bi moralo priti. _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
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 You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|