Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 23
  1. #11
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da VincenzoB92
    Ok ho capito che la parità è uno dei metodi più semplici per rilevare gli errori in una trasmissione di dati..benissimo grazie, comunque a questo punto nel mio caso specifico è una cosa che posso omettere o potrebbe risolvere il mio problema..?
    La parità può anche non essere usata e non c'entra nulla con il tuo problema.

    da starci molto attenti quindi vorrei evitare di andare "a tentativi" con i settaggi
    Non è mai esplosa nessuna seriale per un settaggio sbagliato ... :-)

    quello che non ho capito è, quindi in un sistema di comunicazione seriale che non utilizza le funzioni di parity che problemi possono insorgere?
    Nessuno ... per collegamenti a breve distanza non hai praticamente errori e puoi ignorare la parità. A dire la verità non l'ho mai usata in nessun progetto con le seriali ...

    che settaggio devo pensare?
    Nessuna parità
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #12
    Grazie mille oregon, me l'immaginavo che non influisse molto con il mio problema, mi hai chiarito le idee comunque ok allora proverò a "giocare" un pochino con questi settaggi.
    Comunque tu hai qualche idea di come posso risolvere?
    A tuo avviso, fin'ora sto procedendo correttamente?
    Grazie!

  3. #13
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il problema potrebbe essere legato al fatto che la porta va correttamente chiusa da un programma prima che un altro la apra per utilizzarla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #14
    Le impostazioni di default da usare con Arduino sono:
    9600 baud
    No parità
    8 bit di dati
    1 bit di stop
    Hardware flow control disattivato

    Ma la cosa che spesso ti frega è il fatto che l'Arduino di default si auto-resetta quando viene attivata una connessione ad esso (il pin DTR è collegato al reset dell'ATMega); questo tipicamente causa problemi nel momento in cui si passa dal provare la comunicazione manualmente (dove la pausa tra il collegamento e l'inizio della digitazione fa sì che il piccolo delay all'accensione non venga notato) all'usare un programma, che invece inizia a comunicare immediatamente, e quindi invia dati quando l'ATMega non ha ancora iniziato ad eseguire il tuo codice.
    Ci sono diversi modi per ovviare a questo problema:
    - disattivare l'autoreset;
    - dopo aver aperto la porta seriale, attendere qualche secondo prima di comunicare con l'Arduino (ed essere comunque pronti a ritrasmettere in caso di timeout o di dati corrotti);
    - fare sì che sia l'Arduino ad iniziare la comunicazione: apri la porta, attendi che l'Arduino (appena resettato) invii una sequenza di caratteri nota, e quindi inizi a comunicare.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #15
    Originariamente inviato da VincenzoB92
    me l'immaginavo che non influisse molto con il mio problema
    Non ne sarei così sicuro, per lo meno non ancora. Nel tuo codice iniziale vedo un "parity=o" (odd) che significa parità dispari. Non so se lo hai messo per errore, ma se invece lo hai letto nei parametri di comunicazione, significa che va utilizzata parità dispari ed è un settaggio che non effettui nel codice che stai utilizzando ora.

    Se non fosse quello, non ti resta che confrontare tutti i campi del DCB nei due casi (se apri prima il terminale e se non lo apri). Già quattro li stampi (dopo la GetCommState). Stampa anche gli altri e nota le differenze.

  6. #16
    Ho capito cosa intendi..il fatto però è che a me il programma non funziona correttamente SOLO quando la porta non è ancora MAI stata aperta..ovvero quando avvio il programma C subito dopo aver collegato Arduino.
    Il che mi fa pensare che il mio sia un problema di "apertura" piuttosto che di corretta "chiusura"..mi sbaglio?

  7. #17
    Ciao ragazzi! Vi informo che ho risolto!!!
    avevo la soluzione a portata di mano e non me ne sono reso conto ahahah :P è stato molto semplice, e non sono neanche dovuto andare a casaccio!
    Ora vi spiego:
    ho scritto un pezzo di codice che non fa altro che stampare a video i settaggi della porta:
    codice:
    //leggiamo i parametri correnti
    DCB myDCB;
    memset(&myDCB, 0, sizeof(DCB));
    BOOL Ok = GetCommState(hCom, &myDCB);
    printf("La porta attualmente è così configurata:\n\nBaudRate: %d \n", myDCB.BaudRate);
    printf("ByteSize: %d \n", myDCB.ByteSize);
    printf("Parity: ");
    switch(myDCB.Parity){
    case NOPARITY:
    	printf("NOPARITY\n");
    	break;
    case ODDPARITY:
    	printf("ODDPARITY\n");
    	break;
    case EVENPARITY:
    	printf("EVENPARITY\n");
    	break;
    case MARKPARITY:
    	printf("MARKPARITY\n");
    	break;
    case SPACEPARITY:
    	printf("SPACEPARITY\n");
    	break;
    }
    printf("StopBits: ");
    switch(myDCB.StopBits){
    case ONESTOPBIT:
         printf("ONESTOPBIT\n");
         break;
    case ONE5STOPBITS:
         printf("ONE5STOPBITS\n");
         break;
    case TWOSTOPBITS:
         printf("TWOSTOPBITS\n");
         break;
    }
    e dopo di che ho attaccato Arduino e ho fatto partire il prog. e come settaggi mi ha dato
    codice:
    BaudRate: 9600
    ByteSize: 0
    Parity: NOPARITY
    StopBits: ONESTOPBIT
    quindi questo è il settaggio che NON FUNZIONA.
    Dopodichè ho chiuso il programma C, ho aperto il monitor seriale di Arduino (che quindi setta la porta in automatico) e poi l'ho chiuso.
    Ora riaprendo il programma C leggo i settaggi che il monitor seriale di Arduino ha apportato:
    codice:
    BaudRate: 9600
    ByteSize: 8
    Parity: NOPARITY
    StopBits: ONESTOPBIT
    BYTESIZE = 8 !!!!!!! Era questo che omettevo!!!
    alchè mi è bastato scrivere queste due righe
    codice:
    myDCB.BaudRate = CBR_9600;
    myDCB.ByteSize = 8;
    myDCB.Parity = NOPARITY;
    myDCB.StopBits = ONESTOPBIT;
    (parity e stopbits potevo anche ometterli visto che sono così di default nel mio pc ma è meglio fare le cose per bene) e via, problema risolto al primo colpo :P

  8. #18
    Originariamente inviato da MItaly
    Le impostazioni di default da usare con Arduino sono:
    ...
    8 bit di dati
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #19
    @MItali e ESSE-EFFE oooops!! Scusate ragazzi ma proprio non mi ero reso conto delle vostre risposte O.o infatti il mio penultimo messaggio (quello subito dopo quello di ESSE-EFFE era rivolto a "oregon") :P comunque avete ragione, perchè MITaly: i settaggi sono proprio quelli (: e mi sono da poco reso conto da solo anche di questo piccolo delay (: e per ESSE-EFFE: alla fine ho fatto proprio così effettivamente!

    Chiedo scusa per non esseremi accorto delle vostre utili risposte! Comunque ricontrollando outlook non mi sono neanche arrivate le mail delle vostre repliche dal forum effettivamente o.o boh..grazie lo stesso!

  10. #20
    Tranquillo, capita.

    Per le notifiche del forum, tieni conto che partono con qualche minuto di ritardo, e che non ti vengono inviate per ogni singolo post, ma dopo la prima notifica non ne arrivano altre finché non visiti nuovamente il forum per evitare di intasarti inutilmente la casella di posta elettronica.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.