Costruiamo un visualizzatore per 4 sonde EGT??

Avatar utente
Fabius72
Messaggi: 878
Iscritto il: 09/02/2013, 16:55
ECU: MS2 V3.0
Località: Valle d'Aosta

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda Fabius72 » 22/08/2013, 21:55

ricki158 ha scritto:io ho un problema su quei due pin: ho un arduino 2009 e i pin 0 e 1, che sarebbero l' rx e il tx, arrivano direttamente dal chip ftdi e vanno all'atmega. ho fatto il convertitore seriale 232 su breadboard come te e mi sono collegato appunto a quei pin la, solo che quando carico lo sketch il chip ftdi mi manda tutto su quei piedini la perchè sono quelli che comunicano, inviano e ricevono il segnale, solo che mi becca il chip 232 e il software sul computer non riconosce la scheda di arduino, dandomi un errore particolare. tu hai avuto lo stesso mio problema?
...


E' esattamente il problema che ho avuto anch'io, risolto poi con l'incrocio di rx e tx che collegano pin 0 e 1 di arduino all'RS232 tramite relè.
Ho optato per questa soluzione in quanto TunerStudio non mi si connetteva alla MS a 115200 baud (mentre a 9600 si), utilizzando arduino come convertitore USB-seriale.
Leggendo in giro pareva che la libreria "SoftwareSerial" non permettesse di arrivare a 115200, ma nella documentazione si legge che invece ci dovrebbe arrivare. Bohh.

I casi sono due: mettici anche tu un relè, oppure se hai voglia e tempo prova prima via software.
Il trucco è quello di inizializzare la seriale solo quando è arduino a comunicare con la MS e non l'FTDI.
Per fare questo avevo fatto in modo che nel momento in cui volevo collegare il portatile alla MS, spegnevo arduino e riaccendendolo tenevo premuto uno qualsiasi dei pulanti che avrai visto in foto, e questo mi generava un loop infinito evitando così che l'esecuzione del codice procedesse con l'inizializzazione della seriale col Serial.begin(115200)

Questo è quanto avevo fatto e spero ti sia utile.

void setup() {
...
...
...
lcd.begin(20, 4);
sensorValue = analogRead(pulsantiera);
int pushButton = map(sensorValue, 0, 1023, 0, 5);
if (pushButton > 0 )
{
lcd.print("USB attiva!"); // se viene premuto uno dei pulsanti
lcd.setCursor(0,2); lcd.print("connessione");
lcd.setCursor(0,3); lcd.print("laptop...");
while(true) { continue; } // genera il loop infinito per bloccare il codice
}
Serial.begin(115200);
...
...
...
}

PS:
Ora che ci penso bene (son passati ormai due mesi), se non si effettua l'inversione di rx e tx via software, è comunque necessario scollegare uno dei due, ma non ricordo quale, fai una prova.
Spero di aver tenuto qualcosa di quel che ho fatto col SoftwareSerial, domani ci guardo!
Scusa per la confusione :oops:
Fabio

Avatar utente
ricki158
Messaggi: 934
Iscritto il: 20/04/2012, 16:51
Auto: Fiat 127 mk2 900/C - 1980
ECU: MS1 V2.2
Località: Gorizia

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda ricki158 » 23/08/2013, 1:00

sulla breadboard ho provato e il circuito funziona solo se tengo scollegato il pin rx

PierGSi
Messaggi: 878
Iscritto il: 09/12/2010, 17:58
Auto: Honda Integra DC2
Località: PD nord
Contatta:

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda PierGSi » 23/08/2013, 11:22

Fabius72 ha scritto:Leggendo questa pagina,

http://www.megamanual.com/com/serial.htm

Ho provato a dare il comando in tanti modi differenti, visto che non riesco ad interpretarlo correttamente, ma nessuno ha funzionato purtroppo.
Il problema è come sostituire il comando classico
Serial.print('A'); delay(200);

con quello indicato nel link:

'r', 0, 6, 0, 0, 0, 112

