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 

avr in serijski port
Pojdi na stran 1, 2  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
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Pet Jul 25, 2008 11:49 am    Naslov sporočila: avr in serijski port Odgovori s citatom

ž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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Jure
Urednik


Pridružen/-a: Pon Jan 2004 12:51
Prispevkov: 2132
Kraj: Ljubljana

PrispevekObjavljeno: Pet Jul 25, 2008 11:08 pm    Naslov sporočila: Odgovori s citatom

Oj,

rajši podaj celotno rutino, ki ti ne dela. To, kar si napisal izgleda OK.

Lp
Jure
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Sob Jul 26, 2008 8:55 pm    Naslov sporočila: tu Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Pon Jul 28, 2008 6:40 am    Naslov sporočila: Odgovori s citatom

ž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
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Pon Jul 28, 2008 12:51 pm    Naslov sporočila: Disk D: mi je izginil! Odgovori s citatom

Zaradi

http://www.elektronik.si/phpBB2/viewtopic.php?p=119453#119453

boš moral malo počakati.

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jul 29, 2008 6:04 pm    Naslov sporočila: N Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Čet Jul 31, 2008 7:07 am    Naslov sporočila: Odgovori s citatom

ok. če boš kaj imel napiši.

lp
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Ned Avg 03, 2008 10:55 am    Naslov sporočila: Pozaboč Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Pon Avg 04, 2008 4:51 am    Naslov sporočila: Odgovori s citatom

živjo

še je aktualna.Vesel bom kakšnega dobrega namiga.

lp
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Pon Avg 04, 2008 4:54 pm    Naslov sporočila: ja Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Tor Avg 05, 2008 9:02 am    Naslov sporočila: Odgovori s citatom

ž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
Poglej uporabnikov profil Pošlji zasebno sporočilo
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Pon Avg 18, 2008 9:53 am    Naslov sporočila: Odgovori s citatom

živjo

Sem že mislil,da sem rešil problem komunikacije,pa se je spet zalomilo.Prilagam print programa. Sad
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 Evil or Very Mad ,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.
Smile
lp
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
tonni
Profesionalec


Pridružen/-a: Tor Jan 2004 9:27
Prispevkov: 108

PrispevekObjavljeno: Sre Avg 20, 2008 1:33 pm    Naslov sporočila: Odgovori s citatom

živjo

nič odgovorov? Confused

lp
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Bojan
Profesionalec


Pridružen/-a: Ned Mar 2004 22:24
Prispevkov: 70

PrispevekObjavljeno: Pet Avg 22, 2008 8:21 pm    Naslov sporočila: Odgovori s citatom

Ž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
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Pon Avg 25, 2008 2:28 pm    Naslov sporočila: Hmm, Odgovori s citatom

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
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 1, 2  Naslednja
Stran 1 od 2

 
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