HEX Zápis na seriový port

packa
Příspěvky: 43
Registrován: 15 zář 2015, 12:32

HEX Zápis na seriový port

Příspěvek od packa »

Ahoj můžete mě někdo poradit jak hexadecimálně zapsat do arduina toto
mám stažen z data logeru asci a hex zápis , ale když to zapíšu do arduina tak to posílá nesmysly.
Asci HEX
'1' (0x01)
'3' (0x03)
'0' (0x00)
\n (0x0A)
'0' (0x00)
'17' (0x11)
'165' (0xA5)
'196' (0xC4)
'1' (0x01)
'3' (0x03)
'0' (0x00)
\n (0x0A)
'0' (0x00)
'17' (0x11)
'165' (0xA5)
'196' (0xC4)

POtřebuji jednomu zařízení poslat po seriové lince toto, abych donutil to zařízení posílat data do pc
ať to zapíšu jak to zapíšu stále mě na logeru potom lezou blbosti .
Dík všem .
Packa
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: HEX Zápis na seriový port

Příspěvek od DavidO »

Úplně nerozumím co myslíš tím "zapsat do arduina toto".
Má to být program běžící v Arduinu a posílající něco po seriové lince? Nebo chceš poslat z PC něco po seriové lince kamsi ven, nebo z Arduina do PC, nebo z PC pomocí Arduino IDE do Arduina, nebo z PC jakkoli do Arduina, nebo ... ?
"Po drátě" má jít sekvence bajtů (hexadecimálně) 01 03 00 0A atd.?
Jak má být nastavený baudrate (a případně i další nastavení, start-stop bity, parita)?
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
packa
Příspěvky: 43
Registrován: 15 zář 2015, 12:32

Re: HEX Zápis na seriový port

Příspěvek od packa »

Ahoj
abych popsal svůjproblém .
Mám solární regulátor který s pc komunikuje po RS232. jede jen po třech drátech .
k regulátoru je origo kabel s FTDI čipem .
Potřebuji pořešit aby mi regulátor komunikoval přez wifi převodník a v pc běží virtualseriový port .
vše funguje až na to že se s regulátorem nespojím.
Data logerem jsem zjistil že PC pošle regulátoru tuto sekvenci a regulátor nato začne posílat data .
Z neznámého důvodu je komunikace možná jen přez původní kabel. přez ostatní převodníky (i drátové- prolific)
dojde ke změně hex zápisu. (převodník to sprasí) a komunikace se nenaváže.
Podařilo se mi to jž napsat do arduina - podle datalogeru je to stejné jako to co leze z origo kabelu ale regulátor to stejně neaktivuje .
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: HEX Zápis na seriový port

Příspěvek od DavidO »

Hm, tak podle toho popisu mě nenapadá žádný konkrétní zádrhel. Obecněji může být nesprávné nastavení té sériové komunikace (baudrate apod.) nebo nesprávné prodrátování (třeba prohozené Tx/Rx), v případě programu do Arduina ještě i nesprávně napsaný program, ale podle toho popisu těžko říct.
Akorát teda tohle
přez ostatní převodníky (i drátové- prolific) dojde ke změně hex zápisu. (převodník to sprasí)
nějak nechápu. Jako že ten jiný převodník dostane zleva správná data a doprava pošle jiná? Není třeba ten jiný převodník sice USB<->serial ale ne RS232 nýbrž TTL?
Nedalo by se to přinést v sobotu na Robodoupě? (jestli to ještě není namontované na střeše...)
Ještě pozor, že ty data z datalogeru se nemůžou do programu v Arduinu napsat takhle, protože např. '1' pro něj není bajt s hodnotou jedna, ale protože to je uzavřené v ' ' tak to je znak, číslice jednička, který nemá kód 0x01 ale 0x31 (desítkově 49).
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
packa
Příspěvky: 43
Registrován: 15 zář 2015, 12:32

Re: HEX Zápis na seriový port

Příspěvek od packa »

Ahoj
rád bych to donesl , ale mám to do Prahy poněkud z ruky .


log vypadá takhle: vpravo FTDIje správně , napojil jsem loger mezi FT a max3232 a pak jsem zapojil max3232 na výstup linky RS232 a logje stejný ,když použiju jakýkoli převodník USB/ttl nebo USB/RS232 a dám navázat komunikaci tak z toho leze to co je v logu pod PRlific nebo ještě jinak sprasené.


Time ------------------PROLIFIC---FTDI
13.398444333333334 '242' (0xF2) '1' (0x01)
13.399506000000001 '3' (0x03) '3' (0x03)
13.400567583333334 '0' (0x00) '0' (0x00)
13.401629166666666 \n (0x0A) \n (0x0A)
13.402690833333333 '0' (0x00) '0' (0x00)
13.403752416666666 '17' (0x11) '17' (0x11)
13.404814000000000 '177' (0xB1) '165' (0xA5)
13.405875666666667 '7' (0x07) '196' (0xC4)
18.470088666666665 '242' (0xF2) '1' (0x01)
18.471150250000001 '3' (0x03) '3' (0x03)
18.472211916666666 '0' (0x00) '0' (0x00)
18.473273500000001 \n (0x0A) \n (0x0A)
18.474335083333333 '0' (0x00) '0' (0x00)
18.475396666666665 '17' (0x11) '17' (0x11)
18.476458333333333 '177' (0xB1) '165' (0xA5)
18.477519916666665 '7' (0x07) '196' (0xC4)
23.541764916666665 '242' (0xF2) '1' (0x01)
23.542826583333333 '3' (0x03) '3' (0x03)
23.543888166666665 '0' (0x00) '0' (0x00)

