Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Honza 18. 01. 2016, 22:05:06
-
Zdravím tak jsem tu zase s problémem :-)
Předchozí problémy s poškozenýma datama jsem vyřešil. Místo SW serial jsem použil HW.
Momentálně my komunikace nefunguje vůbec. Zde je zapojení které testuji. Je to pouze test komunikace proto je to tak triviální zapojení.
Takto to mám momentálně zapojené na stole. Doufám že se v tom vyznáte to schéma sem dělal na rychlo.
(http://s29.postimg.org/auondyi2v/RS485.jpg)
A tady je kod pro arduina.
MEGA
#define SSerialTxControl 3 // RS modul pin 3
long dotaz = 10000;
long pocet = 0;
void setup()
{
Serial.begin(9600);
Serial1.begin(2400);
pinMode(SSerialTxControl, OUTPUT);
}
void loop() {
if(millis() > dotaz){
pocet++;
dotaz = millis()+5000;
digitalWrite(SSerialTxControl, 1); // Povolí odesílání na modulu RS485
Serial1.print("1");
digitalWrite(SSerialTxControl, 0); // Zakáže odesílání na modulu RS485
Serial.print("Dotazuji se: ");
Serial.println(pocet);
}
}
NANO
#define SSerialTxControl 12
void setup()
{
Serial.begin(2400);
pinMode(SSerialTxControl, OUTPUT);
digitalWrite(SSerialTxControl, 0);
pinMode(8, OUTPUT);
digitalWrite(8, LOW);
}
void loop(){
if(Serial.available()){
delay(1000);
Serial.println("LED ON");
digitalWrite(8, HIGH);
delay(1000);
Serial.println("LED OFF");
digitalWrite(8, LOW);
delay(100);
Serial.end();
Serial.begin(2400);
}
}
Když připojím nano k PC přez USB a pomoci Serial Monitoru odesílám na nano data tak vše funguje. Pokud ale zapojím RS485 tak ani ťuk :-(
Vyzkoušel jsem už vše kde by moh být problém, jiná arduína, jiné moduly RS485, jiná nepájivá pole, jené vodiče pro sbernici, ale prostě nic. Podle toho co jsem našel by ale vše mělo fungova.
Za radu předem děkuji.
-
Kristovy rany produkuji elektrolyt.
-
Ledka zapojená přímo bez odporu? Ty to své Arduino vůbec nemáš rád a chceš ho co nejdříve zničit.
-
Ledka zapojená přímo bez odporu? Ty to své Arduino vůbec nemáš rád a chceš ho co nejdříve zničit.
S ohledem na to že se jedná o klon za cca 20kc tak je mi to fakt jedno. Mám jich bednu od bot.
-
Ledka zapojená přímo bez odporu? Ty to své Arduino vůbec nemáš rád a chceš ho co nejdříve zničit.
S ohledem na to že se jedná o klon za cca 20kc tak je mi to fakt jedno. Mám jich bednu od bot.
Tak tam dej aspon modrou diodu
-
Moje Nano klony za dvacku dávají místo 5V 4.6V a už mě to stálu kýbl nervů... Do "produkce" nasadím buď lepší klony nebo si 5V přimotám z jinýho zdroje než klonu Arduina...
-
Osciloskop mezi Arduino a prevodnik, osciloskop na sbernici... Jde aspon zmerit nejake napeti na sbernici v klidu? Jde zkusit vysilat trvale jednicku nebo nulu a zmerit napeti na sbernici? Jde pripojit uplne jiny prevodnik RS485/RS232 do PC a videt, jestli PC neco chyta? Jses vubec schopnej si nejak dokazat, jestli je chyba ve vysilani nebo v prijmu? Nejde to vzit nekam do skoly, kde maji osciloskop? (Nezkousej prosim takove ty osciloskopy Hantek/Voltcraft do USB za 2000 Kc, pokud s nimi nemas praxi. S nimi neco zachytit neni uplna samozrejmost.)
-
Zdravím tak jsem tu zase s problémem :-)
Předchozí problémy s poškozenýma datama jsem vyřešil. Místo SW serial jsem použil HW.
Momentálně my komunikace nefunguje vůbec. Zde je zapojení které testuji. Je to pouze test komunikace proto je to tak triviální zapojení.
....
Když připojím nano k PC přez USB a pomoci Serial Monitoru odesílám na nano data tak vše funguje. Pokud ale zapojím RS485 tak ani ťuk :-(
Vyzkoušel jsem už vše kde by moh být problém, jiná arduína, jiné moduly RS485, jiná nepájivá pole, jené vodiče pro sbernici, ale prostě nic. Podle toho co jsem našel by ale vše mělo fungova.
Za radu předem děkuji.
A co ten kód přesně má dělat?
Nano má 485 přepnutou trvale na příjem a v intervalu jedné vteřiny na ni posílá (Tx!) nějaký text a bliká přitom LED. Nic nečte a mezitím celý UART HW zresetuje...
Mega jednou za 5 vteřin přepne linku na vysílání a pošle "1". Potom ji přepne zpět na příjem.
Opravdu jsem tvůj záměr nepochopil. A ani nevím jak hodláš posoudit, že ti to funguje...
-
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.
Takze tento kod nebude fungovat:
digitalWrite(SSerialTxControl, 1); // Povolí odesílání na modulu RS485
Serial1.print("1");
digitalWrite(SSerialTxControl, 0); // Zakáže odesílání na modulu RS485
-
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.
Takze tento kod nebude fungovat:
digitalWrite(SSerialTxControl, 1); // Povolí odesílání na modulu RS485
Serial1.print("1");
digitalWrite(SSerialTxControl, 0); // Zakáže odesílání na modulu RS485
Přesně tak.
-
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.
Takze tento kod nebude fungovat:
digitalWrite(SSerialTxControl, 1); // Povolí odesílání na modulu RS485
Serial1.print("1");
digitalWrite(SSerialTxControl, 0); // Zakáže odesílání na modulu RS485
To sice je ale já také pomocí tohoto kódu neovládám Serial v arduinu.
Toto přepíná MAX485 mezi odesanim a primanim.
Pokud se pletu rád si to nechám vysvětlit. Popřípadě pokud je tu někdo kdo tomu opravdu rozumí moh by sem dát kód pro komunikaci přes RS485 (MAX485)? Potřebuju z X (slave) arduin pouze odesílat string na arduino Y (MASTER)
PS: Pokud mi nechcete poradit zdrzte se komentářů. To že dělám něco špatně vím ale nevím co proto sem tady. Děkuji.
-
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.
Takze tento kod nebude fungovat:
digitalWrite(SSerialTxControl, 1); // Povolí odesílání na modulu RS485
Serial1.print("1");
digitalWrite(SSerialTxControl, 0); // Zakáže odesílání na modulu RS485
To sice je ale já také pomocí tohoto kódu neovládám Serial v arduinu.
Toto přepíná MAX485 mezi odesanim a primanim.
Pokud se pletu rád si to nechám vysvětlit. Popřípadě pokud je tu někdo kdo tomu opravdu rozumí moh by sem dát kód pro komunikaci přes RS485 (MAX485)? Potřebuju z X (slave) arduin pouze odesílat string na arduino Y (MASTER)
PS: Pokud mi nechcete poradit zdrzte se komentářů. To že dělám něco špatně vím ale nevím co proto sem tady. Děkuji.
přepnout do vysílání, poslat data, _počkat až se odešlou_, přepnout do příjmu
-
Ledka zapojená přímo bez odporu? Ty to své Arduino vůbec nemáš rád a chceš ho co nejdříve zničit.
S ohledem na to že se jedná o klon za cca 20kc tak je mi to fakt jedno. Mám jich bednu od bot.
zničené arduino asi moc komunikovat nebude, co? zamyslete se nad sebou
-
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.
Takze tento kod nebude fungovat:
digitalWrite(SSerialTxControl, 1); // Povolí odesílání na modulu RS485
Serial1.print("1");
digitalWrite(SSerialTxControl, 0); // Zakáže odesílání na modulu RS485
To sice je ale já také pomocí tohoto kódu neovládám Serial v arduinu.
Toto přepíná MAX485 mezi odesanim a primanim.
Pokud se pletu rád si to nechám vysvětlit. Popřípadě pokud je tu někdo kdo tomu opravdu rozumí moh by sem dát kód pro komunikaci přes RS485 (MAX485)? Potřebuju z X (slave) arduin pouze odesílat string na arduino Y (MASTER)
PS: Pokud mi nechcete poradit zdrzte se komentářů. To že dělám něco špatně vím ale nevím co proto sem tady. Děkuji.
Prostě si počkej až bude celý buffer odvysílaný a potom přepni směr MAX485 na příjem.
Jak na to? Třeba kontrolou toho, jestli je vysílací buffer už prázdný + počkat čas ekvivalentní 1 znaku.
https://www.arduino.cc/en/Serial/Flush
Čti si dokumentaci na Arduino.cc, je tam spousta užitečných věcí...
-
A další užitečné informace najdeš třeba tady:
http://www.gammon.com.au/forum/?id=11428
https://arduino-info.wikispaces.com/RS485-Modules
http://pskillenrules.blogspot.cz/2009/08/arduino-and-rs485.html