ho provato con le virgole, con i soli spazi, con la tabulazione, con e senza virgolette, ma la MS mi risponde sempre con... non lo ricordo, ma con una stringa di 8 byte che a me non dice nulla. Se occorre, vedo di postarla.



Purtroppo non conosco il linguaggio che usi e non so cosa faccia il compilatore, in C o assembler mandare quei byte uno dietro l'altro è abbastanza semplice:

si controlla che il bit 5 (2^5) del registro UCSRA (su ATMEGA32) sia ad 1, se è a zero bisogna attendere perche' l'invio del byte precedente è ancora in corso, poi si scrive il byte da inviare nel registro UDR. Stop...ripetendo la procedura in sequenza si mandano tutti i byte necessari.

void usart_putc(char data) {

while (!(UCSRA & 0x20));
UDR = data;

}

Il tuo temo sia un problema di timeout della megasquirt, se questa istruzione

Serial.print('A'); delay(200);

significa invia il carattere A ed attendi 200 mS IMHO non potra' mai funzionare, a naso e se ho ben intuito la funzione di Serial.print io farei

Serial.print('r');
Serial.print(0);
Serial.print(6);
Serial.print(0);
Serial.print(0);
Serial.print(0);
Serial.print(112);


...e poi attendi che arrivino i 112 (!!) byte richiesti.
Ciao,
Pier.

www.piergm.com

Avatar utente
Fabius72
Messaggi: 878
Iscritto il: 09/02/2013, 16:55
ECU: MS2 V3.0
Località: Valle d'Aosta

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda Fabius72 » 24/08/2013, 10:10

Purtroppo sono alle prese con il portatile grande che avevo spento prima di partire e ora non si accende più!
Ma cos'è... fa male anche all'elettronica stare ferma??
L'ho sventrato e ho scoperto che è partita la sezione di alimentazione nella scheda madre :cry:
Di comprarne uno nuovo non ho ne voglia, nè soldi, per cui spero tanto di riuscire a riaccenderlo, ma non so quanto tempo mi prenderà :?
Fortuna che ho il "piccolino" che non mi tradisce mai... (incrocio le dita)
Il fattò è che ho tutto sull'altro, porc... e l'HD è in EXT4, quindi illeggibile da qua con XP :cry:
Fabio

Avatar utente
Fabius72
Messaggi: 878
Iscritto il: 09/02/2013, 16:55
ECU: MS2 V3.0
Località: Valle d'Aosta

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda Fabius72 » 24/08/2013, 10:23

PierGSi ha scritto:...
Il tuo temo sia un problema di timeout della megasquirt, se questa istruzione

Serial.print('A'); delay(200);

significa invia il carattere A ed attendi 200 mS IMHO non potra' mai funzionare, a naso e se ho ben intuito la funzione di Serial.print io farei

Serial.print('r');
Serial.print(0);
Serial.print(6);
Serial.print(0);
Serial.print(0);
Serial.print(0);
Serial.print(112);


...e poi attendi che arrivino i 112 (!!) byte richiesti.


Esatto Pier, il comando che adopero, funziona come hai detto tu e ti assicuro funziona bene. E' solo lento, per via del delay di 200ms.

Non pensavo fosse equivalente inviare in successione i comandi come hai scritto tu Pier, pensavo fosse obbligatorio un'unico invio in una stringa.
Ci proverò appena mi è possibile. Grazie!!

I 112 bytes non sono più così pochi... La beta13 che ho su me ne invia ben 182!

Questa è la sequenza in TunerStudioAppDebug.txt, e che si ripete finchè c'è connessione attiva e ho provato anche ad inviare gli stessi byte, ma non nella maniera corretta evidentemente.
----------------------------------------------------
Time: 0:25.436: SENT, 7 bytes
x00 x01 x41 xD3 xD9 x9E x8B ..A....

10/08/13 16.06.52 Debug: time to read outpc: 31 ms.
10/08/13 16.06.52 Debug: Real OchDelay for Dyno - beta13: 9, timeout=300
10/08/13 16.06.52 Debug: commThreadExpectedReturnTime set to ms from now: 884
Time: 0:25.448: Received, 3 bytes
x00 xB3 x01 ...

Time: 0:25.463: Received, 182 bytes
x00 x04 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x93 x93 x01 x01 ................
x03 xE1 x03 xDF x03 x01 x03 x04 x00 x00 x00 x80 x00 x64 x00 x64 .............d.d
x00 x00 x03 xE8 x03 xE8 x03 xD7 x00 x64 x00 x00 x00 x64 x04 x1A .........d...d..
x00 x64 x00 x64 x00 x64 x00 x6C x00 x00 x00 x00 x00 x00 x00 x21 .d.d.d.l........
x00 x00 x02 x58 x00 x64 x00 x00 x00 x64 x00 x00 x00 x00 x00 x00 ...X.d...d......
x00 x00 x01 xFD x00 x00 x00 x73 x00 x00 x00 x00 x00 x00 x00 x00 .......s........
x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 ................
x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 ................
x00 x10 x01 x69 x00 x00 x00 x00 x00 x64 x00 x00 x00 x00 x00 x00 ...i.....d......
x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 ................
x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x03 x03 ................
x00 x00 x17 x68 xBB x1C ...h..
Fabio

Avatar utente
Vicus
Messaggi: 2753
Iscritto il: 15/11/2010, 19:59
Località: Rossano Veneto

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda Vicus » 24/08/2013, 10:52

La x indica che sono numeri esadecimali. Per esempio x93 è 147.

PierGSi
Messaggi: 878
Iscritto il: 09/12/2010, 17:58
Auto: Honda Integra DC2
Località: PD nord
Contatta:

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda PierGSi » 24/08/2013, 13:58

Fabius72 ha scritto:
Esatto Pier, il comando che adopero, funziona come hai detto tu e ti assicuro funziona bene. E' solo lento, per via del delay di 200ms.

Non pensavo fosse equivalente inviare in successione i comandi come hai scritto tu Pier, pensavo fosse obbligatorio un'unico invio in una stringa.
Ci proverò appena mi è possibile. Grazie!!



Se non li invii tu uno alla volta lo fa comunque il compilatore :))
Mandando byte di configurazione ad un gps ho avuto problemi perche' tra un byte e l'altro venivano eseguiti degli interrupt (molto meno di 1mS) , 200 mS e' un tempo biblico in una comunicazione a 115kbps :))
Ciao,
Pier.

www.piergm.com

Avatar utente
ricki158
Messaggi: 934
Iscritto il: 20/04/2012, 16:51
Auto: Fiat 127 mk2 900/C - 1980
ECU: MS1 V2.2
Località: Gorizia

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda ricki158 » 24/08/2013, 15:51

Fabius72 ha scritto:
ricki158 ha scritto:io ho un problema su quei due pin: ho un arduino 2009 e i pin 0 e 1, che sarebbero l' rx e il tx, arrivano direttamente dal chip ftdi e vanno all'atmega. ho fatto il convertitore seriale 232 su breadboard come te e mi sono collegato appunto a quei pin la, solo che quando carico lo sketch il chip ftdi mi manda tutto su quei piedini la perchè sono quelli che comunicano, inviano e ricevono il segnale, solo che mi becca il chip 232 e il software sul computer non riconosce la scheda di arduino, dandomi un errore particolare. tu hai avuto lo stesso mio problema?
...


E' esattamente il problema che ho avuto anch'io, risolto poi con l'incrocio di rx e tx che collegano pin 0 e 1 di arduino all'RS232 tramite relè.
Ho optato per questa soluzione in quanto TunerStudio non mi si connetteva alla MS a 115200 baud (mentre a 9600 si), utilizzando arduino come convertitore USB-seriale.
Leggendo in giro pareva che la libreria "SoftwareSerial" non permettesse di arrivare a 115200, ma nella documentazione si legge che invece ci dovrebbe arrivare. Bohh.

I casi sono due: mettici anche tu un relè, oppure se hai voglia e tempo prova prima via software.
Il trucco è quello di inizializzare la seriale solo quando è arduino a comunicare con la MS e non l'FTDI.
Per fare questo avevo fatto in modo che nel momento in cui volevo collegare il portatile alla MS, spegnevo arduino e riaccendendolo tenevo premuto uno qualsiasi dei pulanti che avrai visto in foto, e questo mi generava un loop infinito evitando così che l'esecuzione del codice procedesse con l'inizializzazione della seriale col Serial.begin(115200)

Questo è quanto avevo fatto e spero ti sia utile.

void setup() {
...
...
...
lcd.begin(20, 4);
sensorValue = analogRead(pulsantiera);
int pushButton = map(sensorValue, 0, 1023, 0, 5);
if (pushButton > 0 )
{
lcd.print("USB attiva!"); // se viene premuto uno dei pulsanti
lcd.setCursor(0,2); lcd.print("connessione");
lcd.setCursor(0,3); lcd.print("laptop...");
while(true) { continue; } // genera il loop infinito per bloccare il codice
}
Serial.begin(115200);
...
...
...
}

PS:
Ora che ci penso bene (son passati ormai due mesi), se non si effettua l'inversione di rx e tx via software, è comunque necessario scollegare uno dei due, ma non ricordo quale, fai una prova.
Spero di aver tenuto qualcosa di quel che ho fatto col SoftwareSerial, domani ci guardo!
Scusa per la confusione :oops:

quindi non c'è modo di farlo in automatico? senza tener premuto qualche pulsante...

ma tu adesso comunque viaggi a 9600, per cui non cambierebbe molto. se combini a passarmi il codice per la software serial sarebbe una cannonata!

Avatar utente
Fabius72
Messaggi: 878
Iscritto il: 09/02/2013, 16:55
ECU: MS2 V3.0
Località: Valle d'Aosta

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda Fabius72 » 24/08/2013, 18:14

Forse non mi ero spiegato bene.
Ora utilizzando il relè ho la connessione a 115200, mentre prima col softwareSerial non ci riuscivo se non abbassando la velocità, per cui avevo abbandonato.
Purtroppo se ho tenuto qualcosa delle prime prove di connessione, ce le ho nell'HD del portatile che ora è tutto sparso qui sul tavolo. L'HD ha due partizioni in EXT4 e non ho modo di leggerle adesso. Mi dispiace, non ci voleva!
Enri, ti disturbo in PM per una piccola consulenza, perchè sono riuscito ad avere una MB identica ma con la VGA andata e questa carica la batteria, mentre quella del mio portatile no, è morto completamente. Siccome la sezione delle alimentazioni è un po' sparsa, forse andando per confronto con l'oscilloscopio lo facciamo tornare in vita! :P


Vicus ha scritto:La x indica che sono numeri esadecimali. Per esempio x93 è 147.

Chiaro, solo che non ho idea di come inviare quei 7 byte. Ho provato con e senza la x ma niente, con e senza una barra ma niente uguale.
Domani faccio qualche altra prova seguendo il consiglio di Pier e vi faccio sapere.
Fabio

Avatar utente
Vicus
Messaggi: 2753
Iscritto il: 15/11/2010, 19:59
Località: Rossano Veneto

Re: Costruiamo un visualizzatore per 4 sonde EGT??

Messaggioda Vicus » 24/08/2013, 18:19

Sapete che arduino si resetta ogni volta che si collega la presa usb (per far partire il bootloader) e che per disattivarlo basta tagliare una apposita piazzola?

Per sapere come inviare un numero devi leggere sapere come funziona il comando, credo che come fai tu invii sempre caratteri mentre tu devi inviare interi.

Le partizioni ext4 le puoi leggere con un programma, ora lo cerco.


Torna a “Elettronica generale”

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti