UART Bascom dotaz

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
apam
Příspěvky: 111
Registrován: 17 bře 2007, 00:00

UART Bascom dotaz

#1 Příspěvek od apam »

Dobrý den, potřeboval bych poradit, kdy při seriové komunikaci podle této konfigurace program odskočí na Serial0CharMatch:

Kód: Vybrat vše

Config Serialin = Buffered , Size = 40 , Bytematch = 35
Config Input = Crlf , Echo = Crlf
Echo Off

je to hned při přijetí volacího znaku # nebo az po prijeti # na zacatku stringu a jeho ukonceni CRLF? Co se stane když se přeplni buffer.
V programu je oblast, ve které musím vypínat přerušení na dobu 150 až 380ms. Celková smyčka je pak kolem 300-500ms. Co se stane s obsahem který dorazí zrovna v tuto dobu?
Data mi chodí, ale někdy jsou neúplná.
Děkuji za odpověď
Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 00:00

#2 Příspěvek od AB1 »

1. Program skočí na Serial0charmatch hned jak znak dorazí na uart.
2. Buffered serialin používá přerušení RX. Po dobu jeho vypnutí jsou přijaté znaky ztracené.

PS
V programu je oblast, ve které musím vypínat přerušení na dobu 150 až 380ms. Celková smyčka je pak kolem 300-500ms.
Chtělo by to asi napsat program jinak.
Uživatelský avatar
apam
Příspěvky: 111
Registrován: 17 bře 2007, 00:00

#3 Příspěvek od apam »

Obávám se, že to asi nebude možne, je to oblast kde zrovna komunikuje pres 1wire (11 čidel DS18B20 ve 12b rozliseni) a I2C (RTC) a ty odskoky na serial0charmatch mu nedelají dobre :roll: Myslel jsem, že bych vyprázdnil buffer každou smyčkou. Ta je bohužel dost dlouhá a pres uart by mohlo najednou prijít víc bytů než je schopny pojmout do vyprazdneni. Stejne by to ale asi nepomohlo. Je nejaká možnost jak by to šlo pořešit?
Jo a pres uart komunikuje s minimálně jedním externím zařízením přes obousměrný RF modul od Hope... aby jste byli v obraze...

K té první části odpovědi.. to znamená, že když bude pod serial0charmatch: hned prikaz input nejaky_string tak se do toho stringu nakopirujou jen data která mezi tím stihla dorazit nebo čeká až na crlf na konci stringu tak jak je to v config input? je v pohodě hned za prikaz Input nejaky_ string napsat clear serialin? co presne udelá clear serialin?

děkuji za rady.
Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 00:00

#4 Příspěvek od AB1 »

to znamená, že když bude pod serial0charmatch: hned prikaz input nejaky_string tak se do toho stringu nakopirujou jen data která mezi tím stihla dorazit nebo čeká až na crlf na konci stringu tak jak je to v config input?
Příkaz Input string ukládá bajty do "string" dokud nepřijde crlf. Mazat serial buffer je zbytečné, je to kruhový buffer, který nemůže přetéct.

Otázka se teď už netýká konkrétně Bascomu, ale spíš problému jak přijímat z uart během komunikace 1wire, která zřejmě nesmí být přerušovaná.

Můžeme třeba zavést do uart nějaký "handshaking".
Např vysilač když má zprávu, vyšle '#'.
Pak čeká na povolení vysílat, třeba '$'.
Povolení mu pošleme až bude hlavní program volný.
(Může to být i mezi jednotlivými příkazy 1wire. To vše samozřejmě bez přerušení.)

Pro nějakou konkrétní radu známe málo podrobností.
Uživatelský avatar
apam
Příspěvky: 111
Registrován: 17 bře 2007, 00:00

#5 Příspěvek od apam »

jj tohle mne taky napadlo, zatim jsem nerealizoval. Pravdepodobne by to mohlo fungovat i s docela slušnou odezvou. Vyzkousim to nacpat mezi prikazy pro ty cidla. Díky za dobrou radu.
Uživatelský avatar
apam
Příspěvky: 111
Registrován: 17 bře 2007, 00:00

#6 Příspěvek od apam »

handshaking funguje. data stahuje jednou za smyčku. díky za radu
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“