presmervanie dát v počítači z COM do súboru

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
samec
Příspěvky: 6669
Registrován: 19 pro 2017, 00:00

presmervanie dát v počítači z COM do súboru

#1 Příspěvek od samec »

Data posielané z Arduina do počítača som presmeroval pomocou skriptu do súboru.
skript.bat

Kód: Vybrat vše

MODE COM5: BAUD=9600
type COM5: >> data.log
pause

Otázka je, ako prenos a presmerovanie korektne ukončiť.
Ak po skončení vysielania dát Arduinom odpojím USB kábel, alebo ak zavriem okno so skriptom, tak časť dát sa neuloží.
Uživatelský avatar
PotPalo
Příspěvky: 6018
Registrován: 13 kvě 2009, 00:00
Bydliště: BA

#2 Příspěvek od PotPalo »

Ctrl-C nefunguje? Tie neuložené dáta ale môžu čakať na strane vysielača v bufferi, takže to by sa muselo riešiť na druhej strane.
Je na čase vymeniť primátora Bratislavy, a celú tú neschopnú pakáž okolo.
Uživatelský avatar
Zaky
Příspěvky: 7050
Registrován: 30 říj 2010, 00:00
Bydliště: Praha

#3 Příspěvek od Zaky »

Místo skriptu si napiš prográmek, co otevře port a bude ukládat do souboru, testuj si přijatá data a před ukončením si z Arduina pošli nějaký unikátní řetězec, že se má příjem dat ukončit, ten si dekóduješ a uzavřeš a uložíš soubor. Napsat commandlinový prográmek tohoto typu je i zcela bez zkušeností s přístupem ke Google záležitost řádu hodin a posuneš si možnosti té PC strany úplně někam jinam. Můžeš použít třeba Visual Studio, nebo cokoli jiného.
Krátce před tím, než se to rozbilo, tak to ještě fungovalo...
Uživatelský avatar
rnbw
Příspěvky: 37416
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#4 Příspěvek od rnbw »

Prikaz type skonci po prijati ASCII znaku EOF (0x1a).
Uživatelský avatar
samec
Příspěvky: 6669
Registrován: 19 pro 2017, 00:00

#5 Příspěvek od samec »

Hej, celý orloj si nainštalujem do počítča kvôli pár bajtom zo seriovej linky.

Potrebujem skopirovať do počítača pamäť 93C66C.
Malo by to byť 256 16-bitových hodnôt.
Zatiaľ som len skúsil poslať nejaké generované hodnoty do počítača.

Kód: Vybrat vše

unsigned int i = 0;

void setup() {
  Serial.begin(9600);
  pinMode(6, INPUT_PULLUP);  //tlacidlo start zapojene medzi pin 6 a zem
  while(HIGH == digitalRead(6)){};  //cakanie na start
  i = 256;
}

void loop() {
  if(i){
    i--;
    Serial.println(i,HEX);
    delay(10);
  }
  else{
    Serial.end();
  }
}

Súbor s prijatými dátami má 512 bajtov. V prvom riadku je FF v poslednom 80. Každý riadok má 4 bajty - 2 znaky FF až 80 a 0x0D0A (nový riadok).
Druhá polovica dát zostala kdesi v buffri. Ale určite nie na strane Arduina. Tam sa toľko nezmestí.

Ak zvýšim počiatočnú hodnotu i=512, tak súbor má 2048 bajtov. V prvom riadku je 1FF, v poslednom 40.
Uživatelský avatar
Zaky
Příspěvky: 7050
Registrován: 30 říj 2010, 00:00
Bydliště: Praha

#6 Příspěvek od Zaky »

Tak to máš říct hned. Stáhni si hercules setup utility a tam si to do toho souboru z portu odchyť.
Krátce před tím, než se to rozbilo, tak to ještě fungovalo...
Uživatelský avatar
samec
Příspěvky: 6669
Registrován: 19 pro 2017, 00:00

#7 Příspěvek od samec »

Herkules nejde ani toľko čo skript cez prikazovy riadok. Ani len Arduino nechce posielať dáta.
Mám tu Herkules Version 3.2.8, nastavené Name COM5, Baud 9600, Data size 8, Parity none, Handshake OFF, Mode Free. Kliknem na open, na Arduine blikne LED. Ale keď spustím posielanie dát z Arduina, tak ani len neblika LED na Arduine. Nič sa neposiela. Cekom nič. Len zabité dve hodiny zo života.
Uživatelský avatar
Zaky
Příspěvky: 7050
Registrován: 30 říj 2010, 00:00
Bydliště: Praha

#8 Příspěvek od Zaky »

Herkules mám ověřený, pouze je třeba při rychlém sypání velkého objemu dat logovat do souboru a ne zobrazovat do okna, což jsem ti psal. Tzn. tvé dvě ztracené hodiny jsou způsobené problémem mezi židlí a klávesnicí :-) Při přenosu přes UART je přece vysílací straně úplně putna, jestli někdo poslouchá, nebo ne, takže jestli ti to neposílá, tak máš problém na straně Arduina.
Krátce před tím, než se to rozbilo, tak to ještě fungovalo...
Uživatelský avatar
rnbw
Příspěvky: 37416
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#9 Příspěvek od rnbw »

Zaky píše:Při přenosu přes UART je přece vysílací straně úplně putna, jestli někdo poslouchá, nebo ne

Plati za predpokladu, ze je vypnuty flow control.
Uživatelský avatar
samec
Příspěvky: 6669
Registrován: 19 pro 2017, 00:00

#10 Příspěvek od samec »

Tak ešte pre úplnosť dodám, že používam Arduino Leonardo, presnejšie jeho minimalisticku neoficiálnu verziu Arduino pro micro z eBay. Podstatný je čip MEGA 23U4. A ešte dodám, že mám Windows 10. A týmto, spolu s predchádzajúcim výpisom programu, je popis môjho problému dúfam úplný.

Stále tvrdím, že problém je nejaký windowsový buffer sériového portu, v ktorom zostanú vsieť neuložené dáta. Očakávam riešenie vo forme vyprázdnenia tohto buffera pred ukončením presmerovania, nejakým korektným zatvorením portu. Alebo nejako zakázať buffering.

Bez toho to samozrejme viem obsrať poslaním nadbytočných dát, aby sa tie podstatné dostali z buffera do súboru. Ale krajšie sa tento spôsob pomenovať nedá.
Uživatelský avatar
Zaky
Příspěvky: 7050
Registrován: 30 říj 2010, 00:00
Bydliště: Praha

#11 Příspěvek od Zaky »

Popis není úplný, chybí v něm právě to zmíněné řízení toku, je vypnuté? Používáš pouze jednosměrný přenos z Arduina do PC, opačně nic? Herkulesem jsem nalogoval do souborů při jednom projektu řekněme několik desítek MB dat a nikdy nic nechybělo. Pokud máš pochybnosti, tak ti nezbývá, než data odchytit osciloskopem a porovnat, zda se chybějící data skutečně neodvysílala, nebo odvysílala, ale nepřijala. Pokud pořád řešíš tu paměť, tak ještě můžeš ubastlit primitivní HW a použít SW Ponyprog.
Krátce před tím, než se to rozbilo, tak to ještě fungovalo...
Uživatelský avatar
PotPalo
Příspěvky: 6018
Registrován: 13 kvě 2009, 00:00
Bydliště: BA

#12 Příspěvek od PotPalo »

Čo si pamätám, tak niekde v správcovi zariadení sa dalo zakázať FIFO, či medzipamäť, či ako to bolo nazvané. Ale pod XP. Ako to majú novšie Winy neviem, treba pohľadať.

edit: Je to pod nastavením portu pod tlačítkom "Upresniť...". Tam sa dá celá FIFO vypnúť.
Naposledy upravil(a) PotPalo dne 06 bře 2021, 20:57, celkem upraveno 1 x.
Je na čase vymeniť primátora Bratislavy, a celú tú neschopnú pakáž okolo.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#13 Příspěvek od lesana87 »

Zjevně nekomunikuje s PC přes sériák ale přes USB, tomu samozřejmě chybějící / neodpovídající druhá strana vadit bude. Jak si ten Hekules poradí s virtuálním sériákem na USB?
Uživatelský avatar
Zaky
Příspěvky: 7050
Registrován: 30 říj 2010, 00:00
Bydliště: Praha

#14 Příspěvek od Zaky »

Herkulesu virtuální sériák nevadí, používám s ním běžně různé konvertory sériák/USB. Ovšem jestli je nějak doprasený VCP driver k tomu Arduinu, to je ve hvězdách a bez fyzického přístupu k UART linkám těžko něco radit.
Krátce před tím, než se to rozbilo, tak to ještě fungovalo...
Uživatelský avatar
samec
Příspěvky: 6669
Registrován: 19 pro 2017, 00:00

#15 Příspěvek od samec »

Zaky píše:Popis není úplný, chybí v něm právě to zmíněné řízení toku, je vypnuté? Používáš pouze jednosměrný přenos z Arduina do PC, opačně nic?
To je snáď jasné z výpisu programu.
Zaky píše:Pokud máš pochybnosti, tak ti nezbývá, než data odchytit osciloskopem a porovnat, zda se chybějící data skutečně neodvysílala, nebo odvysílala, ale nepřijala.
A kam mám ten osciloskop pripojiť na USB kábel?
Zaky píše:Pokud pořád řešíš tu paměť, tak ještě můžeš ubastlit primitivní HW a použít SW Ponyprog.
Načo mám bastliť HW, keď mám Arduino?
Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“