Pages: [1] 2 3   Go Down
Author Topic: Arduino USB-RS485  (Read 3262 times)
0 Members and 1 Guest are viewing this topic.
Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho comprato un convertitore usb-rs485 ma all'interno pare non avere un driver.. inutile dire che la ricerca guidata di windows non abbia funzionato, ho provato a scaricare questo driver (l'ultimo) ma specificando nel percorso di ricerca driver la cartella scaricata non dava niente. Poi ho provato questo (il primo), mi estrae un eseguibile che non mi porta a niente..

Link, consigli? smiley-sad

Grazie in anticipo!
« Last Edit: January 26, 2013, 10:48:49 am by sciorty » Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9654
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scrivi al venditore e fatti dire dove prendere i driver.
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Risolto con questo (link diretto) http://www.adrive.com/public/hZBCZe/PL2303_Prolific_DriverInstaller_v1210.zip
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma una cosa:
uno schema per MAX485 ed arduino funzionante? Ho provato questo ma non riesco a caricare lo sketch.. ovviamente il pin TXarduino è collegato al 4 MAX485. A e B del convertitore USB sono collegati correttamente!
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Riprendo il post.

La porta seriale la riconosce, lo schema è sempre quello ed a quanto ho capito i pin 2 e 3 del MAX devono essere a LOW per ricevere e ad HIGH per inviare. Qui uno sketch di prova:
Code:

int val;

void setup(void) {
  Serial.begin(9600);
  pinMode(3,OUTPUT);     //pin 2 e 3 del MAX
  pinMode(13,OUTPUT);    //led
  digitalWrite(3,0);          //ricevo
}

void loop(void) {
  if(Serial.available()>0){
    digitalWrite(3,1);       //trasmetto
    Serial.println(val);
    digitalWrite(13,1);     //avviso con il led
    delay(500);
    digitalWrite(13,0);     
    digitalWrite(3,0);        //ricevo
    Serial.flush();
  }
 
}

Carico lo sketch normalmente, stacco il cavetto usb dell'arduino e apro il serial monitor sulla porta com del convertitore. Mando un carattere a muzzo e ricevo un carattere pure esso a muzzo ma il led 13 non si accende, segno che l'atmega non ha ricevuto.

Idem se cambio gli stati del pin per la ricezione o trasmissione..
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sono riuscito a fare ricevere ed inviare, ma la codifica dei caratteri sembra una cosa impossibile..
Code:
void setup(void) {
  Serial.begin(9600);
  pinMode(3,OUTPUT);
  pinMode(13,OUTPUT);
  digitalWrite(3,0);
}

void loop(void) {
 
    if(Serial.available()>0){
      digitalWrite(3,1);
      Serial.println(Serial.read());
      digitalWrite(3,0);
      lamp();
      Serial.flush();
    }
 
 
}

void lamp(){digitalWrite(13,1);delay(1000);digitalWrite(13,0);}

Sulla COM del convertitore invio 'b', arduino legge "39"(lo vedo dal suo serial monitor) ma al convertitore torna indietro "2.."
Tutti i bit rate sono a 9600..
Una cosa stranissima è che se tolgo quel "lamp()", l'arduino riceve in continuazione una seria di 0. Ed è molto strano perchè mettendolo ricevo solo il carattere inviato e basta, nient'altro nè prima nè dopo

Lo so che sto rompendo le scatole ma proprio non capisco.. anche perchè l'ASCII di 'b' non è 39 ma bensì 98.

AIUTO  smiley-cry

Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 22927
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Io da quello schema non ci capisco molto.
I pin 6 e 7 del 1° chip (MAX485 o 75176 che sia) vanno collegati in parallelo ai medesimi pin del 2° chip.
Inoltre i piedini 6 e 7 vanno collegati tra sé con una R da 100 ohm (una per ogni chip), messa il più vicino possibile al chip.

I pin VCC e GND li colleghi correttamente.
Poi i pin /RE e DE vanno collegati ad 1 unico pin dell'Arduino. Se quel pin lo metti LOW il chip riceve i dati, se lo metti HIGH il chip trasmette.
Il pin 1 va a RX dell'Arduino, il pin 4 va invece a TX.


* Ff8Vo.png (8.4 KB, 408x275 - viewed 47 times.)
Logged


Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo schema è come quello, ho provato anche la resistenze ma non cambia niente. Ricevo, invio, ma non riesco a capire il criterio di codifica dei dati..
Magari è il convertitore cinese, dovrei provare a par comunicare due atmega con dei max
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 22927
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo schema è come quello, ho provato anche la resistenze ma non cambia niente. Ricevo, invio, ma non riesco a capire il criterio di codifica dei dati..
Non c'è codifica.
L'RS485 non è altro che un'estensione della seriale. Se spedisci il byte 1 ricevi il byte 1.
Devi ragionare come se l'RS485 nel mezzo non ci fosse, è un bus, cioè un vettore di dati, e basta.

Quote
Magari è il convertitore cinese, dovrei provare a par comunicare due atmega con dei max
Prova a scrivere un semplice sketch che spedisca al PC ad intervalli regolari dei caratteri, apri la comunicazione sul PC con un terminale configurato come 8N1, che è lo standard usato da Arduino per la seriale, e guarda un po' se arriva qualcosa.
Logged


Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Appunto, anche io avevo intenzione di vederla come seriale ma dopo ho avuto questi problemi..
Oggi non posso ma domani ti scrivo con esattezza i problemi che riscontrerò nello sketch che mi hai proposto (anche se in parte ho scritto sopra)
Logged

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 87
Posts: 4989
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

39=00100111
98=01100010

se vuoi fare dei ragionamenti almeno devi convertirli in binario.
Logged

my name is IGOR, not AIGOR

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova a scrivere un semplice sketch che spedisca al PC ad intervalli regolari dei caratteri, apri la comunicazione sul PC con un terminale configurato come 8N1, che è lo standard usato da Arduino per la seriale, e guarda un po' se arriva qualcosa.

Ecco quello che esce fuori.. y= suppongo sia per lo '\n' che l'arduino invia con la println(), infatti con una semplice print('a') ricevo 0 e con una print('b') ricevo '

La resistenza è da 100R messa il più vicino possibile all'integrato e il doppino tra convertitore e max di soli 5-7 cm circa!
Inoltre leggevo che le resistenze di ingresso e di uscita devono essere uguali a quella del doppino nel caso in cui la durata del bit sia inferiore al tempo che impiega il segnale a percorrere l'intera lunghezza del canale. Cosa che ovviamente non succede nel mio caso..


* Immagine.bmp (1806.62 KB, 1002x615 - viewed 44 times.)
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hai provato ad usare Serial.write al posto di Serial.print?
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 22927
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sembra più che altro un problema di codifica dei caratteri.
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9654
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sembra più che altro un problema di codifica dei caratteri.

Per me è un problema di codepage del driver, ovvero c'è qualche impiccio di codifica/decodifica a livello pc che non ha nulla a che vedere con Arduino la RS485.
Logged

Pages: [1] 2 3   Go Up
Jump to: