Stai visualizzando 8 post - dal 9 a 16 (di 19 totali)
  • Autore
    Post
  • #24448
    theremino
    Amministratore del forum

    Novità?
    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 999

    La 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.

    #24587
    cpiga
    Partecipante

    Grazie 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
    Carlo

    #24589
    theremino
    Amministratore del forum

    Puoi 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#development

    Però 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#starter

    #24658
    cpiga
    Partecipante

    Allora, 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?

    #24660
    theremino
    Amministratore del forum

    La 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)

    #24662
    cpiga
    Partecipante

    Ho 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…

    #24666
    theremino
    Amministratore del forum

    Se 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 PC

    Se 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 valore

    Il 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).

    #24668
    cpiga
    Partecipante

    Ok. 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…

Stai visualizzando 8 post - dal 9 a 16 (di 19 totali)
  • Devi essere connesso per rispondere a questo topic.