Jak poslat data přes RS232 do PIC?

Postavil jsem informační panel a chtěl jsem data posílat přes RS232 do PIC. Komunikaci a vše v PIC vyřešeno, jen nevím, jakým programem posílat data. Zkoušel jsem program terminal, ten je super, ale bohůžel jsem nepřišel na to, jak poslat jen šíslo v DEC nebo HEX formátu. Text to posílá v pořádku, na HEX a DEC jsou tam macra, ale macra vemou asi jen 20 znaků a pak program píše, že je to moc.
Asi by pro bylo nejjednodušší posílat soubor, třeba *.TXT přímo na COM, ale nepřišel jsem na to, jak v programu COMu zdělit, že se nejdená o znak, ale o HEX nebo DEC číslo.
Nevíte někdo, jak v *.TXT souboru zdělit řadiči usart, že se jedná o číslo třeba v DEC??
V terminálu je DEC jako #001 a pošle číslo 1, HEX je $FF a pošle číslo 255, ale tohle přímo jako copy *.TXT COM1 nefunguje.

Řešením by mohl být vlastní program. Inspiraci můžeš najít ve zdrojácích k mýmu prográmku k aritmě: viewtopic.php?t=530&postdays=0&postorder=asc&start=165

Je to v Javě ale to určitě víš :wink:

Honza

Já používám tento terminál:
edisk.cz/stahnout-soubor/545 … 332KB.html

a posílám přes něj do PIC z txt souboru který vygeneruje program Eagle souřadnice pro cnc vrtačku. Znaky a čísla posílá jeden za druhým tak, jak jsou zapsána v txt souboru, nic nepředělává.

př.
X1234Y528

znaky posílá v pořadí: X, 1, 2, 3, 4, Y, 5, 2. 8 a v samotném PIC z toho udělám
X1234
Y528

:arrow_right: administrator: přiloženy externí soubory
Terminal_by Bray_v_1_9b.zip (321 KB)

To je sice hezký, ale ja Javu neumím :blush: :blush: :blush: :blush:

To jo, ale to nejde nějak udělat, aby to poslalo přímo číslo v DEC nebo HEX? A terminal mi píše, Macro string is too long!

Asi bude jednodušší předělat program jen na text a pak to udělat jako ty, brát čísla jako text a pak si to poskládat správně v programu.

Taky jsem na to nepřišel jak to poslat jako číslo najednou. :smiley:

Takže mě čeká úprava programu :blush: :blush: To mám teda radost.

Ale teď teda jak programu zdělit, zda se jedná o text nebo o instrukci. Udělal jsem to tak, že 0 - 0x19 jsou instrukce, 0x20 - mezera až po 0xFE jsou znaky. 0xFF je konec přenosu s PC. Ta první $01 je start přenosu z PC do PIC. když dám $02, nastavuju čas a datum přímo z PC, na to mi stačí macro.

Takhle to posílám přes hercules a jede to,ale jak to pošlu jako text, to mě teď nenapadá, protože číslo jako takové může být součást textu. $01#007#010#008#026#010#009#023#005#000#007#004#008Dnes je #002 #001. #004 #005, venku je#006, dnes máš #010, zítra máš #011. #007#010#009#026#005#007#005#008 A nic #013mě nebaví :-(#012!! $FF

JAK NA TO??? Snad mě něco napadne :slight_smile:

Co je ten hercules ?

Petr: Hercules je něco jako terminal, jen pro víc rozhraní ale zas jednodušší. Je to výtvor HWgroup (hw.cz).
Honza: kdybys to nedořešil do večera, můžu ti napsat prográmek, kterej ti vytvoří ze zadaných hex čísel textový soubor a ten budeš moct poslat terminálem. Pokud bude ovšem mít PC komunikovat s picem častěji, měl bys mít program na míru :wink:.

To nevyřeším, protože mám odpolední :smiley: :smiley:

Když už budeš psát, nebylo by jednodušší napsat něco, jako je hercules, konkrétně ty macra, ale aby to nebylo omezený délkou macra??? :open_mouth: Něco jednoduchého, jen řádek na text, samo s podporou # případně $ a jen tlačítko odeslat.

To by šlo :slight_smile: Do školy to dneska stejně už včas nestihnu, tak to zkusím smotnout…

Nemusíš spěchat :slight_smile: Času je dost. Už to řeším přes hercules cca měsíc, tak nějakej den už se ztratí :slight_smile:

A pokud se to povede, budu konečně pohodlně posílat data i do něčeho jiného :blush: :blush: :open_mouth:

piityy: pak ten prográmek dej sem, mě by to taky zajímalo. Děkuji… :slight_smile:

Trvalo to trochu dýl(musel jsem přeportovat základ z programu pro PDA protože jsem línej :slight_smile:) ale snad se podařilo. Hex číslo je dvoumístné a začíná klecí “#” (dobře se mi píše :slight_smile: ctrl+alt+x). Komunikace je 8N1. Screen je vytvořen když tam napíšeš nesmysl. Byl trochu problém s nulou (to je totiž za normálních okolností konec řetězce), ale i ta už projde. Zobrazuje se jako “\0”.
Psané je to ve VisualStudiu2008Pro, C#. Pro běh to potřebuje .NET 2.0 (na většině strojů s Win už je, případně ke stažení zdarma u MS microsoft.com/express/Downloads/#2010-All). Exe je ve složce projektu v “bin/release”.
CS_W32_terminal_hex.zip (87.5 KB)
terminal hex.gif

Špatná zpráva

Když pošlu:

#02#00#1C#16#04#05#0A#14#09

Tak tím nastavím hodiny

Ale tohle, což je text KUK +13 mezer

#01KUK             #FF

Už neveme :frowning:

A když už jsem u toho, nešlo by, aby to bralo # jako DEC, #000 - #255 a $ jako HEX, $00 - $FF ??

Pokud by pomohlo, že po každém přijatém bitu poslal PIC něco jako ACK, tak to není problém.

Zas tak špatná nebude. Ještě se mi snad nepovedlo napsat komunikační program bez protějšku napoprvý :smiley: Zítra odpoledne na to mrknu, to dec a hex nebude problém. Ty mezery mi nejsou jasný proč nejdou, ale debuger určitě prozradí, kde je háček.

Není problém v mezerách, ale v tom, že PIC nereaguje ani na tu startovací #01. Tím 0x01 ho přepnu na programovací režim a pak jen čeká na přisun dat, které ukládá do RAM a testuje 0xFF, to znamená, že je konec přísunu dat, uloží do FLASH a zresetuje se. Zkoušel jsem data číst a hned je ukládat do FLASH, ale trvá to dost dlouho a ztrácely se mi nějaké znaky.

Zas je fakt, že mezi 0x01 a první reakcí na přísun dat uplyne 2.5ms, ale když to jde přes terminal a hercules, tak to půjde i teď. Máš mou plnou důvěru :smiley: :smiley: :smiley: :smiley: :open_mouth: :open_mouth:

Jen pro upřesnění, mám zapojené jen RX a TX.

To je divné. Nevidím nic, proč by to nemělo s těmi mezerami jít, navíc když jiná data projdou. V poli k odeslání jsou data správně(1, KUK, 13 mezer, 255). Metoda serial.Write() má první argument pole, druhý počáteční index a třetí je počet prvků. Data jsou v poli od 0 (druhý parametr), do 17 (18 položek - třetí parametr).
Prostě nevím. Budu si zítra muset připojit loop-kabel a uvidí se. Seš si jist, že to procesor správně zpracuje? :slight_smile:
HW řízení toku nevyužívám, odpověď od mcu potřeba není, jedině že by nestíhal (abych posílal data pomaleji).
terminal hex_debug.gif

Tak když to jde přes terminal a přes hercules, tak si myslím, že v procesoru chyba není. Šlo by dodělat to ACK od procesoru? Posílal jsem si potvrzovací znak při ladění a šlo mi to. V terminálu jsem viděl, jak procesor data vysílá, akorát, že hercules neumí počkat.

EDIT: Tak něco to do procesoru posílá, reaguje na tu první 0x01. Nahodou jsem to zjistil teď, že když klikam na SEND, tak mi to přepisuje data v RAM. Jdu hledat chybu, proč nereaguje na 0xFF.

Nemůže být problém v rychlosti? On přeci jenom PIC namá “přesně” 9600Bd

Tak jsem dodělal dekadické hodnoty dle přání ještě dnes :slight_smile: (nahrazen původní zip na minulé straně).
S tou rychlostí těžko říct, obecně se bere komunikace na uartu jako vpořádku když je rozdíl rychlostí pod 2%. Když to ale jede v jiných programech, není důvod aby to nejelo i tady.

Můžeš ještě zkusit napsat do procesoru loopback, program by to měl přijmout zpět. Jen není záruka v jakém pořadí (díky způsobu vypisování, kdyby se novější události vypisovaly dolů, tak by to bylo vždy vpořádku, lze doupravit). Jen tak mimochodem - s loopbackem v mcu nemá to zaškrtávací políčko nic společnýho, to je k tomu aby se jako loopback choval ten program - vracel to zpět na uart.

Dobré je přidávat na konec dat nějakou formu kontrolního slova a teprve když je rámec vpořádku, tak ho zpracovat.

Zatím DÍK. # a $ funguje dobře, já jdu hledat chybu v programu, proč to nereaguje na poslední 0xFF :open_mouth: :open_mouth:
Ale je mi divný, proč to s herculesem a terminalem jde, ale s tvojím programem NEEEEE.