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



Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.64 Kraj: Žižki - Prekmurje
|
Objavljeno: Čet Dec 06, 2012 9:05 pm Naslov sporočila: Bascom in komunikacija |
|
|
Torej delam nekaj z komunkacijami na ATmega128. Uporabljam UART2.
Pošiljanje dela brez problema, težave imam z prijemom na tem kanalu.
Za prvi UART ima takole:
Koda: |
On Urxc Rxd_sr
Enable Urxc
Enable Interrupts
|
Kako bi to moralo izgledati ua UART2 ?
Hvala
|
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Čet Dec 06, 2012 10:42 pm Naslov sporočila: |
|
|
Urxc1 bo pravi register, ce se ne motim za sekundarni uart...
Lp, g
_________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
 |
besoft Član



Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.64 Kraj: Žižki - Prekmurje
|
Objavljeno: Pet Dec 07, 2012 9:36 pm Naslov sporočila: |
|
|
Ja, je prav.
Hvala
In še eno vprašanje. imam za branje stringa uporabljen tale del kode:
Koda: |
Const Maxlen = 6
Dim X As Byte
Dim Xx(maxlen) As Byte
Dim S As String * Maxlen At Xx(1) Overlay
Dim Prebrano As Bit
.
.
.
Rxd_sr:
Xx(x) = Udr
If Xx(x) = &H0D Then
Xx(x) = 0
End If
If Xx(x) = &H0A Then
Xx(x) = 0
Set Prebrano
X = 0
End If
Incr X
If X > Maxlen Then
Xx(x) = 0
X = 1
Set Prebrano
End If
|
Koda deluje brez težav vendar z omejitvijo. String mora biti fiksne dolžine.
Kaj bi moral spremeniti , da bi lahko prebral naključno dolžino stirnga. Seveda zaključenega z CHR13, lahko pa z kakšnim drugim znakom.
Nekaj rešitev sem že našel, vendar nobena ni zanesljiva..vedno se je kaj izgubilo..
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sob Dec 08, 2012 9:34 am Naslov sporočila: |
|
|
Ups, ta del kode mi je pa znan.
Vendarl bi moral delovati za katerikoli dolžino sporočila, ki je krajše od Maxlen. Tvoj Maxlen je 6 kar se mi zdi malo.
|
|
Nazaj na vrh |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.68 Kraj: KOPER
|
Objavljeno: Sob Dec 08, 2012 9:52 am Naslov sporočila: |
|
|
Koda zanesljivo dela:
priprava kode za TX
Koda: |
tx_podatek(1) = &H02 ' 2 = header
tx_podatek(2) = &H00 ' 0 = header
tx_podatek(3) = &H02 ' 2 = header
tx_podatek(4) = 10 ' DOLŽINA
tx_podatek(5) = 1'PODATEK '
tx_podatek(6) = 5'PODATEK
tx_podatek(7) = 2'PODATEK
tx_podatek(8) = 255'PODATEK
tx_podatek(9) = &H0D
tx_podatek(10) = &H0A
|
sprejem kode v ISR:
Koda: |
'****************** SERIAL INTERRUPT SERVICE RUTINE 2**************************
Rec_isr:
B = Inkey()
If Sinhro = 0 And B = 2 Then 'LOVI PRVI HEADER
Sinhro = 1
St_rx = 1
Rs_rxbuffer(st_rx) = B
Goto Ven
End If
If Sinhro = 1 And B = 0 Then 'LOVI DRUGI HEADER
Sinhro = 2
St_rx = 2
Rs_rxbuffer(st_rx) = B
Goto Ven
End If
If Sinhro = 2 And B = 2 Then 'LOVI TRETJI HEADER
Sinhro = 3
St_rx = 3
Rs_rxbuffer(st_rx) = B
Goto Ven
End If
If Sinhro > 2 Then ' ČE SO HEADERJI 1,2,3 V REDU ZAPISUJ PREJETE PODATKE
Incr St_rx ' V SPREJEMNI BUFFER
Rs_rxbuffer(st_rx) = B
End If
If St_rx = Rs_rxbuffer(4) Then 'prebrano je tx_podatek(4) = 10 znakov
Sinhro = 0
St_rx = 0
Set Rsrx_sek_f 'postavimo zastavico, da so sprejeti podatki
End If 'v LOOPu obdelamo sprejete podatke
Ven:
Return
|
_________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sob Dec 08, 2012 9:57 am Naslov sporočila: |
|
|
Ja, to je druga varianta sprejemanja sporočila, kjer gre za sporočila, ki niso tipa string.
Pri sporočilih tipa string je bolj enostavno, ker so poslani bajti samo veljavne ascii kombinacije.
|
|
Nazaj na vrh |
|
 |
besoft Član



Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.64 Kraj: Žižki - Prekmurje
|
Objavljeno: Sob Dec 08, 2012 10:06 am Naslov sporočila: |
|
|
vilko je napisal/a: |
Ups, ta del kode mi je pa znan.
Vendarl bi moral delovati za katerikoli dolžino sporočila, ki je krajše od Maxlen. Tvoj Maxlen je 6 kar se mi zdi malo. |
ja vilko
dela zelo lepo. Sprejema pa samo string, ki je dolžine maxlen.
V tem primeru je bil maxlen= 6 čisto dovolj. zdaj se pa pogovaram z sql serverjem..pa je 6 znakom aposlutno premalo..
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sob Dec 08, 2012 10:21 am Naslov sporočila: |
|
|
Potem pač maxlen povečaš na največjo dolžino niza, ki jo nameravaš brati.
Ali pa praviš, da, če je dolžina manjša od maxlen, ne dela?
Potem je morda caka v tem, da računalnik, ki pošilja, (morda linux) ne zaključi niza za &H0d &H0a
Ta rutina zazna koneck ko najde &H0A
Poizkusi set prebrano prestaviti v tisti del kode, ki se aktivira na &H0D, en if višje
|
|
Nazaj na vrh |
|
 |
besoft Član



Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.64 Kraj: Žižki - Prekmurje
|
Objavljeno: Sob Dec 08, 2012 11:13 am Naslov sporočila: |
|
|
vilko, deluje z stringom poljubne dolžine, če se string zaključi z CHR(13) in CHR(10)
tako, da je dejansko zadeva zelo uporabna.
Hvala!!
mam še eno vpašanje, zgubil dva dni z težavo..če sem vključil v aplikacijo grafični LCD, komunikacija ni delovala.
Ugotovil sem, da je težava v
Koda: |
'$hwstack = 100
'$swstack = 100
'$framesize = 100
|
So ti podatki pomembni v programu..oziroma potrebni ?
Aja uporabljam ATmega128 .
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sob Dec 08, 2012 11:19 am Naslov sporočila: |
|
|
Ti podatki so potrebni, kadar kličeš podprograme-funkcije s parametri.
Zagotavljajo prostor, kamor spravlja bascom parametre pri klicu vsakega podprograma, funkcije. Če en podprogram-funkcija, kliče drugega, potem je tega prostora potrebno več.
tako, kot si napisal, bi moralo zadostovati.
Na grafični LCD se ne spoznam, nikoli uporabil, si pa predstavljam, da so to funkcije, ki jih kličeš v svojem programu.
|
|
Nazaj na vrh |
|
 |
besoft Član



Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.64 Kraj: Žižki - Prekmurje
|
Objavljeno: Sob Dec 08, 2012 11:33 am Naslov sporočila: |
|
|
nevem, kaj je točno narobe, če jih odstranim, program deluje normalno..če jih dodam..pa enostavno komunikacija na UART2 ne deluje.
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sob Dec 08, 2012 11:51 am Naslov sporočila: |
|
|
Težko rečem, ali je možno, da si na knap z RAM-omo?
Če jih odstraniš veljajo nastavitve iz Options > Compiler > chip
|
|
Nazaj na vrh |
|
 |
besoft Član



Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.64 Kraj: Žižki - Prekmurje
|
Objavljeno: Sob Dec 08, 2012 12:02 pm Naslov sporočila: |
|
|
Neverjamem, da sem na knap z ram-om, ker dejansko na displayu prikažem le prejeti string..v programu je pa še le interupt za prijem stirnga.
cca 40 vrstic..
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sob Dec 08, 2012 12:38 pm Naslov sporočila: |
|
|
In kakšne nastavitve najdeš če greš na
Options > Compiler > chip
|
|
Nazaj na vrh |
|
 |
besoft Član



Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.64 Kraj: Žižki - Prekmurje
|
Objavljeno: Sob Dec 08, 2012 12:49 pm Naslov sporočila: |
|
|
Nastavljeno tako :
Opis: |
|
Velikost datoteke: |
30.57 KB |
Pogledana: |
4 krat |

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