Loading...
  Show Posts
Pages: 1 2 [3] 4 5 6
31  International / Software / Re: controllo alimentatore agilent via seriale on: January 17, 2013, 10:48:29 am
collegando il pc con l'alimentatore problemi non ce ne sono, perchè usando matlab mi risponde alle query. così al comando *IDN? risponde inviando una stringa con l' "identità" dello strumento: produttore e versione firmware.

il println è "necessario" perchè essendo il linguaggio per comandare lo strumento scpi devo mandare stringhe tutte con NL alla fine
32  International / Software / Re: controllo alimentatore agilent via seriale on: January 17, 2013, 10:08:52 am
ho scritto questo sketch giusto per vedere se lo strumento mi manda qualcosa:
Code:
#define baudRate 1200

boolean query = false;
String idn = "";
void setup(){
  pinMode(2,OUTPUT); 
  Serial.begin(baudRate);
  delay(10);
  Serial.println("*RST");
  delay(10);
  Serial.println("*CLS");
  delay(10);
  Serial.println("SYSTEM:REMOTE");
  delay(10);
  Serial.println("*IDN?");
  idn = Serial.readStringUntil('\n');
  idn.trim();
}

void loop(){
  if(idn != "" ){
    digitalWrite(2,HIGH);
  }
}
il led dovrebbe accendersi se idn è diverso dalla stringa vuota, dunque upload il codice, stacco la usb, attacco una pila da 9V alla vin, lo     strumento va in remoto, ma il led che si dovrebbe accendere, indovinate, rimane inesorabilmente spento
33  International / Software / Re: controllo alimentatore agilent via seriale on: January 17, 2013, 09:06:24 am
supposti giusto smiley

ma se il collegamento lo effetto sulla seriale hardware, posso rimanere collegato con la usb ad arduino?

e soprattutto, una volta che mando la query, come leggo la risposta?
34  International / Software / Re: controllo alimentatore agilent via seriale on: January 17, 2013, 05:16:43 am
fatto tutto, collegato il dsr a uno logico (da -6 a -15 per rs232), baud 1200, ma come diceva un mio amico "cristo si è fermato al buffer". non leggo la risposta, o meglio, lo strumento tiene per sè la risposta nell'output buffer ma non la invia sulla seriale
35  International / Software / Re: controllo alimentatore agilent via seriale on: January 16, 2013, 04:53:11 am
l'errore che mi segnala l'alimentatore dice che sovrascrivo il buffer di output, che nel frattempo non si è liberato(non invia i dati ad arduino);
duqneu il problema è che l'output buffer dello strumento non si svuota, non invia dati sulla porta.

potrebbe essere un problema dello sketch che ho scritto?
36  International / Software / Re: controllo alimentatore agilent via seriale on: January 16, 2013, 03:52:48 am
sulla user's guide dello strumento ho trovato questo paragrafo
Quote
DTR/DSR Handshake Protocol
The power supply is configured as a DTE (Data Terminal Equipment)
device and uses the DTR (Data Terminal Ready) and DSR (Data Set Ready)
lines of the RS-232 interface to handshake. The power supply uses the DTR
line to send a hold-off signal. The DTR line must be TRUE before the power
supply will accept data from the interface. When the power supply sets the
DTR line FALSE, the data must cease within 10 characters.
To disable the DTR/DSR handshake, do not connect the DTR line and tie the
DSR line to logic TRUE. If you disable the DTR/DSR handshake, also select a
slower baud rate to ensure that the data is transmitted correctly.
The power supply sets the DTR line FALSE in the following cases:
1 When the power supply’s input buffer is full (when approximately 100
characters have been received), it sets the DTR line FALSE (pin 4 on the
RS-232 connector).

cosa significa? che devo lasciare DTR flottante e DSR a -9V?
37  International / Software / Re: controllo alimentatore agilent via seriale on: January 16, 2013, 03:27:18 am
e3631a, le propve che sto facendo con questo alimentatore mi serviranno per poi controllare in remoto un tdr.

cmq il db9 sull alimentatore è maschio, dunque ho provato diverse soluzioni:
1. collegare db9 maschio al max232, con 1-4-6 & 7-8 prima cortocircuitati e poi flottanti, collegamento all'alimentatore tramite cavo rs232 femmina-femmina dell'hp, ma non funziona.
2.collegare db9 femmina al max232, con 1-4-6 & 7-8 prima cortocircuitati e poi flottanti, direttamente all'alimentatore, ma non funziona.

qualcuno ne sa venire a capo?
38  International / Software / Re: controllo alimentatore agilent via seriale on: January 15, 2013, 11:58:25 am
cosa intendi per connettore seriale del max232?
39  International / Software / Re: controllo alimentatore agilent via seriale on: January 15, 2013, 11:26:19 am
con il max232 e l'adattatore usb-rs232.

le istruzioni che non abbiano un ritorno funzionano: sono le query quelle che mi danno l'errore. l'errore 410 che mi da lo strumento dice che praticamente sovrascrivo il buffer di output e dunque vado in errore. quindi penso che lo strumento non svuoti automaticamente il buffer di output come fa normalmente, ma nè io nè il professore abbiamo capito perchè.
abbiamo pensato che fosse perchè il cavo utilizzato avesse i pin 1-4-6 cortocircuitati invece che flottanti, ma anche provando il contrario non funziona
40  International / Software / Re: controllo alimentatore agilent via seriale on: January 15, 2013, 10:31:11 am
ho provato sullo stesso pc, collegando ad arduino la serialeUSB e la rs232, visualizzando i due monitor seriali corrispondenti e lo sketch funziona. anche l'alimentatore, inviando gli stessi comandi con matlab funziona
41  International / Software / controllo alimentatore agilent via seriale on: January 15, 2013, 09:59:38 am
ciao a tutti,
vorrei controllare in maniera remota un alimentatore stabilizzato agilent, che supporta il controllo tramite SCPI,
ho collegato lo strumento via rs232 ad arduino e scritto questo codice:
Code:
#include <SoftwareSerial.h>

SoftwareSerial alimentatore(6, 7); // RX, TX

void setup() 
{
  pinMode(2,OUTPUT);
  pinMode(13,OUTPUT);
  // Open serial communications and wait for port to open:
  Serial.begin(9600);

  Serial.println("buongiorno alimentatore");

  // set the data rate for the SoftwareSerial port
  alimentatore.begin(9600);
  digitalWrite(2,HIGH);
}

void loop() // run over and over
{
  if (alimentatore.available()){
    Serial.write(alimentatore.read());
    digitalWrite(13,LOW);
    digitalWrite(2,HIGH);
  }
  if (Serial.available()){
    alimentatore.write(Serial.read());
    digitalWrite(13,HIGH);
    digitalWrite(2,LOW);
  }
}
riscontro il seguente problema: inviando istruzioni dal monitor seriale tutto funziona normalmente, finchè non uso una qualsiasi query.
in teoria ad esempio, se invio l'istruzione "*IDN?" lo strumento mi dovrebbe ritornare una stringa contenente le informazioni sullo strumento, ma sul monitor seriale non mi ritorna nulla, e in generale non mi viene inviato nulla.
infatti anche il led che ho messo di 'debug' per vedere se cmq ci sono dati sulla softserial , non si accende.
mi sapete aiutare?
42  International / Software / Re: arduino - rs232 on: January 15, 2013, 05:19:48 am
il problema è che con questo tipo di codice sul monitor seriale continua a stampare "inserire il valore di a" anche se io non ho inserito nessun valore, del tipo:

Code:
inserire il valore di a
inserire il valore di a
inserire il valore di a
.
.
.
etc

io vorrei che succeda questo:
serial dice:inserire valore di a;
niente finchè non inserisco un valore;
inserisco un valore;
serial legge valore;
serial dice: il valore è "qualsiasi";

e adesso riparte il loop;
43  International / Software / Re: arduino - rs232 on: January 15, 2013, 04:13:06 am
una roba del genere?
Code:
void loop(){
Serial.println("inserire valore di a");
Serial.readStringUntil('\n');
Serial.println(a);
44  International / Software / Re: arduino - rs232 on: January 14, 2013, 11:49:07 am
finalmente sono risucito a collegare tutti i componenti e a far funzionare il MAX232.
ora però mi sono abbastanza impu*****ato sul codice:
Code:
#define RX 6
#define TX 7

#include <SoftwareSerial.h>
#include <ctype.h>

String comando;
String string;
SoftwareSerial mySerial(RX,TX);

void setup(){
 
  Serial.begin(9600);
  Serial.flush();

  mySerial.begin(9600);
  mySerial.flush();
}

void loop(){

  float a,b;

  comando = "";

  if(Serial.available()){
    Serial.println("inserire il valore di a");
    delay(10);   
    a=Serial.parseFloat();
    mySerial.print("il valore di a e' ");
    mySerial.write(a);
    mySerial.println();
  }
 
  if(mySerial.available()){
    Serial.println("inserire valore di b");
    delay(10);
    b=Serial.parseFloat();
    mySerial.print("il valore di b e' ");
    mySerial.write(b);
    mySerial.println();
  }
 
  if(Serial.available()){
    Serial.print("inserire un comando da eseguire");
    comando = Serial.readStringUntil('\n');
    comando.trim();
  }
 
  mySerial.print("il comando da eseguire è " + comando);

  if(comando == "somma"){
    a=a+b;
    mySerial.print("il risultato e' " );
    mySerial.write(a);
  }
  else if(comando == "prodotto"){
    a=a*b;
    mySerial.print("il risultato e' ");
    mySerial.write(a);
  }
}

vorrei compiere una semplice operazione scrivendo, comunicando tra le due seriali, il problema è che non riesco a gestire proprio i tempi della comunicazione:  quello che vorrei fare è questo:
1.serial dice:inserire valore di a;
2.inserisco valore di a;
3.mySerial dice: il valore di a è...;
4 serial dice : inserire valore di b;
5. inserisco valore di b;
6.mySerial dice : il valore di b è...;
7.serial dice: inserire comando da eseguire;
8.inserisco la stringa "somma" o "prodotto";
9. mySerial legge  e interpreta la stringa;
10. mySerial mi restituisce il valore dell'operazione;

con il codice che ho scritto non riesco a ottenere passi "discreti" nel senso che non riesco a mettere in pausa la porta finchè non inserisco il valore o comando. suppongo che centri l'uso scorretto che faccio della funzione available().

mi potete aiutare?
45  International / Software / Re: arduino - rs232 on: January 12, 2013, 08:48:24 am
il progetto finale sarà il controllo remoto di un riflettometro attraverso seriale rs232. prima di passare alla gestione dello strumento, devo sapere gestire la comunicazione  tra due serial devices collegati usando arduino come ponte, come gestore della comunicazione.

adesso, come test, vorrei semplicemente far comunicare due porte seriali.
esempio: se sul terminal dell'IDE arduino scrivo "ciao" allora l'altro terminale(quello che collego via rs232) mi risponde "ciao". spero di essere stato chiaro.

per questo vi chiedo, i pin di trasmissione e ricezione dell'integrato(11 e 12) non dovrebbero andare ad altri due pin digitali di arduino? se li collego a 0 e 1 occupo già la serialeHW, giusto?
Pages: 1 2 [3] 4 5 6