Capo d'Orlando
Offline
God Member
Karma: 2
Posts: 652
|
 |
« on: January 23, 2013, 09:46:33 am » |
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?  Grazie in anticipo!
|
|
|
|
« Last Edit: January 26, 2013, 10:48:49 am by sciorty »
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 76
Posts: 7539
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #1 on: January 23, 2013, 09:55:51 am » |
Scrivi al venditore e fatti dire dove prendere i driver.
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
God Member
Karma: 2
Posts: 652
|
 |
« Reply #2 on: January 25, 2013, 12:04:18 pm » |
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
God Member
Karma: 2
Posts: 652
|
 |
« Reply #3 on: January 25, 2013, 02:06:01 pm » |
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
God Member
Karma: 2
Posts: 652
|
 |
« Reply #4 on: January 26, 2013, 10:59:02 am » |
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: 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
God Member
Karma: 2
Posts: 652
|
 |
« Reply #5 on: January 27, 2013, 08:47:55 am » |
Sono riuscito a fare ricevere ed inviare, ma la codifica dei caratteri sembra una cosa impossibile.. 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 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 226
Posts: 17007
Don't know what I do
|
 |
« Reply #6 on: January 27, 2013, 11:25:44 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
God Member
Karma: 2
Posts: 652
|
 |
« Reply #7 on: January 27, 2013, 03:37:21 pm » |
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
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 226
Posts: 17007
Don't know what I do
|
 |
« Reply #8 on: January 27, 2013, 04:12:54 pm » |
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. 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
God Member
Karma: 2
Posts: 652
|
 |
« Reply #9 on: January 28, 2013, 02:04:40 am » |
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
God Member
Karma: 15
Posts: 917
|
 |
« Reply #10 on: January 29, 2013, 03:58:44 am » |
39=00100111 98=01100010
se vuoi fare dei ragionamenti almeno devi convertirli in binario.
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
God Member
Karma: 2
Posts: 652
|
 |
« Reply #11 on: January 30, 2013, 10:27:18 am » |
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..
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2955
The quieter you become, the more you can hear
|
 |
« Reply #12 on: January 31, 2013, 10:02:48 am » |
hai provato ad usare Serial.write al posto di Serial.print?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 226
Posts: 17007
Don't know what I do
|
 |
« Reply #13 on: January 31, 2013, 10:18:13 am » |
Sembra più che altro un problema di codifica dei caratteri.
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 76
Posts: 7539
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #14 on: January 31, 2013, 10:24:04 am » |
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
|
|
|
|
|
|