Pages: [1] 2   Go Down
Author Topic: smadonnamenti con la seriale  (Read 1265 times)
0 Members and 1 Guest are viewing this topic.
Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao a tutti questo è il mio primo post sul forum.
Sto iniziando un progetto nel quale mi devo interfacciare via seriale ad un altro componente, ma ho già dei problemi solo con l'invio dei comandi...

ho scritto il seguente codice:

Code:
int incomingByte = 0;      // for incoming serial data
int ledPin =  13;
byte select[] = {0x02,0x00,0x04,0x04,0x00,0x00,0x02};

void setup() {
  Serial.begin(9600);      // opens serial port, sets data rate to 9600 bps
  pinMode(ledPin, OUTPUT);
}

void loop() {

  Serial.write(select,7);
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    digitalWrite(ledPin, HIGH);
  }
  delay(500);
  digitalWrite(ledPin, LOW);
  delay(500);
  
}

che dovrebbe mandare un select e accendermi un led se ricevo una risposta.

Non vedendo la comunicazione funzionare mi sono messo a guardare nel serial monitor cosa mandavo.. e non è quello che mi aspetto!
il mio messaggio inizia con 0x02 cioè un STX, invece nel serial monitor vedo tutt'altro (credo fosse un 0xBF), non riesco a capirne la ragione.

Volevo capire se crea conflitto avere il cavo usb collegato e avere le uscite tx e rx collegate ad un'altra seriale.

Infine non capisco come mai mi trasmette sulla seriale solo con il cavo usb collegato e non quando alimento con la batteria, è perché al serial.begin non sente nessuna periferica collegata alla seriale?

grazie.

Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20187
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao lollotek
Suppongo che hai un Arduino 2009.
Il problema é che hai attacato 2 cose sulla seriale (TX e RX); quei 2 pin vengono usati anche dal interfaccia USB-RS232 presente sulla scheda.
Il codice funziona, anche se non ho capito cosa vuoi spedire col comando
Code:
Serial.write(select,7);
Vedo che a ogni loop aspetti 1 secondo; l' hai voluto cosí?
Usa la libreria http://arduino.cc/en/Reference/SoftwareSerial per collegare il Tuo "altro componente".
L' ultima domanda non so rispondere.
Ciao Uwe
Logged

Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si, l'attesa di un secondo l'ho messa volutamente per non mitragriare troppo velocemente sulla seriale e riuscire a vedere il led di "debug".

nella parte:
Code:
byte select[] = {0x02,0x00,0x04,0x04,0x00,0x00,0x02};
Serial.write(select,7);

Voglio inviare la serie di byte, non è corretto?
Ho visto ora la libreria seriale, proverò con quella.

grazie mille.

Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20187
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao lollotek
Quel code dovrebbe essere giusto.
mi ripeto:
Il problema é che hai attacato 2 cose sulla seriale (TX e RX); quei 2 pin vengono usati anche dal interfaccia USB-RS232 presente sulla scheda.
Usa la libreria http://arduino.cc/en/Reference/SoftwareSerial per collegare il Tuo "altro componente".
Ciao Uwe
Logged

Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, grazie mille, stasera ci provo...

Quote
altro componente

è così terribile quello che ho detto? comunque è un modulo rfid mifare, come potrei definirlo?
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20187
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao lollotek
Non é terribile , ti ho solo citato e per questo messo fra virgolette.  smiley-wink smiley-grin
Ciao e buona fortuna.
Ciao Uwe
Logged

Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok sto usando la libreria e funziona, però in uscita non ti trovo quello che mi aspetto..
io faccio :
Code:
 mySerial.print(2,BYTE);
  mySerial.print(0,BYTE);
  mySerial.print(4,BYTE);
  mySerial.print(4,BYTE);
  mySerial.print(0,BYTE);
  mySerial.print(0,BYTE);
  mySerial.print(2,BYTE);
Aspettandomi in uscita per esempio come primo carattere un STX, cioè il secondo carattere della tabella ascii.
invece leggendo il canale mi ritrovo in Hex i seguenti caratteri:
Code:
BF
F7
F7
FF
FF
FB
00
00

sbaglio qualcosa?
io sono in ascolto con le seguenti impostaizoni:
Baud rate: 9600
Parity: none
bit per data: 8
Stop bit: 1

che sono le stesse usate dal modulo rfid con il quale devo andare a comunicare..

Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20187
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao lollotek

La funzione  mySerial.print(2,BYTE); da dove  la prendi? l' hai definta tu o fa parte di una libreria? Non so dirti niente se non so cosa fa la funzione.
ciao Uwe
Logged

Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

purtroppo non ho il codice a portata di mano altrimenti te lo posto tutto..
comunque myserial è derivato dalla SoftwareSerial.
sono partito dall'esempio della sotware serial, ed ho visto che si utilizza il metodo print per inviare i dati.
Io dovrei riuscire a mandare il secondo carattere della tabella ascii che sarebbe un STX, fatto questo penso che poi di conseguenza riuscirei a fare tutto il resto..
Logged

Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

allora stando a quanto dice qui

con questo comando
Code:
Serial.print(byte(78)) gives "N" (whose ASCII value is 78)
oppure
Code:
Serial.print(78, BYTE) gives "N"
io mando il carattere numero "78"

che è il metodo che appunto ho usato come indicato di sopra..

anche qui indica lo stesso genere di problema.

è possibile che basglio qualcosa a livello hardware? io mi sono collegato con l'rx di una seriale aggiuntiva al pin che uso come tx con la software serial, e le cose non mi quadrano, potrebbe esserci per qualche strano motivo un disallineamento dei bit?

questa sera faccio altre prove e posto il codice completo.
Logged

Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#include <SoftwareSerial.h>

#define rxPin 4
#define txPin 5

SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

void setup() {

  pinMode(rxPin, INPUT);    // imposto rx in entrata
  pinMode(txPin, OUTPUT); // imposto tx in uscita
  
  mySerial.begin(9600);     // apro la software serial
  
}

void loop() {
  mySerial.print(byte(2)); // dovrei ritrovarmi STX
  delay(2000);
}

questo è il codice, e mettendomi in ascolto mi spara fuori il carattere "?" cioè 0x3F, anziché 0x02.

qualcuno sa darmi qualche spiegazione?

[edit]..inizia a venirmi il dubbio che sia la mia porta da usb a seriale che uso per controllare l'uscita che funzioni male..[/edit]
« Last Edit: April 20, 2010, 12:57:34 pm by lollotek » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20187
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao lollotek
Alcune domande cretine.
L' ordine dei Bit é giusto?
Il baudrate sono uguali?
Tu hai collegato la seriale del PC con i piedini 4 e 5 del Arduino? direttamente o hai messo qualche elettronica in mezzo?
Ciao Uwe
Logged

Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si si, i baudrate è uguale, ripeto, io sono in scolto con le seguenti impostazioni:
Baud rate: 9600
Parity: none
bit per data: 8
Stop bit: 1

dal piedino 5 faccio partire un filo che va a toccare l'rx del cavo usb-seriale al qule però ho messo un mini attacco incrociato in modo da avere la parte "femmina" dove mettere il mio filo.

ho provato anche ad attaccare il cavo usb seriale ad un'altra porta usb, ed ad usare la libreria NewSoftwareSerial, ma i risultati sono comunque identici.

tu per ordine dei bit che intendi? mandandogli solo un carattere mi aspetto di leggere solo quello.
mi pare di aver provato di tutto, per questo mi viene da accusare il cavo usb-seriale.
ah, poi la massa è quella del pc, perchè comunque l'arduino è alimentato dal suo cavo usb.
Devo forse fare qualche altra impostazione di pinMode o impostare come alta o bassa l'uscita?
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20187
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao lollotek
Le uscite RX-Tx delArduino non hanno i livelli di tensione conforme alla RS232.
Il arduino ha i livelli HIGH: 5V e LOW: 0V mentre la RS232 i livelli sono definiti HIGH +3V a +25V e LOW -3 a -25V
Ti serve un adattatore tipo MAX232. o equivalente che Ti produce dai 5V +/- 8V.
Non so che adattatore USB-RS232 usi. Se usi uno da PC hai questo problema; Potresti usare per un telefonino; alcuin modelli hanno dalla parte telefonino il livelli logici adatti (non so dirti quale adattatore per quale modello di telefonino va bene.

L'ordine dei bit é se viene mandato prima quello la cifra piú bassa (1) o prima quella piú alta (128).

Ciao Uwe
« Last Edit: April 21, 2010, 09:12:30 am by uwefed » Logged

Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ah caspita, mi tocca farmi il circuitino quindi?
però mi sorge spontaneo un dubbio.. ma allora quelli che usano il Parallax (lettore rdif 125Khz) dovrebbero anche loro fare questa modifica? non mi pare di averlo mai visto.. collegano in reader e basta.

Anche nel mio caso vedere la comunicazione sulla seriale del pc sarebbe un "extra" l'importante è comunicare con il mio modulo rfid, che però usando anch'esso un'alimentazione da 5v credo che anche lui viaggi sugli stessi livelli di tensione dell'arduino per la comunicazione 232..
Logged

Pages: [1] 2   Go Up
Jump to: