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

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Pon Jul 18, 2011 10:40 am Naslov sporočila: UART |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
s56al Član

Pridružen-a: Pon 19 Sep 2005 12:03 Prispevkov: 788 Aktiv.: 3.32 Kraj: JN66SI & JN76TM
|
Objavljeno: Pon Jul 18, 2011 10:51 am Naslov sporočila: |
|
|
Načinov je veliko, eden preprostejših je, da narediš pri pošiljanju med sporočili dovolj dolgo pavzo. Če sprejemnik v določenem času ne sprejme nobenega znaka, privzame, da je prvi naslednji sprejeti znak začetek novega sporočila. Pri tem sistemu moraš zagotoviti, da bo čas med oddajo dveh zaporednih znakov istega sporočila vedno krajši od nekega v naprej določenega časa ter čas med koncem oddaje predhodnega ter pričetkom oddaje naslednjega sporočila vedno daljši od min. zakasnitve.
Druga preprosta možnost je, da začetek sporočila označiš z zastavico, npr. <CTRL-A> (= hex 0x01), konec sporočila pa recimo z zastavico <CTRL-B> (= hex 0x02) ali pa morda CR (in LF). Sistem deluje, če lahko zagotoviš, da sama vsebina sporočila nobenega od teh znakov ne vsebuje v nobenem primeru (npr. da je vsebina sporočila vedno sestavljena le iz ASCII kodiranih alfanumeričnih in posebnih znakov).
V vsakem primeru pravilen prenos vsebine spročila nadzoruj vsaj z neko preprosto kontrolno vsoto če že ne s 16 bitnim CRC. |
|
Nazaj na vrh |
|
 |
GopherB Član


Pridružen-a: Čet 10 Mar 2011 11:44 Prispevkov: 90 Aktiv.: 0.52 Kraj: Lj
|
Objavljeno: Pon Jul 18, 2011 11:13 am Naslov sporočila: |
|
|
lahko uporabis end-parsing (ali kako se ze rece) - ascii za enter (new line feed), ce bos ti sam pisal tekst.
Saj lahko posiljas paketke podatkov, ki so vecji od 18byte, pa jih uporabis samo 18. |
|
Nazaj na vrh |
|
 |
žrepko Član

Pridružen-a: Tor 23 Mar 2010 20:12 Prispevkov: 700 Aktiv.: 3.76 Kraj: Ptuj-Maribor
|
Objavljeno: Tor Jan 24, 2012 10:25 am Naslov sporočila: |
|
|
Tudi jaz se počasi iz hardwareskih vod spuščam bolj v software.
Torej iz ene naprave dobivam po UARTu kode kot na primer 3E029D9ED0.
Kako torej to kodo sprejeti na uC in jo obdelati naprej (npr. pošljem po CAN naprej)? _________________ Štromar ima včasih prav, elektrika pa vedno! Profesor Seliger |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.34 Kraj: Lovrenc na P.
|
Objavljeno: Tor Jan 24, 2012 10:47 am Naslov sporočila: |
|
|
žrepko je napisal/a: |
Tudi jaz se počasi iz hardwareskih vod spuščam bolj v software.
Torej iz ene naprave dobivam po UARTu kode kot na primer 3E029D9ED0.
Kako torej to kodo sprejeti na uC in jo obdelati naprej (npr. pošljem po CAN naprej)? |
getChar() ?
Poišči knjižnice za tvoj uC za uart in uporabi funkcije za inicializacijo, branje, pisanje... |
|
Nazaj na vrh |
|
 |
žrepko Član

Pridružen-a: Tor 23 Mar 2010 20:12 Prispevkov: 700 Aktiv.: 3.76 Kraj: Ptuj-Maribor
|
Objavljeno: Tor Jan 24, 2012 11:13 am Naslov sporočila: |
|
|
A bo tako preprosto?
Saj vem,..ni tako preprosto. Se mantram usposobiti UART na BR 9600. Na 115200 mi deluje dobro, naprava mi pa pošilja na 9600. _________________ Štromar ima včasih prav, elektrika pa vedno! Profesor Seliger |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.34 Kraj: Lovrenc na P.
|
Objavljeno: Tor Jan 24, 2012 11:21 am Naslov sporočila: |
|
|
Če imaš knjižnice za uart za tvoj procesor je nekje kakšen def, kjer nastaviš baudrate oz. pri klicanju inicializacijske funkcije kot parameter. Če ne pa datasheet in ročno postaviti vrednost v register za baudrate. |
|
Nazaj na vrh |
|
 |
žrepko Član

Pridružen-a: Tor 23 Mar 2010 20:12 Prispevkov: 700 Aktiv.: 3.76 Kraj: Ptuj-Maribor
|
Objavljeno: Tor Jan 24, 2012 12:46 pm Naslov sporočila: |
|
|
Knjižnica ni napisana v tej smeri.
No, pa pojdimo po izračunih:
Koda: |
DLest=PCLK/(16xBR)
=12000000/(16x9600)
=78,125
nato odšteješ FRest ki je najbližje 1,125. S tem je DivAddVal 1 in MulVal8
ostane mi 77, ki je v hex napisan kot 0x4D.
tako mi pride v kodi:
pUart->FDR = 0x81; /* FR 1,125, DIVADDVAL = 1, MULVAL = 8 */
pUart->DLL = 0x4D; /* 9600 Baud Rate @ 12.0 MHZ PCLK */
pUart->DLM = 0; /* High divisor latch = 0 */
pUart->LCR = 0x03; /* DLAB = 0 */
|
zakaj mi ta koda noče delovati? _________________ Štromar ima včasih prav, elektrika pa vedno! Profesor Seliger |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.34 Kraj: Lovrenc na P.
|
Objavljeno: Tor Jan 24, 2012 1:14 pm Naslov sporočila: |
|
|
PCLK imaš pravilno nastavljen? Oz. vzameš pravilno vrednost pri računanju? PCLK ni nujno enak Cclk. |
|
Nazaj na vrh |
|
 |
žrepko Član

Pridružen-a: Tor 23 Mar 2010 20:12 Prispevkov: 700 Aktiv.: 3.76 Kraj: Ptuj-Maribor
|
Objavljeno: Tor Jan 24, 2012 1:15 pm Naslov sporočila: |
|
|
Imam, saj mi je pri 115200BR dobro delalo, če sem vzel 12MHz.
EDIT:
Bila je res napaka pri računanju. Res je bila frekvenca 25MHz.
Hvala za pomoč. _________________ Štromar ima včasih prav, elektrika pa vedno! Profesor Seliger |
|
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: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|