Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

RS485 - problem s komunikací
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další)
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
BigSandy



Založen: Jul 28, 2015
Příspěvky: 793

PříspěvekZaslal: ne duben 01 2018, 3:00    Předmět: RS485 - problem s komunikací Citovat

Zdravím tu všechný,

Muže mi někdo říct, co dělám špatně?

kód:

void loop() {
   {
   inCount = 0;
 
 while (Serial.available() > 0)
 {
   inString[inCount] = Serial.read();
   delay(10); 
   if (inString[inCount] == '\0') break;
   inCount++;
 }
 
 inString[inCount] = '\0';
 
 if (inCount > 0) {
    String x = inString;
    x.trim();
   
// ------------------------------------------------
    if(x == "test")
    {
    digitalWrite(2, HIGH); // nastavi pin 2 na 1 - zapis
    for (int i=-0; i<8;) 
    {
    Serial.print("Rele ");
    Serial.println(i);
    mcp1.digitalWrite(i,LOW);
    delay(500);
    mcp1.digitalWrite(i,HIGH);
    i++;
    }
    digitalWrite(2, LOW); // nastavi pin 2 na 0 - čtení
    }

    // ------------------------------------------------
    if(x == "A1_rele0")
    {
    digitalWrite(2, HIGH); // nastavi pin 2 na 1 - zapis
    delay(500);
    Serial.println("Rele 0 hotovo ");
    digitalWrite(2, LOW); // nastavi pin 2 na 0 - čtení
   // mcp1.digitalWrite(0,LOW);
   // delay(500);
   // mcp1.digitalWrite(0,HIGH);   
    }
    // ------------------------------------------------
    if(x == "info")
    { 
    digitalWrite(2, HIGH); // nastavi pin 2 na 1 - zapis
    delay(500);
    Serial.println("A1_stav expanderu  " + info()); 
    digitalWrite(2, LOW); // nastavi pin 2 na 0 - čtení   
    }
   
}
}
}

 String info()
 {
  String a = String(mcp1.digitalRead( 8))+ String(mcp1.digitalRead( 9))
           + String(mcp1.digitalRead(10))+ String(mcp1.digitalRead(11))
           + String(mcp1.digitalRead(12))+ String(mcp1.digitalRead(13))
           + String(mcp1.digitalRead(14))+ String(mcp1.digitalRead(15));
  return a;
 }


Mam to na Arduino Pro Mini a tlačím to tam přes CP2102.
Normálně přes usb převodník té CP2102 to funguj.
Když však odpojím CP2102 a pustím to přes RS485 modul tak to vyzera takto.

citace:

Rele 0
Rele 1
Rele 2
Rele 3
Rele 4
Rele 5
Rele 6
Rele 7
⸮⸮Rele 0
Rele 1
Rele 2
Rele 3
Rele 4
Rele 5
Rele 6
Rele 7
Rele 0
Rele 1
Rele 2
Rele 3
Rele 4
Rele 5
Rele 6
Rele 7
⸮⸮


První býl odeslan příkaz test a ok
Pak přikaz info a vratílo to ⸮
Pak příkaz A1_rele0 a vratilo to ⸮
Pak jsem znovu zkoušel 2 X test a ok,
Pak info a A1_rele0 a zas ⸮⸮
Co je špatně?
Proč na dotaz test, třeba 100 X to funguje?
Na napájecích pinech té 485 mam už 1000 uF kondík a nepomohlo.

Už když ve void setup přidám.

kód:

  digitalWrite(2, HIGH); // nastavi pin 2 na 1 - zapis
  StavPinu = info();
  Serial.println("A1_stav expanderu  " + StavPinu);
  digitalWrite(2, LOW); // nastavi pin 2 na 0 - čtení

tak to zpátky pošle ⸮

Jsem zkoušel v A1_rele0 odstranit ty mezery.
Serial.print("Rele_0_hotovo");
Furt vrací ⸮
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3284

PříspěvekZaslal: ne duben 01 2018, 6:23    Předmět: Citovat

Me se nezda ten zapis s FOR -0;
Ale treba jen neznam takto zkraceny zapis bez tretiho parametru s narustem promenne po vykonane jedne smycce.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
BigSandy



Založen: Jul 28, 2015
Příspěvky: 793

PříspěvekZaslal: ne duben 01 2018, 6:30    Předmět: Citovat

Ale to je jediné, co funguje Very Happy

V if(x == "test") to je ok

Normálně to vypíše Rele 0 až Rele 7


Naposledy upravil BigSandy dne ne duben 01 2018, 6:34, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3284

PříspěvekZaslal: ne duben 01 2018, 6:33    Předmět: Citovat

Mam vyzkousene, ze je dulezite casovani.
Take je nutne vyckat s prepnutim RS485 brouka, nez se vsechna data prenesou.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
BigSandy



Založen: Jul 28, 2015
Příspěvky: 793

PříspěvekZaslal: ne duben 01 2018, 6:38    Předmět: Citovat

Proto tam mam delay(500);
kód:

digitalWrite(2, HIGH); // nastavi pin 2 na 1 - zapis
delay(500);
Serial.println("A1_stav expanderu  " + info());


Jak na to časovaní?
Divné je že to v té smyčce funguje spolehlivě.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3284

PříspěvekZaslal: ne duben 01 2018, 6:42    Předmět: Citovat

Zkus dat nejakou cekacku pred prepnutim brouka do LOW.
V testu ji mas, ale pak uz ne
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3284

PříspěvekZaslal: ne duben 01 2018, 6:46    Předmět: Citovat

To je, ale pred vlastnim vysilani. Ale uz ne po nem. A tak se to vysilani v jeho prubehu prepnutim do LOW uzamkne.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lesana87



Založen: Sep 20, 2014
Příspěvky: 3328

PříspěvekZaslal: ne duben 01 2018, 7:10    Předmět: Citovat

Nedávej tam ty delaye, místo toho dej před přepnutí na příjem Serial.flush().
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
BigSandy



Založen: Jul 28, 2015
Příspěvky: 793

PříspěvekZaslal: ne duben 01 2018, 7:20    Předmět: Citovat

Tak Cowley měl pravdu. Very Happy Děkují.

kód:

if(x == "info")
    { 
    digitalWrite(2, HIGH); // nastavi pin 2 na 1 - zapis
    delay(100);
    Serial.print("A1_stav_expanderu" + info()); 
    delay(100);
    digitalWrite(2, LOW); // nastavi pin 2 na 0 - čtení   
    }


lesana87 napsal(a):
Nedávej tam ty delaye, místo toho dej před přepnutí na příjem Serial.flush().

A po přepnutí na vysilaní?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lesana87



Založen: Sep 20, 2014
Příspěvky: 3328

PříspěvekZaslal: ne duben 01 2018, 7:24    Předmět: Citovat

Po přepnutí na vysílání vysílej.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
BigSandy



Založen: Jul 28, 2015
Příspěvky: 793

PříspěvekZaslal: ne duben 01 2018, 7:35    Předmět: Citovat

Funguje - dik.
kód:

 if(x == "info")
    { 
    digitalWrite(2, HIGH); // nastavi pin 2 na 1 - zapis     
    Serial.print("A1_stav_expanderu" + info()); 
    Serial.flush();
    digitalWrite(2, LOW); // nastavi pin 2 na 0 - čtení   
    }
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3284

PříspěvekZaslal: ne duben 01 2018, 13:17    Předmět: Citovat

Stalo se mi, ze pri aktivni knihovne Softwareserial mi funkce Serial.flush nefungovala, proto nezbylo nez pouzit vhodne spocteny prikaz delaymicroseconds Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Le_Ze



Založen: Jul 24, 2014
Příspěvky: 655
Bydliště: Ano, mam

PříspěvekZaslal: pá srpen 03 2018, 19:04    Předmět: Citovat

Zdravím, dotaz.
Doma mam natažený telefonní kabl 6 x 0,22 přes všechny místnosti a v každém pokojí na něj připojený 485 Modul a arduino.
Celkem jích je 8 a funguje to.

Už 2 dny si hrají.
2 X RS485 modul propojené a na ních arduina a normálně spolu kecaj.
Kabl co spojuje ty moduly jsem uprostřed rozstřihl a dal tam svorkovnicí a furt kecaj.
Do svorkovnice jsem přidal USB to RS485.
V notasu přes ser.monitor vidím jak spolu kecaj.
Když však do té svorkovnice připojím další modul, cela komunikace spadne.
Prostě v jednom rozpojeném mistě jsou dva RS485 modul.
Je to špatně, nebo by to mělo fungovat?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lesana87



Založen: Sep 20, 2014
Příspěvky: 3328

PříspěvekZaslal: pá srpen 03 2018, 19:12    Předmět: Citovat

8 modulů na jednom kabelu funguje a tři nefungují?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Le_Ze



Založen: Jul 24, 2014
Příspěvky: 655
Bydliště: Ano, mam

PříspěvekZaslal: pá srpen 03 2018, 19:23    Předmět: Citovat

Ano, ale nikde nemam zapojeno v jednom mistě dvě 485.
Tak mně napadlo, jestli v tom nebude problém.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další) Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.17 sekund