Salto multiplo
Moderatore:
Paolino
28 messaggi
• Pagina 3 di 3 • 1, 2, 3
0
voti
[21] Re: Salto multiplo
Si, all'interno delle ISR si (generalmente) possono chiamare funzioni.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
1
voti
[23] Re: Salto multiplo
EcoTan ha scritto:Se abbandonassi I2C e passassi a SPI avrei meno interrupt?
Innanzi tutto dovresti definire bene "meno interrupt".
Inoltre, per quale motivo dovresti avere "meno" interrupt?
Cos'hai visto/notato/immaginato che ti ha portato a fare questa domanda?
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
[24] Re: Salto multiplo
Nel post 14 ho chiarito la mia applicazione, posso anche postare il codice ma è barboso. Non sapevo nulla del protocollo I2C e sono andato a tentoni, mi stupisce che gli interrupt risultino tanto numerosi (10 per ogni lettura di due byte consecutivi) ma non ho trovato altra soluzione, d'altra parte se il modulo I2C della MCU dsPic33 può generare tali interrupt nelle diverse fasi del colloquio, suppongo che non ci sia niente di male a gestirli. Di SPI non so nulla, presumo che dia meno interrupt perché ha un clock molto più veloce e sarebbe impossibile onorarli.
0
voti
[25] Re: Salto multiplo
Non so che sensori usi ma sarebbe bene magari postarne la sigla ed il link al datasheet in modo di sapere di cosa si sta parlando.
In generale le periferiche, sia che siano interfacciate con I2C che con altre interfacce come la SPI, possono benissimo essere interrogate ad ad intervalli regolari senza usare interrupt.
Inoltre le inizializzazioni varie si fanno e basta, non si usano interrupt.
Le interrupt vengono utilizzate per intercettare eventi asincroni (come la ricezione di un carattere su linea seriale) o, in applicazioni come trasferimento di dati da un dispositivo esterno, per poter utilizzare i canali di DMA.
Tu puoi benissimo scrivere un interrupt ciclica che ti legga i sensori ogni 10ms per esempio, senza utilizzare le interrupt della I2C.
A meno che tu non abbia esigenze particolari ma, ripeto, bisognerebbe saperle queste esigenze e sapere che sensori usi.
Così, a naso, per un robottino "normale", quando fai 10 o 20 acquisizioni al secondo ne hai da vendere.
In generale le periferiche, sia che siano interfacciate con I2C che con altre interfacce come la SPI, possono benissimo essere interrogate ad ad intervalli regolari senza usare interrupt.
Inoltre le inizializzazioni varie si fanno e basta, non si usano interrupt.
Le interrupt vengono utilizzate per intercettare eventi asincroni (come la ricezione di un carattere su linea seriale) o, in applicazioni come trasferimento di dati da un dispositivo esterno, per poter utilizzare i canali di DMA.
Tu puoi benissimo scrivere un interrupt ciclica che ti legga i sensori ogni 10ms per esempio, senza utilizzare le interrupt della I2C.
A meno che tu non abbia esigenze particolari ma, ripeto, bisognerebbe saperle queste esigenze e sapere che sensori usi.
Così, a naso, per un robottino "normale", quando fai 10 o 20 acquisizioni al secondo ne hai da vendere.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
[26] Re: Salto multiplo
Il sensore è LSM9DS0
http://www.adafruit.com/datasheets/LSM9DS0.pdf
ovviamente non sono capace di saldarlo ed ho acquistato da RobotItaly un modulino Adafruit che monta il sensore.
Il fatto è che, per leggere, la MCU deve prima mandare l'address del sensore e il sub-address del registro contenente il dato, poi mandare un restart per il cambio di direzione, ricevere il low byte e mandare ACK, ricevere lo high byte e mandare NACK. Oltre start, stop e gestione errori.
Tutte queste cose si possono fare unilateralmente d'un fiato (o con una tempistica fissa, ma in tal caso bisogna comunque utilizzare gli interrupt di un timer) o bisogna aspettare i rispettivi interrupt?
Beninteso, può anche darsi che io non ho capito niente di come funziona il modulo I2C della MCU e quello è capace di fare tutto da sè. Non uso il DMA intanto perché non sono capace, e poi perché il robottino non è che deve archiviare la serie storica delle letture, invece deve elaborarle in tempo reale.
http://www.adafruit.com/datasheets/LSM9DS0.pdf
ovviamente non sono capace di saldarlo ed ho acquistato da RobotItaly un modulino Adafruit che monta il sensore.
Il fatto è che, per leggere, la MCU deve prima mandare l'address del sensore e il sub-address del registro contenente il dato, poi mandare un restart per il cambio di direzione, ricevere il low byte e mandare ACK, ricevere lo high byte e mandare NACK. Oltre start, stop e gestione errori.
Tutte queste cose si possono fare unilateralmente d'un fiato (o con una tempistica fissa, ma in tal caso bisogna comunque utilizzare gli interrupt di un timer) o bisogna aspettare i rispettivi interrupt?
Beninteso, può anche darsi che io non ho capito niente di come funziona il modulo I2C della MCU e quello è capace di fare tutto da sè. Non uso il DMA intanto perché non sono capace, e poi perché il robottino non è che deve archiviare la serie storica delle letture, invece deve elaborarle in tempo reale.
0
voti
[27] Re: Salto multiplo
Non servono le interrupt per usare I2C, come ho detto prima le interrupt si utilizzano per intercettare eventi asincroni. Non ha senso usarle per interfacciare un sensore, le operazioni si eseguono in sequenza.
L'interrupt di un timer che fornisce una base tempi a tutto il sistema è praticamente sempre presente. Ti permette di gestire timer software o, in generale, per avere una base tempi semplice e leggera per fare cose ad intervalli regolari come, ad esempio, effettuare il multiplexing di un display con cifre a 7 segmenti, o per interrogare ad intervalli regolari delle periferiche (come nel tuo caso).
Utilizzare le interrupt per comunicare con un sensore tramite I2C è una complicazione inutile e controproducente. Non porta nessun vantaggio, anzi, ne porta solo casini.
Poi, per carità, ognuno è libero di mettersi nei casini che preferisce eh!
Alcuni esempi (che utilizzano I2C, ma sarebbe lo stesso per la SPI) per chiarire meglio il concetto.
Sensore di temperatura.
Quando devo rilevare la temperatura eseguo in sequenza tutte le operazioni necessarie per interrogare il sensore, ottengo il valore e continuo la mia esecuzione.
Real time clock
Faccio esattamente la stessa cosa che farei per il sensore di temperatura.
Memoria RAM esterna
Se devo leggere o scrivere una locazione faccio esattamente come i due esempi prima, mi leggo il valore e proseguo.
Trasferimento di un blocco di memoria da RAM di dimensioni importanti.
In questo caso ha senso usare l'interrupt perché la I2C non è un campione di velocità. In questo caso prima (senza usare le interrupt) predispongo la RAM esterna per un trasferimento di un blocco, poi porgrammo in modo adeguato un canale di DMA (triggerato dalla interrupt) in modo che quando il modulo riceve un dato, questi me lo va a mettere in un buffer nella memoria del micro. In questo caso (anche senza canale di DMA) ha senso usare l'interrupt proprio per non bloccare il micro nell'attesa fra un byte e l'altro. Usando il canale di DMA addirittura la CPU non interviene nel trasferimento!
Come vedi le interrupt di usano in casi particolari.
L'interrupt di un timer che fornisce una base tempi a tutto il sistema è praticamente sempre presente. Ti permette di gestire timer software o, in generale, per avere una base tempi semplice e leggera per fare cose ad intervalli regolari come, ad esempio, effettuare il multiplexing di un display con cifre a 7 segmenti, o per interrogare ad intervalli regolari delle periferiche (come nel tuo caso).
Utilizzare le interrupt per comunicare con un sensore tramite I2C è una complicazione inutile e controproducente. Non porta nessun vantaggio, anzi, ne porta solo casini.
Poi, per carità, ognuno è libero di mettersi nei casini che preferisce eh!
Alcuni esempi (che utilizzano I2C, ma sarebbe lo stesso per la SPI) per chiarire meglio il concetto.
Sensore di temperatura.
Quando devo rilevare la temperatura eseguo in sequenza tutte le operazioni necessarie per interrogare il sensore, ottengo il valore e continuo la mia esecuzione.
Real time clock
Faccio esattamente la stessa cosa che farei per il sensore di temperatura.
Memoria RAM esterna
Se devo leggere o scrivere una locazione faccio esattamente come i due esempi prima, mi leggo il valore e proseguo.
Trasferimento di un blocco di memoria da RAM di dimensioni importanti.
In questo caso ha senso usare l'interrupt perché la I2C non è un campione di velocità. In questo caso prima (senza usare le interrupt) predispongo la RAM esterna per un trasferimento di un blocco, poi porgrammo in modo adeguato un canale di DMA (triggerato dalla interrupt) in modo che quando il modulo riceve un dato, questi me lo va a mettere in un buffer nella memoria del micro. In questo caso (anche senza canale di DMA) ha senso usare l'interrupt proprio per non bloccare il micro nell'attesa fra un byte e l'altro. Usando il canale di DMA addirittura la CPU non interviene nel trasferimento!
Come vedi le interrupt di usano in casi particolari.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
[28] Re: Salto multiplo
OK grazie. Prima di andare avanti col progetto proverò a riscrivere, su questa base, il colloquio coi sensori. E' chiaro che un sospetto ce l'avevo, altrimenti non mi sarei soffermato ancora così tanto dopo che le letture avevano preso a funzionare.
28 messaggi
• Pagina 3 di 3 • 1, 2, 3
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 1 ospite

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

