-
AutorePost
-
11 Novembre 2022 alle 19:52 #24448
theremino
Amministratore del forumNovità?
Sei riuscito a leggere?Rispondo alle domande che avevo trascurato:
DOMANDE
———————————————————————————————-
I valori float come sono ordinati nel file? Sequenzialmente dallo slot 1 in poi?
Quindi se ho capito bene.
Leggo i primi 4byte del mapped file ed ho il segnale sullo slot1.
Leggo i secondi 4 byte del mapped file ed ho il segnale sullo slot 2.
Leggo i terzi 4 byte del mapped file ed ho il segnale sullo slot 3,
Potrei scrivere una serie di funzioni (da condividere) per rendere più pulito e ordinato il lavoro…RISPOSTE
———————————————————————————————–
I valori float sono ordinati nel file sequenzialmente dallo Slot ZERO in poi.
Il file contiene 4096 byte che contengono i valori degli Slot dallo 0 al 999 (più 96 byte per ora non usati)
Lo Slot ZERO è un Float scritto nei Byte da 0 a 3
Lo Slot UNO è un Float scritto nei Byte da 4 a 7
Lo Slot DUE è un Float scritto nei Byte da 8 a 11
e così via fino allo Slot 999La serie di funzioni per rendere più pulito e ordinato il lavoro si trova già negli esempi
che abbiamo pubblicato in VbNet, CSharp, C++, Python, Pascal e VB6
e i link per arrivarci sono nel messaggio precedente.32 e 64 bit
———————————————————————————————–
Ti ricordo di fare attenzione alla nota sui 32 e 64 bit del messaggio precedente
nel caso ti fosse sfuggita.22 Novembre 2022 alle 19:20 #24587cpiga
PartecipanteGrazie mille. Ho ripreso ora a lavorare sul progetto… I tuoi consigli sono stati utilissimi.
Ho scritto una dll partendo dal codice che mi hai mandato. La dll chiamata da un codice di test scritto in c# funziona. Tutto compilato a 32bit.
Il problema è che matlab ormai esce solo nella versione a 64bit. Sto provando con una vecchia versione a 32bit ma è problematico… Non esiste una versione “custom a 64bit” della HAL? Potrei, partendo dal sorgenete compilare la HAL a 64bit, perchè Matlab a 64bit non mi carica la dll a 32bit….
Ciao
Carlo22 Novembre 2022 alle 19:46 #24589theremino
Amministratore del forumPuoi sicuramente prendere i nostri sorgenti dell’HAL e ricompilarli a 64 bit
(utilizzando Visual Studio 2008 come spiegato nel nostro sito)
https://www.theremino.com/downloads/notes-on-software#developmentPerò poi ti perdi tutte le altre comodità del nostro sistema, oscilloscopi, analizzatori di spettro, e tante altre applicazioni molto utili.
Dovresti ricompilarle tutte e sono quasi 200.Potresti invece fare una app a 32bit in CPP che legge dai nostri slot e scrive in un file normale, e quello MathLab può sicuramente leggerlo.
Al file devi dare le proprietà di condivisione lettura e scrittura.
Se non riesci ti aiuterò dato che ho già fatto dei file condivisibili in quel modo.
E dato che si tratta di pochi byte tutto avviene velocemente in memoria cache, anche se il file è un normale file da HardDisk.Poi metti tutto in una cartella e sottocartelle, HAL, Applicazione in C e link a MathLab
E infine avvii e chiudi tutti quanti con un solo click come fossero una unica applicazione con Theremino_StartAll
https://www.theremino.com/downloads/foundations#starter29 Novembre 2022 alle 15:37 #24658cpiga
PartecipanteAllora, vi aggiorno.
Ho utilizzato l’ultima versione disponibile di Matlab a 32 bit. Ho scritto una dll che legge il mmf e lo restituisce a matlab. Adesso da Matlab riesco a leggere i 3 canali che mi interessano del sismografo con adc 24. Rimane un problema, vorrei arrivare a 0.1 ms di frequenza di campionamento. Attualmente ottengo risultati accettabili con 1 ms di campionamento. Non riesco a capire una cosa. La scheda adc24 legge fino a 19200 sps, ma poi nelle HAL vedo che anche impostando questa frequenza di campionamento (e dividendola per il numero di canali attivi) non riesco a superare gli 800 fps (ripetizione) e conseguentemente non riesco a scendere sotto il millisecondo… Come posso aumentare dalla HAL la velocità di trasferimento dati?29 Novembre 2022 alle 16:25 #24660theremino
Amministratore del forumLa velocità di “scambio” dati della USB è limitata dal kernel del sistema operativo che ha un tick di 1 mS
Questo è un limite dei kernel di tutti i sistemi operativi, Linux e Mac compresi.Per cui nelle condizioni migliori si potrebbe arrivare a 1000 scambi al secondo ma normalmente oltre a 800 non si arriva
E questi scambi sono anche un po’ sovrastimati dal contatore dell’HAL,
se vai a vedere con l’oscilloscopio i tempi saranno di 1 o 2 mS per cui puoi avere una certa sicurezza solo fino a 500
e una buona stabilità dei tempi solo fino a 100 scambi al secondo.Per mandare più campioni li si dovrebbero mandare in “batch” cioè accumularli nel micro e poi mandarne decine o centinaia ad ogni scambio.
Ma, mi dispiace, il nostro sistema non è fatto così.Questo limite era chiaramente specificato sia nella documentazione dei Master, che in quella dell’HAL e anche in quella dell’ADC24.
Per superare questo limite dovresti scrivere molto codice, non so se nel PIC del Master o nello ESP32, quale stai usando ?
Se è lo ESP32 potresti usare una decina di generic-pins per mandare dieci dati all’HAL in ogni scambio.
Ma se è il Master il suo HAL non prevede i pin “generic” e quindi dovresti modificare il programma HAL e dovresti anche modificare il firmware che è nel PIC del Master
(è tutto open source ma il lavoro da fare sarebbe davvero molto)Inoltre l’ADC24 può arrivare a velocità alte solo se lavora a singolo canale ma ha un tempo di cambio canale molto lungo e quindi credo che con tre canali non arriverai a più di 100 200 campioni al secondo (potrei sbagliarmi e in tal caso dovresti fare i conti precisi consultando il datasheet dell’ADC24)
29 Novembre 2022 alle 16:36 #24662cpiga
PartecipanteHo due sismografi che dovrei utilizzare contemporaneamente. Il primo ha un master,un’adc24 e 3 geofoni e va su usb, il secondo è l’iot e va su wifi, sempre con ADC24… per il momento stavo provando con il primo (USB) ma mi sono accorto di questo limite… il progetto prevedeva di usarli contemporaneamente per alcune applicazioni particolari. Non è che con il wifi supero questo limite della USB? (Potrei provare ma visto che vi sto angosciando ne approfitto)… Grazie mille…
29 Novembre 2022 alle 18:27 #24666theremino
Amministratore del forumSe li usi contemporaneamente ciascuno scambia come fosse da solo, non si rallentano a vicenda.
Però lo ESP32 su WiFi va anche meno del Master, da 300 a 600 circa a seconda del segnale WiFi e della velocità del PCSe vuoi arrivare a 10 mila campioni al secondo l’unico metodo sarebbe scrivere firmware sullo ESP32 e fare dei blocchi di dati in memoria dello ESP32
Poi dovresti trasferirli in parallelo con i pin “generic” (impostandoli al loro massimo numero che non ricordo , forse 16)
Poi dovresti leggerli con il tuo software e rimetterli in fila uno dopo l’altro.E’ una cosa lunga e difficile ma altre strade (leggere lo ESP32 con la tua applicazione) sarebbe ancora più difficile.
Ci hanno provato anche altri e non sono riusciti.E conta anche che stai passando per slot in memoria che sono asincroni per cui una applicazione scrive (non si sa bene quando)
e se l’altra legge troppo velocemente finisce per leggere due volte lo stesso valoreIl nostro sistema è fatto per lavorare fino a ripetizioni di circa 100 per secondo, che per quasi tutte le applicazioni vanno benissimo.
Per andare oltre non si dovrebbero più usare gli Slot e nemmeno la USB come la usiamo noi (senza driver).29 Novembre 2022 alle 19:14 #24668cpiga
PartecipanteOk. Chiaramente mi accontenterò di 1ms o 2ms… Posso accontentarmi anche se non è l’ottimo per la mia applicazione. Adesso sto cercando di compilare a 64bit l’HAL per cercare di utilizzare le versioni più recenti di Matlab…. Ma quale versione devo compilare c# o vb? Con c# è presente una dll a 32 bit (customc ontrol) per cui non riesco…
-
AutorePost
- Devi essere connesso per rispondere a questo topic.