Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Honza 18. 01. 2016, 22:05:06

Název: Opět RS485 komunikace
Přispěvatel: 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
Kód: [Vybrat]
#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
Kód: [Vybrat]
#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.
Název: Re:Opět RS485 komunikace
Přispěvatel: hu 19. 01. 2016, 00:09:48
Kristovy rany produkuji elektrolyt.
Název: Re:Opět RS485 komunikace
Přispěvatel: Kit 19. 01. 2016, 00:22:26
Ledka zapojená přímo bez odporu? Ty to své Arduino vůbec nemáš rád a chceš ho co nejdříve zničit.
Název: Re:Opět RS485 komunikace
Přispěvatel: Honza 19. 01. 2016, 06:20:25
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.
Název: Re:Opět RS485 komunikace
Přispěvatel: pepa 19. 01. 2016, 06:49:44
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
Název: Re:Opět RS485 komunikace
Přispěvatel: Pavouk106 19. 01. 2016, 07:23:00
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...
Název: Re:Opět RS485 komunikace
Přispěvatel: ehmmm 19. 01. 2016, 09:31:54
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.)
Název: Re:Opět RS485 komunikace
Přispěvatel: Mirek 19. 01. 2016, 10:17:56
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...
Název: Re:Opět RS485 komunikace
Přispěvatel: Alladdin 19. 01. 2016, 10:34:32
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.

Takze tento kod nebude fungovat:
Kód: [Vybrat]
digitalWrite(SSerialTxControl, 1);  // Povolí odesílání na modulu RS485
Serial1.print("1");
digitalWrite(SSerialTxControl, 0);  // Zakáže odesílání na modulu RS485
Název: Re:Opět RS485 komunikace
Přispěvatel: Mirek 19. 01. 2016, 10:47:35
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.

Takze tento kod nebude fungovat:
Kód: [Vybrat]
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.
Název: Re:Opět RS485 komunikace
Přispěvatel: Honza 19. 01. 2016, 11:43:18
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.

Takze tento kod nebude fungovat:
Kód: [Vybrat]
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.
Název: Re:Opět RS485 komunikace
Přispěvatel: v 19. 01. 2016, 11:46:41
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.

Takze tento kod nebude fungovat:
Kód: [Vybrat]
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
Název: Re:Opět RS485 komunikace
Přispěvatel: v 19. 01. 2016, 11:51:36
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
Název: Re:Opět RS485 komunikace
Přispěvatel: Mirek 19. 01. 2016, 12:31:10
A ještě bych podotknul, že knihovna Serial v arduinu je asynchronni.

Takze tento kod nebude fungovat:
Kód: [Vybrat]
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í...

Název: Re:Opět RS485 komunikace
Přispěvatel: Mirek 19. 01. 2016, 13:02:30
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