Adaptuojamės – FTDI USB TTL į RS485

26 10 2013

Gaminu čia viena agregatą kuriam naudosiu RS485 sąsają ir susiduria su tokia problema: Dviems įrenginiams bendraujant tarpusavyje vis per RS485 nuoseklią sąsaja niekaip nepavyksta visų duomenų iš šono debuginti. Situacija labai paprasta – turiu du Arduino kurie bendrauja vienas su kitu: UART duomenis galiu matyti tiesiai kompe per Arduino bet tik tuos kuriuos Arduino siunčia – gaunamu ne. Tie patys siunčiami duomenys taip pat yra tik teoriškai, nes neaišku kas su jais nutinka konvertuojant į RS485 fizinį lygį. Taip jau atsitiko kad projekto eigoje komandą siunčiantis Arduino ją išsiunčia, gavėjas gauna ir lyg tais atsako, bet pirmasis taškas šio atsakymo vis nesulaukia. Blogiausia yra tai kad nežinau ar antrasis Arduino pasiuntė atsakymą į RS485 tinklą, o gal pirmasis kažkaip nemoka jo priimti. Bėda bėda, reikia žiūrėti kaip čia paslampinėjus po RS485. Dabar aprašysiu mažą savo pagaminta įrenginuką kad tai ir galėčiau padaryti. Jį beje jau esu testavęs DMX512 tinklo testavime bet taip ir nebuvau pagaminęs PCB.

Taigi turiu FTDI USB į TTL pirštelį:

kxvn

Jį naudoju daugiausiai Standalone Arduino projektų programavimui ir panašiai. Kuom jis dar geras ir geresnis už pigesnius PL2302 modeliukus – turi DTR signalą. Būtent jo mums reikia RS485 signalui. DTR signalas nurodo RS485 mikroschemai kad dabar mes norime siųsti duomenis. Kuomet DTR yra LOW duomenys priimami. Taigi braižomės schemą bei PCB:

e82c

f9dw

Eagle failus sumečiau internetan: http://www.files.com/shared/526bd904146a9/ftdi_rs485.zip

Trumai apie ją. Įėjime turime DTR, RX, TX, VCC bei GND signalus iš FTDI. Jie keliauja tiesiogiai į SN75176 mikroschemą kuri konvertuoja TTL į RS485. Išėjime turime A, B signalus bei GND kabelio šarvui. Tarp išėjimo bei mikroschemos dar tokia rezistorių krūvą bei tris ‘jumperius’ sudėjau. Vienas jungiklis bus naudojamas norint aktyvuoti 12Ohm varžą (ji jungiama tarp A ir B jei tai yra RS485 laido pradžia arba pabaiga). Likę du skirstikliai aktyvuos pull-up varžas A ir B kanalams (dar gerai neįsigilinau bet teoriškai jų reikia tik viename iš RS485 tinklo dalyviu, pataisykite ar papildykite jei klystu).

PCB pagaminau gana greitai, gręždamas skyles nulaužiau 0,8mm gręžtą ir likau nesulitavęs skirstikliu ir varžų. Nieko, man jų ir nereikia dabartiniam darbui, vėliau pabaigsiu. Rezultatas:

q0ha

Dar vienas brokas – neturėjau karpomo lizdo kampinio tad teko lituoti stačią. Dabar FTDI įsistato labai nepatogiai:

dudk

Jungiame ten kur reikia:

qwij

Paaiškinsiu kas čia pridaryta.. Vidurinis Arduino Mega yra tas kuris siunčia užklausa ir laukia atsakymo iš Arduino Uno (kairysis tas) bet dabar jie sujungti ne tiesiogiai o per mano pagaminta adapterį. Dabar šis adapteris mato visus šiuo tinklu tekančius duomenis. Realiai galėjau adapteri kabinti ir gale RS485 tinklo bet taip negariau nes Abu Arduino jau turi po 120Ohm varžas tad jie turi būti pradžia ir pabaiga.

Dabar jungiame savo FTDI adapteri į PC ir žiūrime ką turi:

qk03

O čia man dviprasmiškos naujienos.. Šaunu kad RS485 tinkle yra ir klausimas ir atsakymas bet kodėl Mega nemato to atsakymo? Kodas praktiškai tas pats, o Uno su gauta žinute susitvarko puikiai.. Gero vakaro vadinasi.


Veiksmai

Information

5 responses

26 10 2013
ecka333

Idomu o kodėl tu nenaudoji RS232, ar ne paprasciau butu? rs232 labiau paplites tarp megeju standartas.
Ir del DTR signalo idomu: ar atmega neturi tokio mechanizmo, kad gavus duomenis aktyvuotusi pertraukimas, tada nereiketu sito signalo.

26 10 2013
mindogas

RS485 naudoju ne šiaip sau prisigalvojęs – mano agregate bus vienas didelis tėtis ir labai daug apklausiamu/atsakančiu vaikučių. Visi įrenginiai vienas nuo kito nutolę bus taip pat per daugiau nei 5 metrai atstumo.. Taigi technologija pasirinkta iš poreikio. RS232 tuom netinka visiškai, o TCP/IP pernelyg brangu.
Dėl DTR tai nelabai supratau.. Šiaip RS485 visada reikalingas vienas PIN kuris pasako kaip dabar turi elgtis Serial konvertuojantis Chipas (mano atveju SN75176). Arduino atveju pas mane tai yra PIN2 o šiuo atveju automatiškai FTDI mikroschemos valdomas DTR signalas.

26 10 2013
Darius

Prijunk kokį LED prie Mega RX prievado, pažiūrėk ar mirgės kai atsakymas ateis. Geriausia tai būtų naudoti full duplex RS485, arba sudvigubinti esamus keitiklius ir naudoti atskirą kabelių porą RX, atskirą TX. Tada nereiktų kontroliuoti DTR signalą ir būtų galima naudotis tiesiog Arduino serial biblioteka.

26 10 2013
mindogas

Dekui uz patarimus. Beda jau bandau atkapstyti. Pasikurus garso plokstej skopa paaiskejo kad DTR signalo mega nesiuncia. Kitaip sakant jis buvo visada 5V nepilni, ty sokinejantys. Iskarto itariau Ethernet Shielda ir pasirodo taip ir buvo – deaktivavus Web serveri viskas veikia. Dabar ieskau ar Ethernet ar TinyWebServer aktyvuoja man nereikalinga ir Ethernet Shield neuztrumpinta INT funkcija.

Fiziskai HalfDuplex manau man daugiau nei gana kai pokalbius inicijuos vienintelis Master’is 🙂

26 10 2013
mindogas

Taigi mano klaida: Dar nenuskaitęs konfiguracijos failo iš SD kortelės pagal nesama informacija konfiguravai I/O portu paskirtis ir D2 porto kuris naudojamas kaip DTR nenustaciau kaip OUTPUT. Va tep va, dvi dienos zaidimo problemu ieskant 😀 Puponautas grynas..

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s




%d bloggers like this: