Arduino MICRO seriova komunikace

Odpovědět
unformat
Příspěvky: 7
Registrován: 13 pro 2020, 04:27
Reputation: 0

Arduino MICRO seriova komunikace

Příspěvek od unformat » 13 úno 2021, 23:18

Ahoj, potřeboval bych poradit s deskou arduino micro. Konkrétně s obousměrnou sériovou komunikací s PC.
Když připojím tuto desku k PC tak se stanou dvě věci:
Vytvoří se nový komunikační port (tak jako u arduino uno desky) a k tomu se přidá nová klávesnice. (Deska umí emulovat klávesnici). Vím že arduino micro má dvě sériové linky, jednu virtuální, kterou řídí samotný čip a je připojena na USB konektor a druhou hardwarovou připojenou na piny. (V programu je to pak Serial a Serial1) a že se deska sama nerestartuje při připojení k PC (V tom problém není).
Ted k samotnému dotazu:
Když si napíšu velice jednoduchý prográmek, který mi bude posílat na sériovou linku např. každou 1s písmeno "A". Otevřu si v IDE serial motitor, tak budu vidět že se na sériovou linku posílá každou 1s písmeno "A". Zavřu si serial monitor a otevřu si program (napsaný v C#) který mi bude pouze zobrazovat data ze sériové linky, tak mi neukáže vůbec nic.
(Pokud použiju desku arduino uno, tak vše funguje jak má, ale jakmile použiju desku arduino micro, tak to nefunguje)
Má teorie je takováto: Jelikož arduino micro dokáže emulovat klávesnici, tak data posílaná z desky do PC se tváří jako data posílaná z klávesnice, nikoli jako data posílaná po sériové lince.
Pro posílaní dat používám klasicky Serial.print(""); - Možná je problém v tomto, fakt nevím.
Jde nějakým způsobem přimět desku arduino micro aby přestala emulovat klávesnici a začala obousměrně komunikovat s PC po sériové lince?
(Jen pro upřesnění, problém s komunikací po sériové lince je pouze ve směru z desky do PC, když budu posílat data směrem z PC do desky, tak vše funguje zcela normálně, jak u desky UNO, tak u desky MICRO.)
Na internetu je pár zmínek o tomto problému, ale nikde žádné řešení jsem nenasel. (Ve smyslu aby ta deska obousměrně komunikovala s PC přes USB)
Jediné řešení co se dá "vygooglit" je připojit si k PC např. arduino uno a spojit ho s arduino micro přes hardwarovou sériovou linku a tímto způsobem obousměrně komunikovat s PC, což je pro můj projekt nesmysl. (Potřebuju využít emulaci klávesnice a při potřebě obousměrně komunikovat s PC)
Má tu prosím někdo s tímto zkušenost?
Možná že stačí tu desku v programu "nějak" nastavit / přepnout do "nějakého" jiného režimu, co já vím 😕
Řeším to už několik dní a jelikož má angličtina je na úrovni tříletého dítěte, tak to jde velice ztuha 😕
Za jakoukoli smysluplnou radu předem děkuji. 👍
PS: Všimnul jsem si, že při nahrávání programu zmizi emulovana klavesnice a seriovy port, vytvori se novy seriovy port (bez klavesnice) -> nahraje se program -> odpoji se seriovy port a znovu se pripoji klavesnice a novy seriovy port. -> pri nahravani programu se nejspis deska prepne do modu kdy neemuluje klavesnici, ale pouze obousmerne komunikuje s PC = to presne bych potreboval. Nevi prosim nekdo jak to arduino Micro programove prepinat mezi emulovani klavesnice a obousmernou komunikaci s PC ?

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Arduino MICRO seriova komunikace

Příspěvek od gilhad » 14 úno 2021, 03:36

Co vim urcite - jde takhle vytvorit USB klavesnice+USB mys - pouzivam to
Skoro jiste - je to delane prez ten chip, ktery ma USB vystup a zadny dalsi chip neni v ceste (a ma to v datasheetu)
Takze - by prez to melo jit udelat prakticky libovolne USB zarizeni (urcite joystick, nekde jsem videl priklad)
Ale - taky vystupni USB zarizeni, neco jako disk, tiskarna, teletype
a tudiz prez to komunikovat i ven ("ukladat soubory", "tisknout" ...)
a tedy proc ne i nejake obousmerne, treba i nejaky ten COM?
(ale obavam se, ze na takovehle veci uz nebudou "jednoduse slepitelne" knihovny pro "arduino")

Knihovny na tohle jsem ale nehledal, protoze nepotreboval a v USB protokolu jsem se tolik nehrabal. Dokonce ani v tom, jak se prepne pro nahravani a zpet. Ale imho by to mohla byt cesta. Na te desce neni skoro nic, krome toho kontroleru, takze jsi omezeny tim, co ten kontroler - atmega32u4 tusim - zvladne (jak HW, tak SW - taky tam jen tak nenarves neomezene velky a rychly program se spoustou pameti).

Ale IMHO by to v principu melo zvladnout (skoro kazdy) device, ale nezvladne to delat HOST (cili zvladne to emulovat mys, ale usb mys do toho nepripojis ani naprimo, ani prez nejake zkrizene draty a odpory tak, aby ji mohl cist - na to potrebujes jiny chip - coz te ale ted asi nezajima)

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Arduino MICRO seriova komunikace

Příspěvek od pavel1tu » 14 úno 2021, 11:16

Odpovím ti co na FB
Nebudu dokola popisovat co jsem zkoušel a co ne, tam jsi neodpověděl.

Ale pokud chceš komunikovat s PC "obousměrně", nevím proč do toho plést připojení přes USB jako klávesnici.
Prostě to připoj přes UART jako všichni a všem to funguje.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

unformat
Příspěvky: 7
Registrován: 13 pro 2020, 04:27
Reputation: 0

Re: Arduino MICRO seriova komunikace

Příspěvek od unformat » 14 úno 2021, 14:31

Problém je ten že já mluvím o koze a ty mluvíš o voze a jsi frustrovaný z mé zpětné odezvy.

Takže pokusím se to nastínit lépe.
UNO,MEGA,NANO = chip => chip s UART => Obousměrná komunikace s PC přes COM (Data z desky do PC a Data z PC do desky)
Konektor USB je propojen s piny na desce

MICRO = chip => Jednosměrná komunikace s PC ve směru z PC do desky MICRO + emulace klávesnice (myši, atd.) ve směru z desky MICRO do PC
Konektor USB NENI propojen s piny na desce, místo toho piny na desce mají svoje rozhraní které nemá nic společného s USB konektorem

Když chceš obousměrně komunikovat s PC přes UART u desek UNO,MEGA,NANO stačí ti připojit kabel v setup časti zapnout sériovou linku např. Serial.begin(9600);
a pak už jen sypeš data Serial.println("sypu data");
V rozhraní IDE v serial monitoru vidíš jak sypeš data.
Zapneš si externí program, jako např. serial-port-monitor (viz odkaz) a VIDÍŠ jak se ti tam sypou data
https://www.instaluj.cz/serial-port-mon ... DkuE2VcDwg

ALE

U desky MICRO ti nestačí jen připojit kabel a v setup casti hodit Serial.begin(9600); a máš vyhráno.
Tím pouze docílíš tohoto:
sypeš data v loop ... Serial.println("sypu data");
V rozhrani IDE v serial monitoru vidíš jak sypeš data.
Zapneš si externí program, jako např. serial-port-monitor (viz odkaz) a VIDÍŠ KULOVÉ
PROČ ??? TO SE SNAŽÍM ZJISTIT!!!!!!!
Pokud používáš nějaký zázračný program (PUTTY) a ty data tam vidíš, tak gratuluju a chápu že netušíš o čem tu mluvím.
Ale bohužel pro nás ostatní smrtelníky kteří potřebují s DATY dále v PC pracovat např. ne jen v serial-port-monitor programu ale i v custom programu
psaném v C#, pak mají smůlu protože ty DATA se z NĚJAKÉHO důvodu v PC ztratí. Jdou vidět jen v IDE serial monitor a nebo nejspíše ve tvém zazračném programu, což nemám ověřeno. (PUTTY)

Pochop že když vezmu PROGRAM a nahraju ho do desky UNO nebo MEGA, tak to FUNGUJE !!!!!
ale
Když ten samí program nahraju do desky MICRO, tak to NEFUNGUJE
A proč to nefunguje ???? to mi řekni

Má teorie je taková že to MICRO jelikož NEMÁ UART rozhraní a komunikaci s PC řeší samotný chip tak se ten CHIP musí nějak co já vím nastavit.
Když mrkneš na net, tak to tam řeší kupa lidi, viz odkaz na FB.
Jediné řešení co tam padlo bylo u desky MICRO připojit FT232RL na piny a tím obejit USB konektor.

Doufám že teď to vidíš jasněji a možná že se dokážeš na tento problém podívat s otevřenou myslí a ne s předem daným rozhřešením typu u UNO/MEGA mi to funguje tak to i u MICRO desky musí jít taky. MICRO funguje podobně jako LEONARDO atd..

A omlouvám se za můj příkrý výklad, jsem z toho také frustrovaný, asi tomu domluvím kladivem.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Arduino MICRO seriova komunikace

Příspěvek od pavel1tu » 14 úno 2021, 15:57

Asi takto - jak jsem psal - mne to funguje.

1) na FB jsem psal , že mi funguje odesílání "A" jako stisk klávesnice přes

Kód: Vybrat vše

Keyboard.write('A');
a zároveň na Serial1

Kód: Vybrat vše

Serial1.println("A");
2) teď jsem to vyzkoušel i na oba porty

Kód: Vybrat vše

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);

}

void loop() {
  Serial.println("A0");
  Serial1.println("A1");
  delay(1000);

}
Obrázek


PS: jen zopakuji - ani zde, ani na FB jsi nedal kod, nedal jsi odkaz na program kterým to odchytáváš (natož jak jsi připojený na UART), opravdu nevím jak ti pomoci
PS2: z obou serial (Serial i Serial1) jsem to odchytil jak do Arduino IDE, tak Putty i dalších seriových monitorů

U mne máš BAN, požadované informace na několika forech nedáš a ještě jsi hrubý, sbohem, tvé příspěvky já už neuvidím - NIKDE

Aby jsi mi opravdu věřil
https://drive.google.com/file/d/18MvZ1u ... sp=sharing
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Arduino MICRO seriova komunikace

Příspěvek od pavel1tu » 14 úno 2021, 16:19

Tvůj program asi neumíš nastavit, free programy mi fungují, zde Putty
Nehodlám si jej instalovat když je placený a ve free verzi omezený ;)
Obrázek

Napsal jsem si i v C++ od Borlandu (zkompiloval příklad komunikace) a ten to vidí také.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Arduino MICRO seriova komunikace

Příspěvek od gilhad » 14 úno 2021, 16:47

unformat píše:
14 úno 2021, 14:31
Takže pokusím se to nastínit lépe.
UNO,MEGA,NANO = chip => chip s UART => Obousměrná komunikace s PC přes COM (Data z desky do PC a Data z PC do desky)
Konektor USB je propojen s piny na desce

MICRO = chip => Jednosměrná komunikace s PC ve směru z PC do desky MICRO + emulace klávesnice (myši, atd.) ve směru z desky MICRO do PC
Konektor USB NENI propojen s piny na desce, místo toho piny na desce mají svoje rozhraní které nemá nic společného s USB konektorem
Minimalne novejsi UNO (uz par let) funguje takto:
Hlavni chip (atmega328) => chip s uart (atmega16u4) => USB a zpet.
Ano, UNO pouziva pro komunikaci prez USB ten samy chip (jen s mensi pameti), ktery pouziva MICRO jako hlavni chip a oba ho maji k tomu USB pripojeny stejnym zpusobem.
(Driv pouzivali tusim FTDI, ale kdyz si ta firma prosadila do Windows ovladac, ktery zamerne takoveto chipy nicil, aby si vyridila problemy s konkurenci na ucet zakaznika, ktery se nemohl branit, tak prave presli na ty atmega16U4, ktere firma FTDI nebyla svy "ovladacem" schopna nicit)

Dokaze-li UNO komunikovat s USB nejakym zpusobem, dokaze to i MIKRO, protoze ta komunikace jde prez stejny chip, stejne pripojeny.
(pravda, UNO takto muze zpracovavat vetsi programy, protoze si praci deli s tim atmega32u4 ale urcite se to omezeni netyka takovych miniprogramu, jako je posilani par pismenek sem a tam)
(a ano, UNO umoznuje ten chip atmega16U4 naprogramovat jinak a pak zase zpatky. Ta Atmega16u4 s hlavnim chipem komunikuje prez RX/TX toho chipu, cili pokud je mozna komunikace hlavniho chipu UNO s pocitacem OBOUSMERNE, tak je to proto, ze atmega16U4 je schopna takovouto OBOUSMERNOU komunikaci zajistit. A stejne je schopna ji zajistit in na desce MICRO, jen si musi jeji obsah vymyslet sama - ale zase na to ma vic pameti)
(a ano, problem samozrejme MUZE byt v "Arduino knihovnach", ktere jsou - silne eufemisticky receno - kvalitou ruznorode a urcite nejsou vzorem, jak by se to melo delat spravne )

Schemata
https://store.arduino.cc/arduino-uno-rev3
https://store.arduino.cc/arduino-micro
datasheet (spolecny pro ATmega16U4/ATmega32U4 ) http://www.atmel.com/Images/Atmel-7766- ... asheet.pdf
Rozdil je v tom, ze Micro ma 2x vic pameti.

unformat
Příspěvky: 7
Registrován: 13 pro 2020, 04:27
Reputation: 0

Re: Arduino MICRO seriova komunikace

Příspěvek od unformat » 14 úno 2021, 19:08

Výstřižek1.JPG
Výstřižek1-1.jpg
Výstřižek2.JPG
Výstřižek2-2.jpg
Ještě jednou se omlouvám za svoji "hrubost".
Prostě to řeším už moc dlouho a tlačí mě čas.
Vyřeším to externí komunikací a je to.
Kdo ví třeba se Visual studio 2019 nedokáže domluvit.
Někde je zakopaný pes a dle zahraničních fór je řešení v FT232RL a pripojeni na Serial1, koupím, zkusím.
Děkuji všem za reakce a opravdu mým úmyslem nebylo zde nikoho urazit, či nějak pohoršit. :-/

unformat
Příspěvky: 7
Registrován: 13 pro 2020, 04:27
Reputation: 0

Re: Arduino MICRO seriova komunikace

Příspěvek od unformat » 14 úno 2021, 23:09

HEUREKA :D
Takže ještě jednou všem děkuju, každý přispěl svojí částí.
Je vidět že jsem hlava zabedněná a když se kousnu tak vidím rudě za což se omlouvám.
Takže pokud by se někdy někdo kousnul v tomto problému tak jako já, tak tu je rozhřešení.
V C# když si otevřete COM port a je k němu připojeno arduino UNO, MEGA, NANO tak díky tomu ze UART je zvlášť a lépe programově vybaven
tak automaticky řekne C# HELE TU SEM A POSILAM TI DATA
U desky arduino MICRO toto není, jelikož se jedna o virtuální sériový port => musí se v C# před otevřením portu nastavit DTR and RTS jako ENABLE, jinak vám to sice bude posílat data ven ale nikdy je nebude přijímat.
Takže těsně před otevřením portu tam stačí hodit toto:
serialPort1.RtsEnable = true;
serialPort1.DtrEnable = true;

UFF to jsem si dal :o Dobrou noc :D

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů