1 Naposledy upravil: dockys (2021-02-03 22:08:13)

Téma: [vyřešeno] Sériová komunikace

Mám následující kód, který mi posílá data přes COM6.
Všechno funguje jak má, do doby, než odkomentuji funkci serial6_set(), přitom výchozí nastavení portu COM6 je totožné s tím, co volám v té funkci (ověřeno v administraci i výpisem hodnot sys[57] až sys[60]).
Kde může být problém?

Zařízení: SDS MINI ST
Verze použitého firmware: 10.1.2021

init  {
      echo('Setup...');
      //serial6_set(9600, 8, 1, 0);
}

main {
     serial6_text_out('Ahoj, jak se mas?', 0x0D); // zápis do COM6
     wait(1000);
}

2

Re: [vyřešeno] Sériová komunikace

Prosím popište co nefunguje - když tedy zavoláte serial6_set() tak ... přestane druhé zařízení přijímat data?

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

3 Naposledy upravil: dockys (2021-02-04 09:30:04)

Re: [vyřešeno] Sériová komunikace

Ano, pokud nezavolám funkci serial6_set(..), je vše v pořádku, funguje to na 100%.
Jakmile zavolám funkci serial6_set(..), tak data sice chodí, počet, co je odeslán se rovná počtu, co přijde, ale některé znaky jsou špatně. Respektive 20% textu sedí, ostatní znaky jsou rozsypaný čaj.

Např. místo:
'h', odesláno je 0x68, ale dorazí 0xE8
'a', odesláno je 0x61, ale dorazí 0xE1
u písmena 'o' je to OK, odesláno 0x6F, dorazí 0x6F.

Vůbec mi to hlava nebere.

EDIT
Nevím jestli je to jen náhoda, ale když od hodnoty 0xE8(232) odečtu 128, vyjde 0x68(104). To samé platí i pro písmeno 'a'.

4

Re: [vyřešeno] Sériová komunikace

1) chyba v použití serial6_text_out

Tato funkce převádí vše na text, předtím než to pošle na sériovou linku. To znamená 0x0D je převedeno na text '13' - bez uvozovek, samozřejmě, tedy na znak 1 a znak 3 - a tyto dva znaky jsou poslány ven na sériovou linku.

Pokud je opravdu cílem poslat tam 0x0D použijte funkci serial6_write().

2) odzkoušení problému

Na MINI jsem natvdro zkratoval pin 4 a pin 6, tím jsem propojim COM6 RX a COM6 TX. Takže vše co MINI odešle (na sériovou linku COM6) ihned také na COM6 následně přijme.

Nahrál jsem do MINI následující program:

init
{
  echo('Setup...');
  serial6_set(9600, 8, 1, 0);
}

var ch;

main
{
  // zápis do COM6, pozor 0x0D se touto funkcí zapíše jako text: 13
  serial6_text_out('Ahoj, jak se mas?', 0x0D); 

  wait(1000);

  // vypsat vše co přijde na COM6
wait_for_rx:

  ch = sys[56];

  if (ch < 0)
  goto wait_for_rx;

  text[0] = ch; // aby šel zobrazit i skutečný znak

  echo(ch,' ', text[0]); // číslo a znak

  goto wait_for_rx;

}

Výsledek:

Setup...
65 A
104 h
111 o
106 j
44 ,
32
106 j
97 a
107 k
32
115 s
101 e
32
109 m
97 a
115 s
63 ?
49 1
51 3

Takže to funguje jak má (plus ale viz poznámka v bodu 1 ohledně 0x0D, ale teď se bavíme o původním problému).

3) dotaz

Jakým způsobem zachytáváte zmíněná data, která se vám ukáží jako nesprávná ?
Tzn. jaký hardware a software atd. - je důležité do detailu vše sem popsat. Jaká je celá vaše sestava.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

5

Re: [vyřešeno] Sériová komunikace

Zkratoval jsem také natvrdo piny 4 a 6, nahrál Váš program a v konzoli bylo jen 'Setup...'.
Zakomentoval jsem funkci 'serial6_set()', nahrál program, restartoval SDS a v konzoli byl již správný výsledek.
Takže evidentně je něco špatně při zavolání funkce serial6_set() konkrétně u mého SDS MINI.

Pozn.
Jakmile zavolám jednou funkci serial6_set(), tak sériová komunikace přestane v ten okamžik fungovat (u propojených pinů 4 a 6). Nepomůže to jen zakomentovat v kódu a nahrát program, musí se restartovat i celé SDS..

Díky za upozornění s tím znakem 0x0D.

6

Re: [vyřešeno] Sériová komunikace

dockys napsal:

Zkratoval jsem také natvrdo piny 4 a 6, nahrál Váš program a v konzoli bylo jen 'Setup...'.

To je vážná chyba. Protože i kdyby se to nastavení změnilo jakkoliv, pořád by muselo být stejné pro vysílání i příjem, takže v konzoli by s tímto testovacím programem muselo jít vidět ten správný výsledek.
A protože píšete že není, tak je to konkrétní SDS nějak vadné.
Jaký tam je FW ?

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

7

Re: [vyřešeno] Sériová komunikace

FW mi to hlásí ..

Zařízení: SDS MINI ST
Verze použitého firmware: 10.1.2021

8

Re: [vyřešeno] Sériová komunikace

1) zkuste ještě nový FW, ať se to vyloučí
2) chová se to stejně i pro COM1 ??? to je důležité vyzkoušet
konektor (pin3 COM1 RX) (pin5 COM1 TX)

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

9

Re: [vyřešeno] Sériová komunikace

Tak problém vyřešen, opravdu pomohlo jen přehrání FW tou novou verzí..