Stránka 1 z 1

UART Bascom dotaz

Napsal: 07 čer 2013, 19:21
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ěď

Napsal: 08 čer 2013, 06:42
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.

Napsal: 09 čer 2013, 18:00
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.

Napsal: 09 čer 2013, 20:12
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í.

Napsal: 09 čer 2013, 20:43
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.

Napsal: 12 čer 2013, 20:55
od apam
handshaking funguje. data stahuje jednou za smyčku. díky za radu