Soros port bug?

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
szvarhegyi
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2012. szeptember 10. hétfő, 6:00

Soros port bug?

Hozzászólás Szerző: szvarhegyi »

Sziasztok.
Bemásolom az alábbi programot és alatta felteszem a jelenséget és a kérdésemet. Próbáltam egy nagyobb programot most lebutítani lehet maradt benne 1-2 felesleges dolog.

Kód: Egész kijelölése


int downPin = 8; //Redony lefele
int upPin = 10; //Redony felfele
int dir = 0; //0 all - 1 fel - 2 le
int menu = 0;

double menetIdo = 25; //menetido mp-ben
double menetIdoMillis = menetIdo * 1000; //menetido millis-be

long startTime = 0; //mikor inditottuk a motort
long endTime = 0; //mikor kell leallitani a motort
long diffTime = 0; //inditas utan mennyi ido telt el a leallitasig

boolean motorState = false;
boolean debug = false;

void setup() {

  Serial.begin(9600);
  
  //PIN-ek beallitasa
  pinMode(downPin, OUTPUT);
  pinMode(upPin, OUTPUT);
  
  Serial.println("Redonyvezerles V0.2");
  
  //startMotor(upPin, 5000);
  showFirstMenu();
  //showMessage("Motor all");
  
}

void loop() {
  
  checkMotor();
  
  if(Serial.available() > 0) {
    
    menu = Serial.read(); //mit irt be a felhasznalo
    
    if(menu == 49) { //ha egyet irt be
      startMotor(upPin, menetIdoMillis);
    } else if(menu == 50) { //ha kettot ir be
      startMotor(upPin, menetIdoMillis);
    } else if(menu == 51) { //ha harmat ir be
      startMotor(downPin, menetIdoMillis);
    } else if(menu == 57) { //ha kilencet ir be
      stopMotor();
    }
    
  }
  
}

void checkMotor() {
  if(motorState == true) {
    if(millis() >= endTime) {
      stopMotor(); 
    }
  } 
}

void startMotor(int pin, double time) {
  if(motorState == false) {
    setDir(pin); //Irany beallitasa a valtozoba
    motorState = true;
    startTime = millis();
    endTime = startTime + time;
    digitalWrite(pin, HIGH);
    if(debug == true) {
     Serial.println("Motor Start"); 
    } else {
      showMessage("| A motor elindult"); 
      showMessage("| 9. STOP");
    }
  } 
  else {
    stopMotor();
    startMotor(pin, time);
  }
}

void stopMotor() {
  if(dir == 2) {
    digitalWrite(downPin, LOW);
    dir = 0;
    
    if(debug == true) {
     Serial.println("downPIN OFF"); 
    }
    
  } 
  else if(dir == 1) {
    digitalWrite(upPin, LOW); 
    dir = 0;
    
    if(debug == true) {
     Serial.println("upPIN OFF"); 
    }
  }
  motorState = false;
  if(debug == true) {
     Serial.println("motorState false"); 
    }
  delay(1000);
  if(debug == true) {
     Serial.println("Motor OFF delay 1000"); 
    } else {
      showMessage("| A motor kikapcsolva");
      showFirstMenu(); 
    }
}

void setDir(int pin) {
  if(pin == downPin) {
    dir = 2;
  } 
  else if(pin == upPin) {
    dir = 1;
  } 
}

void showFirstMenu() {
  Serial.println("");
  Serial.println("*-------------------------------*");
  Serial.println("| 1. Alaphelyzetbe              |");
  Serial.println("| 2. FEL                        |");
  Serial.println("| 3. LE                         |");
  Serial.println("*-------------------------------*");
}

void showMessage(String message) {
  Serial.println("");
  Serial.println("*-------------------------------*");
    Serial.println(message); 
  Serial.println("*-------------------------------*");
}


Jelenség:

Kiadom a 3-as menüpontot redőny teljesen lehúzódik. Ezután elindítom a kettessel felfele és el is indul majd megállítom a 9-el. Lehet még 1-2 lépést tudok csinálni de utána a soros monitor teljesen megáll nem tudok új utasítást kiadni újraindítom az arduino-t nem történik semmi az arduino ezt az üzenetet küldi vissza nekem:

A COM8 soros port haszálatban van. A programból kilépés után próbálja újra.

Windows alatt bármit tehetek csak egy restart (PC) segít. Linux alatt elég az arduino-t resetelnem és újra kapok menüt és újra irányíthatom. Még egy jelenség linux alatt, hogy a soros monitoron már nem kapok vissza semmilyen üzenetet de a bevitt adatot még 1-2 utasításig észleli arduino és cselekszik is.

Ez a hiba csak akkor jött elő amikor belevettem a soros porton való irányíthatóságot. Előtte kapcsolóval teljesen jól működött illetve időzítve is (egyszerre több redőnyt is tudok úgy mozgatni teljesen jól). Most egy C++ program MySQL-ből fogja majd adni az utasításokat az arduino-nak így bármilyen mobil tablet segítségével könnyedén tudom irányítani (jQuery Mobile szolgáltatja a megjelenítést). A NAS szerver egy linux szerver szóval ha csak linuxos sikerül megoldani nem gond a NAS éjjel-nappal megy és jelenleg az arduino onnan van működtetve.

Amit még tudni kell:
8 PIN -> RELÉ
10 PIN -> RELÉ
GND <- a két reléből közösítve
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Win valamiért megfogja.
Javaslat a szokásos: FTDI driver eltávolít a ftclean nevű programmal. Ez a drivert is törli, szóval a sima drivertörlés NEM elég!
Utána Arduino összedug. Örül.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Sok else if else if helyett én valahogy átszabnám:
Select/Case környékén lesnék körbe.
Avatar
szvarhegyi
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2012. szeptember 10. hétfő, 6:00

Hozzászólás Szerző: szvarhegyi »

Következő program is megáll egy idő után (3-4 váltás után)

Kód: Egész kijelölése

void loop() {
digitalWrite(downPin, LOW);
digitalWrite(upPin, HIGH);
delay(menetIdo); //menetido 22000
digitalWrite(upPin, LOW);
digitalWrite(downPin, LOW);
delay(menetIdo);
}
A HIGH előtt azért van a másik pin-re LOW, hogy a motor ne kapjon egyszerre mint a két irányba feszültséget. Ez most egy lebutított változat. A LOW után raktam 2000-res delay-t hogy tuti ne kapjon áramot az irány.

Driver-t próbáltam cserélni/tisztítani linux és windows alatt is nem segített.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Valószínű táp gondod van.

A motort külön tápról járasd.

És rakjál 100n kerámia és 10u tantál kondikat a tápfesz lábakra.
Avatar
szvarhegyi
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2012. szeptember 10. hétfő, 6:00

Hozzászólás Szerző: szvarhegyi »

A motornak külön tápja van ez egy 230V-os redőnymotor. Az arduino csak a relét vezérli. Most egy olyan jelenségre lettem figyelmes linux alatt, hogy elindítom a motort egyik irányba majd másik irányba és 1-2 irányváltás vagy elég csak többször megállítani és újraelindítani ugyan abba az irányba akkor az arduino átkerül egy másik portra.

Alapból a /dev/ttyUSB0-n érem el majd átrakja magát a /dev/ttyUSB1-re. Ha átállítom akkor jó eséllyel ismét tudom kezelni.

Jelenleg a c++ mind a kettőre kiküldi így most átmenetileg működik mindig csak nem érzem, hogy ez lenne a jó megoldás.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A motor áramkörének tápszűrése nem jó, és RF jelek keletkeznek. Pl. szénkefe el van törve.
De lehet nagyáramú vezeték mellett Arduino vezetéke és az indukált tüske teszi tönkre a kapcsolatot. Az USB átugrik másik portra : tipikusan ez az oka.
Én nem SW hibát keresnék....

Tipp: kösd ki a motort és csak LEDet tegyél a helyére. Ekkor nem lesz hiba...


A vezérlését a motornak relével vagy tranzisztorral végzed? A két rendszer GNDje közös?
Avatar
szvarhegyi
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2012. szeptember 10. hétfő, 6:00

Hozzászólás Szerző: szvarhegyi »

Lefotózom, mikor hazaérek a rendszert de megpróbálom leírni a rendszert:

Arduino 8-as és 10-es portja a fel/le pin.

A két relé az ardiono-tól 10-cm-re van. A gnd közösítve van és úgy megy rá az arduino-ra. A relébe belemegy a betáp és a redőny egyik irány vezetéke, ha kapcsolom az egyik PIN-t akkor kapcsol a relé is.

A relé OMRON 5V-os. Pontos típust később tudok mondani.
Robert írta:A motor áramkörének tápszűrése nem jó, és RF jelek keletkeznek. Pl. szénkefe el van törve.
De lehet nagyáramú vezeték mellett Arduino vezetéke és az indukált tüske teszi tönkre a kapcsolatot. Az USB átugrik másik portra : tipikusan ez az oka.
Én nem SW hibát keresnék....

Tipp: kösd ki a motort és csak LEDet tegyél a helyére. Ekkor nem lesz hiba...


A vezérlését a motornak relével vagy tranzisztorral végzed? A két rendszer GNDje közös?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Földhurokra gyanakszok!
A táp és az USB test vezetékei között.

Elég rejtélyes hibákat szokott okozni.
És nehéz megtalálni, javítani.
8)
Avatar
Csoki
DrótVégénSzéndarab
Hozzászólások: 44
Csatlakozott: 2012. június 25. hétfő, 6:00

Re: Soros port bug?

Hozzászólás Szerző: Csoki »

Egy kis segítséget szeretnék kérni.
Elkészítettem az első arduino áramkörömet.

De van vele egy kis gondom.

RX/TX -en keresztül töltöm fel a programot egy PL2303 -es USB / Soros illesztőn keresztül.
Ezen az illesztőn keresztül kommunikál a géppel az áramköröm.

http://imall.iteadstudio.com/im120525011.html
A testkábelek össze vannak kötve, értelemszerűen RX/TX bekötve, de az USB illesztő tápfeszét nem kötöttem össze az arduinoval.

A feltöltés működik (manuális resettel)
A soros adatkommunikáció működik.
DE!
Viszonylag hamar megőrül az USB port a gépen. Az átvitt adat tele lesz hibával, és hibásan jelenik meg az átvitt adat a soros monitorban.
Ha tovább rajtahagyom az usb portot a számítógépen, akkor teljesen fals adatok mennek át a gépbe.
Új hardvert talál... kékhalál... újraindul.
A kommunikációt mindenféle sebességen kipróbáltam már. mind ugyanezt csinálja.
Mi lehet a gond?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Soros port bug?

Hozzászólás Szerző: Robert »

USB-Soros igaz TTL kimenetű?
Manual reset helyett DTR es RESET lab koze: 100nF keramiakondi.

AVR igaz külső kvarcról jár?
AVR-USB esetén 9600 ill 19200 bps a stabil atvitel hatara. E felett hibazik.

Rx és Tx labakon van meg valami?
PC oldali driverben beallitas: buffermeret? INT?
Az Arduino belső terminált használod?
Avatar
Csoki
DrótVégénSzéndarab
Hozzászólások: 44
Csatlakozott: 2012. június 25. hétfő, 6:00

Re: Soros port bug?

Hozzászólás Szerző: Csoki »

USB-Soros igaz TTL kimenetű? --------- sajnos nem tudom biztosan, de szerintem ige.
Manual reset helyett DTR es RESET lab koze: 100nF keramiakondi. ------ DTR láb nincs kivezetve (csak 4 kivezetéses : RX, TX, GND,VCC), és a chip miniatűr kivezetését nem tudom forrasztani.
AVR igaz külső kvarcról jár? ---- igen
AVR-USB esetén 9600 ill 19200 bps a stabil atvitel hatara. E felett hibazik. ---- én csak 9600 és fölötti sebességet próbáltam. De 9600 -on is nagyon hamar 30 - 50 mp elkezd hibázni, és utána teljesen szétesik a kommunikáció.
Rx és Tx labakon van meg valami? ---- semmi. Próbáltam soros 1K -is betenni a chip és a PL2302 lábai közé, de semmi sem változik
PC oldali driverben beallitas: buffermeret? INT? ---- 9600N81, Átvitelvezérlés nincs, FIFO puffer használata, Vételi puffer nagy (14 - a max érték), Átviteli puffer nagy (14 - a max érték), COM6
Az Arduino belső terminált használod? ---- Igen az arduino 1.0.2 és 1.0.3 belső terminál programjával monitorozok
Válasz küldése