program arduino mám takto:

void setup()
{

Serial.begin(9600);

}
void loop()
{

Serial.write ("\x01\x03\x00\x0A\x00\x11\xA5\xC4\x01\x03\x00\x0A\x00\x11\xA5\xC4", 16);
delay(3620);
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: HEX Zápis na seriový port

Příspěvek od fulda »

To je normálně deformovaný signál vlivem špatných hran. Jednoduše signál není _|¯|_|¯|_ ale je _/¯\_/¯\_ a každý ten obvod má jinde rozhodovací úroveň (nebo vnitřní kapacitu nebo cokoli). Já to řešil třeba tak, že jsem cestou přidal nějaké to hradlo 74xx14 a bylo.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
packa
Příspěvky: 43
Registrován: 15 zář 2015, 12:32

Re: HEX Zápis na seriový port

Příspěvek od packa »

ten signál z toho logu leze přímo z usb/ttl převodníku , ještě tam ani není RS232 převodník , tak si nemyslím že by tvarovač pomohl , každopádně to zkusit můžu .
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: HEX Zápis na seriový port

Příspěvek od DavidO »

Možná budu hnidopich, ale chtěl bych zdůraznit, že USB/TTL převodník není totéž co USB/RS232 převodník. Mají různé napěťové úrovně na výstupu, a to tak, že dost: u RS-232 je logická nula +3V až +15V, logická jednička -15V až -3V, pro TTL je nula 0V až 0.8V a jednička 2V až 5V (pro běžné TTL mající pětivoltové napájení). Nelze zaměňovat. Jak to tedy máte? Tu fotovoltaiku máte k připojení do "starého" seriového portu, 9-pinový konektor "Canon DB-9" a komunikace definována jako RS-232, následně onen "origo kabel s FTDI" a ten pak do USB? Ty "ostatní převodníky i prolofic" jsou také RS-232 ANEBO TTL??? Konektor můžou mít stejný, podle toho se to nepozná (už jsem měl v ruce TTL s DB-9 i RS-232 s hřebínkem).
A ten datalogger, co je zač? RS-232 nebo TTL?
Doporučil bych podívat se záznamovým osciloskopem nebo LA co OPRAVDU leze za signál do/z řídícoho modulu té fotovolataiky (a to jak tvarově, tak co se týče napěťových úrovní).

Tak jako tak, tam je opravdu systematická záměna pokaždé 01->F2, A5->B1, c4->07? To zní oproti těm ostatním nezměněným datům dost zajímavě.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
packa
Příspěvky: 43
Registrován: 15 zář 2015, 12:32

Re: HEX Zápis na seriový port

Příspěvek od packa »

Co je TTL a co je RS232 vím , origo kabel je USB/RS232- (pouze po třech drátech) s chipem FT232+zt213.
Datalogger jsem zapojoval mezi FT232 a zt213- tudíž na úroveň TTL. další měření jsem dělal na konci kabelu zapojen převodník s max3232 - konverze zpět na úroveň TTL. log byl naprosto identický.
Pokud ale do pc zapojím jaký koli jiný převodník který mám (3ks) (ani jeden nemá FT232), tak jsou v logu patrné rozdíly , jiné rozdíly jsou pak když jsem testoval spojení přez WIFI a virtualní seriový port.
Pokud navážu komunikaci s regulátorem pomocí origo kabelu tak pak už regulátor posílá data a můžu je přenášet přez wifi a číst je na pc to mám ověřeno . ( regulátor v intervalu cca 10s posílá naměřené parametry a z PC už se do regulátoru nic neposílá)
analyzátor mám tento :

http://www.electrodragon.com/product/sa ... 8-channel/
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: HEX Zápis na seriový port

Příspěvek od DavidO »

OK, mě připadalo, že to píšete trochu nejasně a že by mohl být zakopaný pes i v tom. (taky si dokážu si představit datalogger, který ustojí RS232 i TTL úrovně a sám se přizpůsobí, takže navenek to vypadá všechno hezky). Tenhle Váš logger, i když to není origo Saleae ale klon, by i tak měl dávat rozumné výsledky - i když i on samozřejmě má nějaké rozhodování co je a co není logická 0/1 a to může být rozdílné od chování cílového zařízení. Jak píše fulda, tvar signálu může být ne úplně pěkný a tak to jeden vyhodnotí tak a jiný jinak.
Ale taky by mohlo být klíčové, že "ani jeden nemá FT232", protože by to mohl být projev "ftdigate", kdy driver od ftdi pozná, že to není originální ftdi chip a začne posílat jiná data (i když o takhle selektívních změnách jsem ještě neslyšel; vím, že jedna verze bricknula ten cizí chip, jiná posílala místo dat konkrétní řetězec, třeba zase jiná verze dělá tohle?). Každopádně bych zkusil na těch jiných převodníkách spojit Tx a Rx (jako loopback) a z PC posílat různými rychlostmi všechno možné, třeba postupně 00-FF, nebo sekvence stejných atd. a porovnávat co přijde zpět. Když i to bude různé, tak bych buď zahodil převodník, anebo začal laborovat s driverama ve Windows. Když to bude stejné, tak bych to propojil z PC přes převodník do Arduina, připojil k němu displej a vypisoval na něj, co přijde, jestli to je stejné. A pak opačným směrem opět posílal z Arduina do PC a okem porovnával. A mezi dvěma Arduiny.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Odpovědět