Opět RS485 komunikace

Honza

Opět RS485 komunikace
« kdy: 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.


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.


hu

Re:Opět RS485 komunikace
« Odpověď #1 kdy: 19. 01. 2016, 00:09:48 »
Kristovy rany produkuji elektrolyt.

Kit

Re:Opět RS485 komunikace
« Odpověď #2 kdy: 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.

Honza

Re:Opět RS485 komunikace
« Odpověď #3 kdy: 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.

pepa

Re:Opět RS485 komunikace
« Odpověď #4 kdy: 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


Pavouk106

  • *****
  • 2 400
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Opět RS485 komunikace
« Odpověď #5 kdy: 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...

ehmmm

Re:Opět RS485 komunikace
« Odpověď #6 kdy: 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.)

Mirek

Re:Opět RS485 komunikace
« Odpověď #7 kdy: 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...

Alladdin

Re:Opět RS485 komunikace
« Odpověď #8 kdy: 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

Mirek

Re:Opět RS485 komunikace
« Odpověď #9 kdy: 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.

Honza

Re:Opět RS485 komunikace
« Odpověď #10 kdy: 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.

v

Re:Opět RS485 komunikace
« Odpověď #11 kdy: 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

v

Re:Opět RS485 komunikace
« Odpověď #12 kdy: 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

Mirek

Re:Opět RS485 komunikace
« Odpověď #13 kdy: 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í...


Mirek