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

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

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
radar0101
Příspěvky: 20
Registrován: 15 čer 2010, 00:00

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

#1 Příspěvek 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
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#2 Příspěvek 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.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
radar0101
Příspěvky: 20
Registrován: 15 čer 2010, 00:00

#3 Příspěvek 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.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#4 Příspěvek 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
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#5 Příspěvek od Andrea »

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

Neprovokuj, v Bascomu nedělám, na to jsou tu jiní.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#6 Příspěvek od ZdenekHQ »

Ta zas má náladu.... 8O
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#7 Příspěvek od Andrea »

ZdenekHQ píše:Ta zas má náladu.... 8O

Zatím docela dobrou, když jsem tě ani nikam neposlala.
Uživatelský avatar
radar0101
Příspěvky: 20
Registrován: 15 čer 2010, 00:00

#8 Příspěvek od radar0101 »

no taaak neprovokujte se :)
aaa co to reseni v bascomu :D
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#9 Příspěvek 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áš...
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
radar0101
Příspěvky: 20
Registrován: 15 čer 2010, 00:00

#10 Příspěvek 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
Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 00:00
Kontaktovat uživatele:

#11 Příspěvek 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.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#12 Příspěvek od Andrea »

Nevím, jestli zrovna INKEY je ten pravý způsob čtení ze sériového portu, spíš bych sáhla po INPUTBIN.
Uživatelský avatar
radar0101
Příspěvky: 20
Registrován: 15 čer 2010, 00:00

#13 Příspěvek 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í
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#14 Příspěvek od Andrea »

A jak u toho INKEY rozlišíš, jestli vrácená 0 je přijatá 0 nebo že nic nepřišlo?
Uživatelský avatar
radar0101
Příspěvky: 20
Registrován: 15 čer 2010, 00:00

#15 Příspěvek 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
Odpovědět

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