- Messaggi: 59
- Ringraziamenti ricevuti 0
come affrontare il problema?
9 Anni 7 Mesi fa #1
da sharky
come affrontare il problema? è stato creato da sharky
Ciao a tutti! Io devo inviare via seriale una serie di pacchetti da 8 byte come questo:
@,@,2375,4714,255,255
I primi due indicano l inizio del pacchetto, poi ci sono le coordinate x e y, poi l intensitá e in fine la velocitá.
Per inviare questi dati ho bisogno di 5/6 ms, tempo che non ho. Sono i dati che controllano un laser e in 5 ms cambia l intensitá della bruciatura di un pixel, di conseguenza non posso attendere 5 ms. In oltre con immagini grandi perdere 5ms per ogni pixel è un sacco di tempo. Devo anche essere sicuro di non perdere alcun pacchetto percio questo tempo puo facilemnte radoppiare.
Come posso fare per risolvere il problema? Io pensavo sul pic di fare 3 "slot" nel quale immagazzino sempre 3 pacchetti e li elaboro. Cosi mentre sto elaborando un pacchetto poaso mandarne altri due. Peró devo segnalare al pc quando uno slot è libero... Mi sembra tutto macchinoso... Avete un idea migliore?
Grazie ciao
Igor
@,@,2375,4714,255,255
I primi due indicano l inizio del pacchetto, poi ci sono le coordinate x e y, poi l intensitá e in fine la velocitá.
Per inviare questi dati ho bisogno di 5/6 ms, tempo che non ho. Sono i dati che controllano un laser e in 5 ms cambia l intensitá della bruciatura di un pixel, di conseguenza non posso attendere 5 ms. In oltre con immagini grandi perdere 5ms per ogni pixel è un sacco di tempo. Devo anche essere sicuro di non perdere alcun pacchetto percio questo tempo puo facilemnte radoppiare.
Come posso fare per risolvere il problema? Io pensavo sul pic di fare 3 "slot" nel quale immagazzino sempre 3 pacchetti e li elaboro. Cosi mentre sto elaborando un pacchetto poaso mandarne altri due. Peró devo segnalare al pc quando uno slot è libero... Mi sembra tutto macchinoso... Avete un idea migliore?
Grazie ciao
Igor
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sharky
- Autore della discussione
- Senior Member
Riduci
Di più
9 Anni 7 Mesi fa #2
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic come affrontare il problema?
non mi è molto chiaro l'ultimo passaggio, chi controlla il laser e chi manda a chi.
Tralasciando quanto appena detto, con che baudrate della seriale del pic stai lavorando? è possibile aumentarlo?
E' possibile cambiare protocollo di comunicazione?
Ste
Tralasciando quanto appena detto, con che baudrate della seriale del pic stai lavorando? è possibile aumentarlo?
E' possibile cambiare protocollo di comunicazione?
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
9 Anni 7 Mesi fa #3
da Mauro Laurenti
Risposta da Mauro Laurenti al topic come affrontare il problema?
Certamente la soluzione di aumentare la frequenza di trasmissione aiuta.
Non ammettere la perdita di pacchetti, richiede la consapevolezza di averli inviati.
In questi contesti si invia spesso un byte di conteggio, per cui pacchetti adiacenti devono avere il byte di conteggio che differisce di 1.
Relativamente al pacchetto:
@,@,2375,4714,255,255
il terzo e quarto numero sono maggiori di 255 ed in particolare necessitano di 2 byte.
Hai 8 byte in totale ...un bit di start uno di stop (ignoro il parity bit)...ovvero 10 bit per byte.
Ovvero 80 bit.
I modelli di microcontrollori che supportano protocolli come RS485 non e´ insolito che i moduli UART supportino 1Mb/s -10Mb/s.
Per cui puoi inviare il tutto in meno di 80us.
Se usi il protocollo SPI quasi sempre puoi trasmettere con velocita' di 10Mbs...quindi invii il tutto in 8us.
I tempi sono piuttosto ridotti e puoi anche aggiungere il parity check, un byte di checksum...
...e permetterti l'invio di due pacchetti per correggere un errore.
Le specifiche le conosci meglio di noi, per cui valuta.
Saluti,
Mauro
Non ammettere la perdita di pacchetti, richiede la consapevolezza di averli inviati.
In questi contesti si invia spesso un byte di conteggio, per cui pacchetti adiacenti devono avere il byte di conteggio che differisce di 1.
Relativamente al pacchetto:
@,@,2375,4714,255,255
il terzo e quarto numero sono maggiori di 255 ed in particolare necessitano di 2 byte.
Hai 8 byte in totale ...un bit di start uno di stop (ignoro il parity bit)...ovvero 10 bit per byte.
Ovvero 80 bit.
I modelli di microcontrollori che supportano protocolli come RS485 non e´ insolito che i moduli UART supportino 1Mb/s -10Mb/s.
Per cui puoi inviare il tutto in meno di 80us.
Se usi il protocollo SPI quasi sempre puoi trasmettere con velocita' di 10Mbs...quindi invii il tutto in 8us.
I tempi sono piuttosto ridotti e puoi anche aggiungere il parity check, un byte di checksum...
...e permetterti l'invio di due pacchetti per correggere un errore.
Le specifiche le conosci meglio di noi, per cui valuta.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
9 Anni 7 Mesi fa #4
da sharky
Risposta da sharky al topic come affrontare il problema?
Grazie! Chiaro come sempre!in che modo faresti il checksum? Ho visto che ci sono molti modi differenti.
In oltre ho un problema: devo calcolare la distanza tra due coordinate ma senza la radice è un casino. Ho trovato varie opzioni per calcolare la radice ma ho visto che occupano molta memoria o sono lente. A me serve un qualcosa di veloce con un margine di errore di max 1%... Cè?
Grazie!
In oltre ho un problema: devo calcolare la distanza tra due coordinate ma senza la radice è un casino. Ho trovato varie opzioni per calcolare la radice ma ho visto che occupano molta memoria o sono lente. A me serve un qualcosa di veloce con un margine di errore di max 1%... Cè?
Grazie!
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sharky
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 59
- Ringraziamenti ricevuti 0
9 Anni 7 Mesi fa - 9 Anni 7 Mesi fa #5
da sharky
Risposta da sharky al topic come affrontare il problema?
per ora ho trovato questo provando con Excel:
Radice(x) =
z=x/100
for i= 1 to 8
{
z=z-(z*z-x)/(z*0,5)
}
funziona molto bene! per valori inferiori a 9.000.000 lo sbaglio è di 0,001 circa
a me serve fino a valori di 9.000.000
ma cé di meglio da un punto di vista di programmazione?
grazie
Radice(x) =
z=x/100
for i= 1 to 8
{
z=z-(z*z-x)/(z*0,5)
}
funziona molto bene! per valori inferiori a 9.000.000 lo sbaglio è di 0,001 circa
a me serve fino a valori di 9.000.000
ma cé di meglio da un punto di vista di programmazione?
grazie
Ultima Modifica 9 Anni 7 Mesi fa da sharky.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sharky
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 59
- Ringraziamenti ricevuti 0
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.