Stránka 1 z 2

Sériová linka - příjem dat BASCOM

Napsal: 24 čer 2010, 11:50
od radar0101
Zdravim vas.
potreboval bych pomoc s prijmutim dat do mega8. Takze po seriové lince chodej takto data...255 0 0.....ta 255 je synchronizacní dalsi byte je pořadi(v mem pripade serva) 0 - 7 a dalsi byte je nastaveni toho serva...Stacilo by nejaky napoknuti jak se to v tomhle připade řeší..
Moc dik

Napsal: 24 čer 2010, 12:56
od ZdenekHQ
Jestli se v datech nevyskytuje hodnota 255 či 0, stačí ti ukládat do paměti posledních 7 (až 10) přijmutých byte a "chytat" se na 255 či 0 a pak zpracovat zbytek.

Pokud data obsahují i 255 a 0, nepůjde to, pokud nebude možnost se "chytit" třeba na pomlku mezi daty.

Obecně bez crc to nechodí dobře a je potřeba ošetřit hromadu věcí, jako např. ztráta jednoho byte.

Napsal: 24 čer 2010, 14:29
od radar0101
jj chytnout bych se mel tej 255 protoze v ve tretim byte jdu jen do 254....Ale potreboval bych vedet jak to osetrit v bascomu..proste jak to v nem osefovat abych dostal promenou treba servo0 = a ta hodnota tretiho byte..a dalsi promeny servo1 = ...
a to osetreni těch chyb bych co by mohli nastat by se kdystak doresili pozdeji
Zatíím dík.

Napsal: 24 čer 2010, 18:50
od ZdenekHQ
Aha, takže jsou to jen 3 byte: 255 cislo_serva stav_serva.

V Bascomu to neumím, já používám asm, ale stačí čekat na přijetí znaku 255 a další dva po příjmu uložit jako číslo a stav. Pokud během toho přijde znovu 255, je to chyba.

Zbytek je věc přerušení od příjmu znaku atd., Bascom neovládám, ale tam to bude triviální.

Musíš počkat, až se probudí Andrea :D

Napsal: 24 čer 2010, 19:25
od Andrea
ZdenekHQ píše:Musíš počkat, až se probudí Andrea :D

Neprovokuj, v Bascomu nedělám, na to jsou tu jiní.

Napsal: 24 čer 2010, 19:44
od ZdenekHQ
Ta zas má náladu.... 8O

Napsal: 24 čer 2010, 19:54
od Andrea
ZdenekHQ píše:Ta zas má náladu.... 8O

Zatím docela dobrou, když jsem tě ani nikam neposlala.

Napsal: 25 čer 2010, 09:18
od radar0101
no taaak neprovokujte se :)
aaa co to reseni v bascomu :D

Napsal: 25 čer 2010, 10:43
od ZdenekHQ
Bývá dobrý zvykem napřed napsat program a pak spekulovat nad chybama. Jestli čekáš, že to někdo napíše za Tebe, asi se načekáš...

Napsal: 25 čer 2010, 12:53
od radar0101
Dobrá tak ja zkusim neco napsat. Uz jsem jich vyzkoušel mrte ale zatim nic nefungovalo tenhle co jsem napsal jsem jeste nezkoušel. Proste bych potřeboval trochu poradit se ctenim tech bytů. Moc děkuju

Kód: Vybrat vše

dim A as byte
dim B(2) as byte

A = inkey()

IF A = 255 then

B = inkey()

select case B(1)
case 0 : servo0 = B(2)
case 1 : servo1 = B(2)
end select

end if

Napsal: 25 čer 2010, 15:21
od piitr
Jestli to nejde, zkusil bych místo toho B=inkey() napsat:

Kód: Vybrat vše

B(1)=inkey()
B(2)=inkey()
Další věc je, že by se to celé mělo opakovat pořád dokola.

Napsal: 25 čer 2010, 15:35
od Andrea
Nevím, jestli zrovna INKEY je ten pravý způsob čtení ze sériového portu, spíš bych sáhla po INPUTBIN.

Napsal: 25 čer 2010, 18:45
od radar0101
tak jako neco to dela ale kdys si necham na diplej vypsat B(1) dvojku a trojku tak tam jsou kraviny. Noo inputbin jsem zkousel ale ten je nejakej divnej ten asi ceka na ty data...A pak stejnak ve vysledku jsou ty hodnoty co prijmu stejny jako u inkey;)...Dekuji za další možná řešení

Napsal: 25 čer 2010, 18:50
od Andrea
A jak u toho INKEY rozlišíš, jestli vrácená 0 je přijatá 0 nebo že nic nepřišlo?

Napsal: 25 čer 2010, 18:58
od radar0101
jj ted jsem to chtel psat...jsem se znova na to kouknul co prijmam inputbinem a je to lepsi noo...pac u inkej jsou mezi datama opravdu 0...dobre tak budu pracovat s inputbin. Ale jak to rozlisit ty prijaty data.
Moc dik