La applicazione HAL


HAL, il collegamento col mondo esterno

Senza l’HAL (Hardware Abstraction Layer) comunicare con i sensori e gli attuatori sarebbe difficile. Per ogni tipo di sensore si dovrebbe scrivere un pezzo di firmware (come si fa con Arduino) e ad ogni nuova variazione dei sensori, si dovrebbe riscrivere il firmware.

E sarebbe anche molto difficile, raggiungere le prestazioni, che si raggiungono con il nostro firmware, e il nostro HAL (ci lavoriamo da 3 anni, dieci ore al giorno, festivi compresi – fanno oltre diecimila ore, mica noccioline!)



Ci hanno chiesto “Come mai si deve per forza usare l’HAL ?” 

L’HAL deve essere usato se si deve accedere all’hardware via USB. In teoria non è assolutamente necessario, ma noi non abbiamo trovato un sistema migliore. Per chi volesse provarci, ecco le informazioni che servono:


Perché non esporre dei meccanismi per guidare l’HAL dall’esterno?

Per quante funzioni si esponessero, mancherebbe sempre qualcosa (ad esempio i grafici dell’oscilloscopio, le configurazioni, la riconnessione automatica,  la calibrazione…). Ma supponiamo che qualcuno, con un lavoro faraonico, arrivasse a controllare tutte le funzioni dell’HAL. Il risultato sarebbe soltanto, di aver ricreato un clone dell’HAL, in una altra applicazione.

Come già scritto nel precedente paragrafo, se qualcuno vuole provarci, si accomodi.


Come usare l’HAL

L’HAL può aprirsi e chiudersi da solo in modo invisibile. Tutti le applicazioni che ne hanno bisogno, lo aprono e chiudono loro stesse. Normalmente l’HAL si apre minimizzato e non da fastidio. Ma quando serve, si può aprire la sua finestra che è molto utile, per effettuare comode regolazioni, e provare i sensori. Poi lo si minimizza di nuovo, così la prossima volta si aprirà minimizzato.

Come aprire e chiudere l’HAL da dentro a una applicazione è spiegato qui:
http://www.theremino.com/wp-content/uploads/files/ThereminoHAL_Start-Stop.rtf


E se una applicazione non è in grado di aprire e chiudere l’HAL?

In questo caso si prepara una cartella con la propria applicazione, l’HAL e un file “Start All”, come spiegato qui:
http://www.theremino.com/downloads/foundations#starter

  1. Alessio says:

    Ciao Luca,

    Puoi scaricare un piccolo programmino che abbiamo fatto per aiutarti, in sostanza lanci il programma HAL selezioni pin 1 con ADC_16 slot 0 pin 2 con ADC_16 slot 1, ricordati di mandare in ingresso una tensione massima di 3,3 V (nel caso fosse maggiore usa un partitore resistivo) poi lanci il programma Theremino_log e fai partire con l’unico pulsante l’acquisizione.

    Lui ti scriverà su C: un file chiamato “log.csv” metterà data,ora,valore pin1, valore pin2 ogni secondo. Il valore letto va da 0 a 1000 su una scala da 0 a 3,3 V .

    Ricordati che il programma continuerà a scrivere in coda al file log, quindi se vuoi lo puoi rinominare, lui ne ricreerà un altro.

    Spero di averti fatto cosa gradita per qualsiasi cosa chiamaci a me o Livio , vediamo di aiutarti.

    Un saluto Alessio.

    http://www.theremino.com/files/DataLogger.zip

    • giuseppe says:

      Il valore letto va da 0 a 1000 su una scala da 0 a 3,3 V

      in questo momento non mi ricordo e non ho modo di verificare se i valori tra 0 e 1000 sono interi oppure hanno una parte decimale.

      Significa che ogni unità corrisponde a 0.30 milliV ?

      • Livio says:

        Ogni unità non corrisponde a 0.30 mV ma a 3.3 mV (3.3 V / 1000 = 3.3 mV)
        Le unità non sono intere, hanno 4 o 5 decimali circa.
        Quindi si arriva verso i micro volt di risoluzione.

        Ma questo non vuol dire che la precisione delle misure sia intorno ai micro volt.
        – La precisione effettiva è nell’ordine dei milli-volt (10 bit).
        – Il sovra-campionamento e la media (nel firmware), la portano intorno ai 200 uV (14 bit).
        – Infine il filtro IIR adattativo (nella applicazione HAL), fa una interpolazione continua. Quindi tra un valore letto e il successivo potresti trovare anche differenze di una frazione piccolissima di unità. Nel range dei uV.

        Ma questa non è vera precisione, solo interpolazione tra valori successivi e solo valida se si usa un filtro lento (valori bassi). Un filtro lento riduce di molto la velocità di risposta.

        Anche se si tratta solo di sovra-campionamenti, medie e interpolazioni, i dati ne escono molto migliorati. Paragonati ai dati di un ADC grezzo, sono notevolmente più stabili e esenti da rumore.

  2. Alessio says:

    Per chi fosse interessato può usare questo script (si apre con Theremino script) per leggere da 1 o più
    canali (slot) che passano attraverso sistemi Hw Master interfacciati con altrettanti Theremino HAL

    http://www.theremino.com/files/ThereminoLogger_ForThereminoScript.zip

  3. Livio says:

    Alcuni utenti hanno scritto che toccando i PIN del Master, a volte il programma HAL smette di comunicare con l’hardware, scrive una riga rossa con il messaggio “disconnesso” e si deve premere “Riconosci”.

    Questo si verifica se il corpo è carico di elettricità statica e manda una piccola scarica elettrica a un pin. Tutti i componenti sono scelti con cura e non si rompono ma, anche se non si vede la scintilla, si tratta sempre di tensioni di molte migliaia di Volt che mandano in tilt temporaneamente il Microcontrollore.

    Durante le prove si faccia attenzione a maneggiare i moduli solo da spenti, oppure a toccare prima la massa (ad esempio il connettore USB). Il progetto finale dovrebbe sempre prevedere un contenitore isolante che impedisca agli utenti di toccare parti metalliche sotto tensione.

  4. Livio says:

    Leo ha scritto alcune osservazioni sull’HAL

    DOMANDA: non ho ben capito se ho trovato un bug, oppure sto prendendo un abbaglio.
    Il set-up e questo:
    Theremino HAL 3.4
    Pi1 Pwm_16
    Slot 0
    Max value 680
    Min value 180
    il resto tutto a default.

    RISPOSTA: Il PWM serve solo per regolare la luminosità dei led o generare una tensione di uscita variabile (con un filtro passa bassa aggiuntivo) Per i servo non devi configurare i PIN come Pwm ma come Servo_8 o Servo_16

    DOMANDA: Impostando il Min e il Max, mi aspetto che modificando il duty cycle (con mouse su e giu) raggiunto il valore minimo rimanga fissato al valore minimo, cosi’ come per il valore massimo, invece, controllando con l’oscilloscopio il duty cycle, vedo che comunque passa dallo 0% al 100% e quindi a mio parere i valori di Min e Max non vengono rispettati.

    RISPOSTA: I valori Min e Max non si usano per queste cose, per ora tienili sempre a 0 e a 1000,
    fai conto che non esistono e rimandali a quando avrai fatto amicizia con il sistema

    DOMANDA: Inoltre a mio avviso, nella finestra “pin details”, la scala di destra che va da 0 a 1000, dovrebbe autosettarsi ai valori di Min e Max o sbaglio?

    RISPOSTA: Difficile spiegarlo ma fino ad ora è sembrato comodo non limitare i valori.
    Provo a spiegarlo in parte:
    – Min e Max non sono dei limiti ma dei valori di “rapporto di scala”
    – Gli SLOT possono contenere numeri grandissimi o piccolissimi.
    – Non limitare i valori tra Min e Max è voluto e permette alcune operazioni altrimenti impossibili
    – La normalizzazione “standard” è da 0 a 1000 ma niente impedisce di lavorare con altri range
    – MIN e MAX permettono di convertire valori da 0 a 1000 in range alieni oppure di convertire
    ogni range “strambo” in valori da 0 a 1000.
    – Dopo che Min e Max hanno fatto la conversione di scala si potrebbe facilmente limitare i valori tra Min e Max ma si perderebbe la possibilità di usare valori “estrapolati”

    DOMANDA: Tra un impulso e il successivo da inviare al servo, ci vuole un delay, che lo standard vorrebbe di 20 ms, (ma questo e teorico), poi va bene qualunque valore da 40 Hz a 200 Hz

    RISPOSTA: Giustissimo, usa i tipi Servo_8 e Servo_16 e vedrai che va tutto a posto,
    se ricordo bene come “delay” usiamo 16 mS ( 60 Hz ) che vanno bene per tutti i servo sia analogici che digitali.
    E, mi raccomando per settare i fondo corsa dei servo non usare MIN e MAX ma le apposite caselle.

  5. Livio says:

    Leo ha chiesto:
    ———————————————————————
    Vorrei posizionare quattro “key” sotto un vetro (spessore 2mm), come posso diminuire le interferenze tra i tasti? Quali sarebbero le dimensioni ottimali dei key? Come porto i fili ai key? Posso usare un flat cable interponendo tra un filo del key e il successivo un filo di GND? Posso generare un unico PCB con i key (al momento ho usato del rame adesivo)? Che layout consigli?

    RISPOSTE
    ———————————————————————
    I capacitive keys lavorano su variazioni di capacità piccolissime se i disturbi dati da tasti adiacenti, fili lunghi e vetro spesso sono troppi il segnale utile si riduce e diventa difficile o anche impossibile farli
    funzionare.

    E non basta farli funzionare appena appena, deve esserci un segnale forte per farli funzionare in modo affidabile anche dopo molto tempo e con variazioni di temperatura.

    Con una precisa taratura puoi migliorare un po’ il loro comportamento leggi molte volte le pagine da 16 a 21 del ThereminoHAL_Help e usa il visualizzatore e i numeri che indica in basso per vedere quanta
    variazione ottieni nelle varie situazioni. E leggi le note sul fatto che dopo ogni spostamento di fili BISOGNA ritarare.

    Tendenzialmente devi avere valori più alti possibile senza dito e più bassi possibili con il dito. E dovresti anche minimizzare l’influsso sui tasti vicini.

    Cosa puoi fare per migliorare
    ———————————————————————————————-
    – Usare vetro più sottile
    – Non usare certi vetri che non vanno bene (vetri al piombo)
    – Tenere il rame sopra e non sotto (più vicino al dito)
    – Usare tasti più grandi
    – Costringere l’utente a toccare con tutto il polpastrello (non punta del dito)
    – Distanziare di più i tasti
    – Qualunque siano i fili di collegamento (flat o normali) accorciarli
    – Tenere il Master a destra dei quattro tasti in modo da ridurre al massimo i fili

    DOMANDA: Usare un flat cable interponendo tra un filo del key e il successivo un filo di GND?
    ———————————————————————————————-
    Qualunque cavo usi, schermato, flat o singoli fili, con massa in mezzo o senza i risultati saranno simili, più fai i fili lunghi e più diventa difficile farli funzionare bene.
    Se poi aggiungi un vetro spesso hai un fattore ulteriore di difficoltà.

    DOMANDA: Posso generare un unico PCB con i key?
    ———————————————————————————————-
    Dove caspita hai trovato del rame adesivo ??? Lo voglio anch’io!
    Si puoi fare un PCB unico, ma tieni distanziati quanto basta i tasti.

    DOMANDA: Che layout consigli?
    ———————————————————————————————-
    Tieni distanziate anche le piste (tra di loro e dai tasti) e falle più corte possibile.

    Usare moduli Theremino-CapSensor al posto dei cap-keys
    ———————————————————————————————-
    Se invece tu usassi quattro moduli CapSensor (uno per tasto e ti costerebbero una cifra) potresti fare cose turche. Noi abbiamo fatto una specie di mouse che funziona attraverso la vetrina di un negozio (6 mm) e che nessun touch screen riuscirebbe a attravesare.
    Con quattro strisce si sente la posizione del dito e si muove il cursore su schermo come un mouse.
    Il software ThereminoHelper può muovere il cursore su schermo prendendo i dati da due slot (poi per fare un mouse si deve fare una parte di software aggiuntiva che miscela i quattro lati e permette di tarare i limiti…)

    ciao
    Livio

  6. francesco ardillo says:

    vorrei sapere se è possible collegare un trasduttore di spostamento lineare a theremino, utilizzandolo come datalogger, se si vorrei sapere come fare (p.s le caratteristiche del trasduttore le ho inviate mediante fb).

    saluti e grazie

  7. ziotibia says:

    Finalmente qualcuno che fa lavorare la testa e non
    solo il saldatore… ;-)

    Una richiesta : potreste postare una descrizione sintetica dei
    comandi tra HAL e Master ?

  8. starlight says:

    Salve ho installato wine e altri programmi win come descritto sulla pagina linux ma aprendo la hall su pin 1-6 non vede nulla.
    come posso risolvere

    • Livio says:

      Credo che sia un problema di Wine che non riesce a raggiungere la porta USB. Non so se installando i driver giusti la cosa è risolvibile, dovresti chiedere a Roberto che è l’esperto di sistemi “alieni”, scrivigli a: development@theremino.com

      Il mio consiglio invece è di usare Windows, sono due anni che saltano fuori continui problemi su Linux a Mac e nessuno li ha ancora risolti, cioè si risolvono, ma poi rinascono leggermente diversi… invece su Windows abbiamo quasi cinquanta applicazioni che funzionano praticamente con zero problemi. Se il motivo di usare Linux è che Linux è più stabile, la pratica non lo conferma proprio. Se il motivo è risparmiare, io sono il primo a voler risparmiare! Ma risparmiando troppo non funziona più niente e si perde solo del tempo.

      • alieno says:

        prendo spunto da questo commento, anche se vecchio (combinazione) di un anno esatto, per una amara costatazione del software ‘thereminico’: contrariamente a quanto scritto sul sito, si tratta di un progetto completamente ‘Windows based’, altro che disponibile per Linux, Mac, Android!
        Non trovo nulla di male nel rivolgere la propria attenzione ad un particolare sistema operativo, ma trovo, francamente, scorretto non metterlo bene in evidenza.
        Mi pare stridente che, a fronte di un lato hardware completamente ‘open’, ci si rivolga proprio ad un sistema operativo che sintetizza l’esatta antitesi del concetto di open software. Ed ancora più stridente è il fatto che, invece di stimolare lo sviluppo, verso ‘sistemi alieni’ si metta bene in evidenza il fatto che sono finalmente disponibili delle piccole macchine Windows che rendono ormai obsoleti i Raspberry!
        Il vostro riferimento alla Free Software Foundation posto in calce ad ogni pagina di codesto sito, è desisamente fuori luogo.
        paolo

        • Livio says:

          Il software thereminico, come abbiamo scritto ripetutamente, funziona su tutti i sistemi operativi ma “con ridotte prestazioni”

          … Sui PC e Tablet con Windows, tutte le nostre applicazioni funzionano con il 100% di efficienza e funzionano subito (non si devono eseguire lunghe e complicate installazioni)…

          Ci siamo espressi chiaramente. La frase è anche evidenziata in giallo e riportata in modo evidente, all’inizio delle pagine seguenti:
          http://www.theremino.com/downloads/raspberry-pi
          http://www.theremino.com/downloads/linux
          http://www.theremino.com/downloads/mac-osx

          Il nostro software è Free e Open e funziona perfettamente su Mono (macchina virtuale multi-piattaforma). Da noi mono è stato completato e funziona al 100% con altissima efficienza. Sul Linux non è stato completato e funziona male. Se lo completerete le nostre applicazioni funzioneranno al 100%, anche su Linux, altrimenti saranno poco efficienti. Si tratta del vostro mondo, e sta a voi curarlo, e farlo funzionare bene.

          La concezione su ciò che è “giusto” (stimolare lo sviluppo di Linux) non è la verità comandata dagli dei. Fortunatamente non tutti la pensano uguale a questo mondo…

          Alcuni di noi pensano che è inutile continuare a perdere tempo su sistemi diversi e che sarebbe ora di unificarsi su un unico sistema operativo. E questo sistema operativo non sarà Linux, con tutte le sue pignolerie, ma un sistema operativo che farà girare tutto.

          Oggi sembra impensabile, che un sistema operativo, possa far girare indifferentemente applicazioni Windows, Android, Mac e Linux. Ma molte cose, che sembravamo impensabili solo pochi anni fa, le stiamo usando tutti i giorni.

          Quindi smettiamola con questa guerra “Linux contro Windows” e lavoriamo tutti per unificare. La nostra parte la stiamo facendo alla grande. La vostra parte è aggiustare i bachi di Mono su Linux. Fatelo!

          • alieno says:

            Caro Livio,
            la guerra Linux contro Windows l’hai dichiarata tu e tu stesso ne hai dichiarato indiscusso vincitore il secondo giacchè, come tu stesso affermi, il sistema funziona al 100% solo su macchine Windows e su tutti gli altri (linux, macos, android, etc. ) può essere adattato mediante emulazione (dell’ambiente microsoft).

            Anche il “giusto” e gli dei li evochi tu, io parlo solo di chiarezza nella comunicazione delle effettive caratteristiche del progetto.

            Ciò che tu chiami ‘pignolerie’ a me sembrano più propriamente specifiche tecniche.
            I termini ‘Free’ ed ‘Open Source’ sono appunto delle specifiche che hanno un significato ben preciso ed andrebbero usate con ponderazione.
            Per fortuna in giro ci sono dei pignoli che si ostinano a far girare un sistema in un sistema operativo che può essere talmente adattabile da poter girare su qualunque hardware includendo, al limite, solo lo stretto necessario allo scopo… gente aliena al sistema unico che tu auspichi.

            paolo

            • Livio says:

              Va bene, forse hai ragione, ognuno ha il diritto di pensare come vuole. Non facciamo battaglie, invece di discutere, scriviamo il software necessario per far funzionare tutto su tutto. Io ora torno a scrivere e produrre, fallo anche tu e alla fine avremo tutti quanti applicazioni bellissime che girano su ogni sistema operativo dell’universo.

              Se ti serve aiuto per migrare le nostre applicazioni su Linux, o altri sistemi, chiedi e ti daremo tutto l’aiuto possibile.

      • Alessio says:

        Buongiorno Paolo ,

        colgo l’occasione di risponderti , visto che sono tra i collaboratori stretti di Livio e del sistema Theremino , nella descrizione sul sito vengono menzionati anche sistemi cosiddetti “alieni” chiamati cosi’ perche’ tantissimi utenti usano Windows , tuttavia chi vuole cimentarsi con Linux , puo’ farlo , iniziando ad usare Mono , che permette da subito di sperimentare senza scrivere una riga di codice, questo pero’ non vieta a chi ne ha le capacita’ di cimentarsi su Linux scrivendo nuovo codice nativo senza usare emulatori o software interpreti.
        Incentivare l’uso di Windows non e’ assolutamente in conflitto con un sistema Open , anzi per la stragrande maggioranza degli utenti e’ l’unico sistema operativo “user Friendly” conosciuto e usato in maniera massiccia in tutto il mondo.
        Concludendo , abbiamo messo tutto sul banco , Hardware e Software , chi vuol contribuire a sperimentare e migliorare il sistema Theremino su altre piattaforme ben venga , siamo contentissimi di accoglierlo nei nostri utenti/collaboratori , purtroppo con le nostre risorse attuali (lavoriamo tutti a tempo perso ) non e’ possibile fare differente , dalle soluzioni proposte.

        • alieno says:

          Ciao Alessio,
          il fatto stesso di chiamre “alieni” tutti i Sistemi Operativi che non siano Windows vi qualifica di per se come una ‘comunità’ di utenti Windows e qualifica il vostro sistema come come un sistema di input-output per sistemi Windows che può essere adatttato ad altri sistemi mediante emulazione.
          Nulla di male in tutto ciò, ma perchè non scriverlo chiaramente?

          Che Windows vada a nozze con un sistema open, mi pare davvero una affermazione impegnativa, quasi quanto il concetto che è open perchè lo usano in tanti ed è user-friendly…
          La Vostra parte di software è libera, non quella Microsoft, necesssaria per il corretto funzionamento della vostra parte. Anche qui un ‘gioco delle tre carte’ per non dire chiaramente “il nostro software è free and open per gli utenti Microsoft”.

          Il mettere il materiale a disposizione è un vostro merito indiscutibile, ed appunto merita maggiore chiarezza e precisone nel descriverne le caratteristiche.

          paolo

          • Livio says:

            Lo abbiamo scritto chiaramente! Lo scriviamo spesso e volentieri.

            Ma Windows non è “Necessario per il corretto funzionamento” come tu scrivi erroneamente.

            Il funzionamento di TUTTE le nostre applicazioni è basato sulla macchina virtuale DotNet (Mono su Linux) che è multipiattaforma. Avremmo potuto scrivere in CPP o in altri linguaggi puramente Windows ma, per facilitare l’uso anche sugli altri sistemi, abbiamo scritto tutto in un linguaggio comune.

            Se poi questo linguaggio comune, su Linux e Mac è stato implementato solo in parte, non siamo noi a doverlo aggiustare, devono farlo gli esperti di Linux e Mac.

            E francamente non è proprio il caso di discutere, dato che è tutto in Open Source, se siete interessati alle nostre applicazioni basta usarle, modificarle, migrarle…

            E, basta chiedere, noi siamo disponibili a dare tutto l’aiuto possibile.

          • Alessio says:

            Ciao Paolo,

            in effetti la parola “Sistemi Alieni” è nata per scherzo come dice Livio. I nostri programmi sono stati sviluppati su Mono che, come sai, lavora su tutti i sistemi operativi, compreso Windows. Con quest’ultimo abbiamo fatto decine e decine di test, correggendo bug e migliorando le applicazioni. Purtroppo in altre piattaforme, in primis Linux, non abbiamo avuto lo stesso effetto, vuoi perché Roberto ci ha lavorato meno ma sopratutto perché mono, su quel sistema, non ha funzionato a dovere. Per farti capire, io ho usato Raspberry (distribuzione Raspbian), con le applicazioni Thereminiche. Tutto bene, fintanto che non ho aggiornato il sistema ad una nuova versione, quest’ultima compilata per usare il coprocessore matematico, non faceva andare le nostre applicazioni, e la colpa non era del nostro codice, ma di Mono che, su Raspberry, contiene errori nelle librerie che usano i Floating Point hardware.
            Sarei molto felice che tu potessi aiutarci in questo, anche solo per poter scrivere a caratteri cubitali, “Il Sistema Theremino funziona bene, anche su le altre piattaforme”, cancellando definitamente la parola Alieno.

  9. BoB says:

    Come scritto all’inizio della pagina http://www.theremino.com/downloads/linux :
    “Le applicazioni che non accedono alla USB possono essere eseguite con Wine, quelle che accedono alla USB devono essere eseguite con Mono.”

    Occorre installare le librerie per gli Slot e per la USB HID e anche Mono (tipicamente già presente in molte distribuzioni Linux).
    Tali librerie sono scaricabili e già compilate per sistemi Linux a 32 bit. Per Linux 64 bit occorre utilizzare i File sorgenti e rigenerarle.

    • alieno says:

      ho provato a seguire passo passo le istruzioni fornite per far girare il software sotto linux, ma il programma ‘prinicipale’ Theremino HAL non funziona.
      Ho provato a ricompilare tutti i files sorgenti indicati (a proposito il progetto C_HID_API manca del riferimento alla libreria pthred) temendo un disallineameno con il mio Debian Jessie, ma ancora senza alcun risultato.
      Esaminando il log file command.log oltre alla eccezione finale:

      Unhandled Exception:
      System.EntryPointNotFoundException: CloseHandle
      at (wrapper managed-to-native) Theremino_HAL.Theremino_HID:CloseHandle (int)
      at Theremino_HAL.Theremino_HID.Finalize () [0x00000] in :0

      mi pare di capire che manca la dll winmm.dll (media player di windows??!): difficile capire perchè ci sono dei finti errori dovuti al fatto che mono fa un guessing dei nomi delle librerie che necessita…

      qualcuno sa darmi delucidazioni, indicazioni?
      E’ possibile purgare il progetto da inutili forms e zuccherini grafici vari e limitarsi ad una essenziale cli?

      paolo

      PS: ancora una osservazione, ho notato che fra i sorgenti sono compresi anche quelli di libusb, non me ne spiego la ragione… non basta quella delle distro?

      • Livio says:

        Questi sono esattamente i problemi che abbiamo incontrato noi su Linux. E sono i motivi che ci portano a sconsigliare Linux, a chi vuole lavorare serenamente.

        I difetti che stai incontrando non dipendono da noi, ma al 100% dai driver di Linux, dalle diverse implementazioni di Linux (Debian, Ubuntu etc..) e dai difetti della macchina virtuale su Linux, che contiene parti non completate e bug.

        Noi abbiamo perso mesi, per stare dietro alle stranezze di Linux e, te lo assicuro, abbiamo fatto tutto il possibile. Il problema è che appena riusciamo, con gran fatica, a stabilizzare il funzionamento, le librerie di Linux cambiano, escono nuovi bug e siamo da capo.

        E’ importante che sia chiaro a tutti: Le nostre applicazioni sono scritte su macchina virtuale multi-piattaforma, e sono scritte bene. Lo dimostrano gli utenti Linux che le stanno usando, ti posso mettere in contatto con decine di loro. Molti hanno scritto le loro osservazioni nel nostro blog e nessuno ha mai scritto, che non funzionano per causa nostra.

        Spesso però le nostre applicazioni non funzionano su Linux e il motivo è sempre lo stesso: la lista di cose da installare, compilare e controllare su Linux è disumanamente complessa. Per cui “scappa” sempre qualcosa, o si trascura qualcosa, che si ritiene non importante.

        ———————————–

        Per i particolari ti metto in contatto con Roberto:
        http://www.theremino.com/contacts/about-us#roberto
        development@theremino.com

        Roberto ha la missione del “cross-platform” e sa tutto sulle librerie di Linux. Lui lavora normalmente su Ubuntu, ma riuscirà sicuramente a sistemare anche il tuo Debian.

      • Livio says:

        Paolo,
        ho dimenticato di accoglierti tra noi, lo faccio adesso: Benvenuto tra i threminomani! Ci fa molto piacere di averti come collaboratore. Aiutaci a migliorare il funzionamento su Linux, se trovi qualcosa che possiamo migliorare, lo faremo prontamente.

        Devi scusare la mia orsaggine e poca diplomazia, sono un programmatore da combattimento, e sono più bravo a comunicare con i Mosfet, che con gli umani.

        Scusa anche il termine “alieni”, voleva essere scherzoso e non dispregiativo. Io gli alieni li rispetto molto, e mi piacerebbe anche, durante la breve vita umana, poterne conoscerne qualcuno.

        • alieno says:

          nessun problema, Livio, piacere di conoscerti.
          ammiro tutti i ‘sussurratori di mosfet’, e vorrei imparare da voi l’arte di saperli adoperare, io che ho avuto modo di conoscerli da studente in tanta teoria e poca pratica circuitale.
          E’ proprio codesto interesse che mi ha attratto sulle vostre pagine confidando proprio nel senso pratico e funzionale che contraddistingue chi lavora sui circuiti…

          per quanto riguarda le ‘tecnicaglie’, dico la mia chiedendoti/vi di dirmi se ho capito male e faccio affermazioni errate.
          da quel che capisco la necessità di mono è dovuta in toto (o quasi) alla gestione della interfaccia grafica.
          assumo che tutto ciò che serva, a livello di ‘sistema’ è racchiuso, nel caso di linux nelle due librerie ‘.so’ ( che, in effetti, si compilano correttamente).
          capisco che per applicazioni anche semplici l’interfaccia possa rappresentare non solo un semplice assessorio, ma la scelta di ‘mono’ comporta di fatto il vincolo alla piattaforma ms windows.
          io credo che il mercato offra delle valdide alternative sia cross-platform che ‘custom-platform’, ma mi chiedo:
          veramente per configurare/monitorare una ‘istanza’ di theremino serve una interfaccia grafica? non potrebbe bastare compilarsi poche righe di c (o del proprio linguaggio preferito) ed avere a console un semplice ‘keep-alive’ che informi sullo stato dell’hardware? non sarebbe addirittura sufficiente per molte applicazioni ‘semplici’?

          paolo

          • Livio says:

            Stai facendo un po’ di confusione, Mono non è assolutamente legato a Microsoft. Mono è la macchina virtuale multi-piattaforma per eccellenza. Praticamente non esiste alternativa, per applicazioni complesse come le nostre.

            Noi avremmo potuto scrivere applicazioni solo Windows, chiamando direttamente le librerie di Windows e molte volte sarebbe stato più facile. Ma le abbiamo invece scritte in un linguaggio comune, proprio per essere multi-piattaforma.

            Mono su Windows si chiama Dot Net, ma sono la stessa cosa. L’unica cosa che cambia è l’implementazione specifica dei driver e delle librerie, su Linux e su Windows. Ma il linguaggio fondamentale è il CLR, che è identico per tutti.

            Il CLR (Common Language Runtime) non è un linguaggio chiuso di Microsoft!!! Le specfiche del CLR sono Open Source al 100%.

            Le “valide alternative cross-platform” di cui tu parli, cosa sono? Noi non le conosciamo.

            Se intendi Java o Pyton, ti posso assicurare, che sono troppo lenti e troppo semplici. Scrivere le nostre (quasi cinquanta) applicazioni in quei linguaggi, sarebbe come scrivere al buio, con una piuma di struzzo. Se non ci credi hai solo da provare. Non sei il primo a pensare a queste possibilità, ma si sono tutti arresi quasi subito.

            Riguardo al semplificare, certo sarebbe possibile. Si potrebbe fare tutto in una finestra nera tipo “consolle”, alla moda di Linux. E scrivere i dati da riga di comando, tipo: Slot1=100
            Slot1=200

            Ma ci sono alcuni problemi:
            1) Pur conoscendo bene il nostro software. Modificare parti difficili come la comunicazione USB, richiederebbe mesi di lavoro.
            2) Non riesco proprio a immaginare quanto ci vorrebbe a configurare l’hardware senza interfaccia grafica, tools grafici, oscilloscopi e accessori.
            3) Il risultato finale di tanto lavoro, sarebbe più o meno usabile solo per cose ultrasemplici, tipo: Accendo un led… Spengo un Led.

          • Livio says:

            Ancora due parole riguardo a Mono e CLR.

            Dato che si tratta di un linguaggio immenso, è molto probabile che Mono, su Linux, non verrà mai completato. Esiste già la versione 4.5, e noi continuiamo a usare la versione 3.5, proprio per facilitare la compatibilità… ma purtroppo su Linux, non hanno completato nemmeno la versione 2.0.

            Ma ci sono buone notizie! Microsoft (come al solito molto più generosa di quel che si pensa) ha annunciato che: “Il CLR sarà nativamente disponibile anche per Linux e MacOs a partire dalla versione 2015 del framework”

            E “nativamente” vuole dire che da un giorno all’altro, tutto funzionerà bene, esattamente come ora funziona su Windows.

            E vuole anche dire, che il lavoro sporco, che nessuno di Linux riesce a finire, lo stanno facendo loro per voi, e pure gratis!

            • alieno says:

              Evviva la generosità della Microsoft e, aggiungo io, di Big G, Oracle, etc…
              alla generosità delle majors credo molto poco. credo sia fuori contesto il concetto di generosità in un ambiente che deve fare con bilanci e consigli di amministrazione e massimizzazione di profitti…
              va bene tutto, va bene scegliersi i propri fornitori di beni e servizi come si crede secondo le proprie preferenze, inclinazioni abitudini, etc… d’altra parte il mondo reale è fatto di compromessi e di ‘mezze-verità’. tutti noi scegliamo i nostri fornitori in un modo o nell’altro (non foss’altro che nessuno di noi si produce il silicio che usa, in cantina) sta a noi valutare la fairness di ciascuno rispetto ai nostri desideri o principi etici o quel che si vuole.
              c’è chi sceglie le ‘minors’, mi si passi il termine, tutti quei ‘produttori’ a vario modo indipendenti: università, centri di ricerca, consorzi, comunità indipependenti, comunità supportate ma majors, etc… un mondo che pur nel suo disordine ha espresso novità evidenti in praticamente ogni settore dell’IT. in sintesi ha rotto un monopolio, il che può interessare il giusto all’utente ‘normale’ (ovvero a chiunque non percepisca i dividenti di una delle aziende coinvolte), la vera novità sta nel fatto che sono stati aperti degli spazi di libertà per chiunque, da quelli con finalità commerciali a quelli con finalità puramente scientifica…
              l’adozione di un ‘formalismo’ (mi si passi il termine generico che si applica ad un text editor come ad un sistema di I/O) comune passa per forza di cose attraverso il consenso e l’accordo delle varie ‘comunità’ coinvolte.
              nella fattispecie, mono, non sembra essere stato accettato nelle comunità linux (o *nix in generale) e forse il motivo è si capisce proprio dalla sua stessa presentazione:
              “Sponsored by Xamarin, Mono is an open source implementation of Microsoft’s .NET Framework based on the ECMA standards for C# and the Common Language Runtime.”

              dunque la società Xamarin promuove un formalismo creato della società Microsoft (certificato da un comitato il cui presidente è un uomo della microsoft). mono, è una implementazione di detto formalismo che incorpora in toto le librerie della microsoft. insomma una moderna veste open-source per il fù monopolista… non è così strano che le implementazioni indipendenti arranchino dovendo adattarsi a ciò che la ‘casa madre’ decide e comunica (come non stupisce che manchino i driver di certi device le cui specifiche, guarda caso, sono già disponibili altrove).
              guarda caso i formalismi veramente indipendenti non presentano gli stessi problemi di implementazione e, al di là delle apparenze, risultano molto più semplici ed intuitivi, sempre che non si confonda ciò con la atrofia da mouse e da finestrella colorata.
              paolo

              • Livio says:

                Stai “pignolando”, per me quello che conta è che le cose funzionino bene, e siano facili da usare, anche per il 90% di utenti che non sono programmatori.

                Io potrei benissimo imparare le lunghe sequenze di installazione necessarie per Linux, ma non stiamo lavorando per noi stessi. Stiamo lavorando per persone che sono Artisti, Ricercatori, Studenti… e queste persone non devono diventare tutti quanti dei programmatori e riempirsi la testa di hidapi.

                E noi programmatori, abbiamo il compito, e la responsabilità, di permettere a queste persone di continuare a fare gli Artisti etc…

                • alieno says:

                  sto solo cercando di demistificare le cose che hai scritto, e porre la questione in termini comprensibili a tutti (a meno di qualche virgola), artisti, ricercatori, studenti, che hanno sì il diritto di essere sollevati da una serie di dettagli tecnici, ma hanno, altresì, il diritto di essere pienamente messi in grado di sapere cosa stiano ‘acquistando’ e quali siano le implicazioni della propria scelta anche in relazione alle altre scelte che hanno fatto o che faranno…

                  per te “quello che conta è che le cose funzionino bene, e siano facili da usare per gli utenti <<microsoft".

                  ripeto, nulla di male in ciò, ma senza mettere in ballo il cross-platform o l'open source (e tanto meno il free and open).

                  quanto alla scelta del target, non metto bocca: conosci certamente meglio di me i tuoi 'utenti'. da quello che leggo dai commenti avanzerei l'ipotesi che si tratta di un 'pubblico' tendenzialmente di persone bene avvezza a maneggiare i formalismi e ben disposta verso forme tipo scripting…
                  tra le communities che citi aggiungerei (almeno tra gli utenti potenziali) makers e creativi in genere. ebbene, hai idea di quanto siano diffusi i 'sistemi alieni' tra queste persone? sono talmente 'alieni' da rappresentare la normalità! prova a immaginare una riunione di creativi o artisti senza un mac (a proposito di mele), o una combricola di ricercatori senza un linux…

                  va bene, la genrosa microsoft verrà in aiuto di noi altri donandoci il suo codice taumaturgico che salverà il mondo, ma non certo il libero pensiero ed il libero agire.

                  paolo

                  p.s. su quanto mono sia gradito alla fsf, c'è questo cntributo:
                  http://www.fsf.org/news/2009-07-mscp-mono
                  sebbene un po' datato non credo sia molto lontano dalla situazione attuale.

                  • Livio says:

                    Non parliamo di Mac !
                    Microsoft ha almeno una parvenza di Open e di Free, ma Apple proprio no. Apple è quanto di più chiuso e commerciale possa esistere.
                    Sarebbe più giusto attaccare Apple. Ma naturalmente fare la guerra a Microsoft è di moda, e invece chi ha i soldi per strapagare un Mac è tanto figo…

              • Livio says:

                Se non ci fosse stata Microsoft a fare da barriera, ormai saremmo tutti succubi di Apple e passeremmo le giornate a fare le code fuori dagli Apple Store. Peggio del 1984 di Orwell.

  10. Piro says:

    ciao a tutti, con qualche app ho qualche messaggio di errore (di cui ho appena dimenticato la dicitura esatta)
    Theremino 3d per esempio non riesce a partire
    forse bisogna aggiornare Microsoft .NET Framework?

  11. Emilio says:

    Buongiorno a tutti. Vorrei provare a comunicare con HAL in Python. Python ha un modulo che supporta i Memory Mapped Files, quindi in teoria non ci dovrebbero essere problemi. Però mi sono subito arenato, perché ho provato ad aprire il file “Theremino1” senza successo. In realtà sono io a non aver capito bene: il memory mapped file viene gestito come se fosse un file su disco? Cioè, ha comunque un suo path, anche se poi i dati risiedono in memoria? E in tal caso, qual è il path completo del file “Theremino1” (io assumevo che fosse lo stesso in cui si trova la copia di HAL che viene fatta girare).
    Grazie per qualunque suggerimento vogliate darmi.

    • Livio says:

      Si, assomiglia a un file su disco nel senso che si usano funzioni simili. Ma in realtà è un pezzo di memoria condiviso. Per cui non c’è un path completo (C:\) ma solo il nome “Theremino1”.

      Tutte le applicazioni del sistema devono poter usare lo stesso “file”, quindi il nome non fa riferimento a una cartella specifica. Infine, il file deve essere lungo 4080 byte, perché ogni slot è lungo 4 byte e noi usiamo 1000 slot (più 80 byte riservati per futuri messaggi speciali).

      In basic si fa così:
      Dim MMF1 As MemoryMappedFile
      MMF1 = New MemoryMappedFile(“Theremino1”, 4080)

      in C#….
      MemoryMappedFile MMF1;
      MMF1 = new MemoryMappedFile(“Theremino1”, 4080);

      Ma aprire il file non è tutto, devi usare i Float, moltiplicare per 4 il numero di slot, gestire i NAN…

      Per cui è meglio che scarichi i file di esempi, in tutti i linguaggi, da questa pagina: http://www.theremino.com/downloads/foundations#mmf

      Il file giusto è il secondo, copio qui il link diretto:
      http://www.theremino.com/wp-content/uploads/2012/03/Module_MemoryMappedFiles_VbNet_CSharp_Pascal_VB6.zip

      • Emilio says:

        Grazie. Sono riuscito a trovare l’errore che facevo. Riporto qui il codice Python per leggere lo slot 1 a intervalli di mezzo secondo, nella speranza che possa essere utile a qualcun altro. Notate però che non sono sicuro che sia ottimizzato dal punto di vista dell’efficienza, per il momento mi basta che funzioni. L’ho testato con Python 3.4 sotto Windows XP.

        import mmap
        import struct
        import msvcrt
        import time

        print(‘Reading slot 1. Press any key to exit.’)
        shmem = mmap.mmap(0, 4096, “Theremino1”, mmap.ACCESS_READ)
        s = struct.Struct(‘1024f’) # per decodificare il file binario

        while not msvcrt.kbhit(): # verifica la pressione di un tasto
        . . . . dat = s.unpack(shmem)[1] # cambiando l’indice si cambia lo slot
        . . . . print(dat)
        . . . . time.sleep(0.5)

        NDR: Le indentazioni (essenziali in Python) sono state sostituite da puntini perché altrimenti l’HTML se le mangiava.

        • Livio says:

          La perdita delle indentazioni non era colpa tua ma dell’editor di WordPress. Noi ci combattiamo tutti i giorni e a volte fa proprio venire il nervoso. Nemmeno scrivendo Code /Code (come tu hai giudiziosamente fatto), si riesce a ingannarlo. L’unico modo che ho trovato è aggiungere puntini e spazi. Non ti preoccupare di come vengono i messaggi e di eventuali errori, se serve gli diamo una aggiustatina noi.

          Grazie del codice Python, potrà sicuramente servire anche ad altri.

  12. Roberto says:

    At last, Python Bindings are available.
    You can download it from here:
    http://www.theremino.com/en/downloads/foundations/#mmf
    and also from here:
    http://www.theremino.com/en/downloads/raspberry-pi

    Copy inside the folder of your main program, the “module_theremino.py” file and write:
    from module_theremino import Theremino

    The class “Theremino” is cross-platform and it works on any operating system. Even with Wine.

    Thank you for your tests, now everything works even with Raspberry Pi.

  13. giuseppe says:

    il sistema theremino impostando adc_16 ha una risoluzione di 16 bit, quindi riesce a discretizzare fino a 50 microVolt (3300/65536).
    l’entità dell’errore è di ?

    cioè la misura che eseguo è di 50 microVolt +/- ????

    grazie.

    • Livio says:

      Gli ADC dei PIC attuali hanno una risoluzione di 10 bit. Quando si legge un ADC il firmware fa un sovra-campionamento di 16 e poi fa la media dei sedici campioni (il tutto in qualche centinaio di micro-secondi). Il sovra-campionamento porta il numero di bit a 14. Infine la applicazione HAL ha un filtro IIR adattativo che fa la media nel tempo e che interpola ulteriormente il valore e lo porta fino a 16 bit (a spese della velocità di risposta)

      Quindi se intendi usare gli ADC per fare misure allora la risposta è no. Non hai 50 microvolt di precisione.

      Se invece li usi per controlli di processo, controreazioni, robotica etc.. Allora i 16 bit, per quanto mediati e interpolati, ci sono davvero. Il sistema Theremino è fondamentalmente un PLC, quindi più che la precisione delle misure conta la velocità di risposta e la stabilità.

      Se provi ad esempio a leggere un potenziometro con Arduino o con i nostri ADC, vedrai una differenza di stabilità impressionante. Questa stabilità è frutto del sovra-campionamento, della media e del filtro IIR.

      • giuseppe says:

        in teoria se vorrei fare delle misure utilizzando come base il theremino, considerando che dispone fisicamente di una I2C. Potrei pensare di collegare un ADC esterno (a parte la gestione software).

        Eventualmente la gestione della I2C si va a livello di firmware oppure a partire da HAL.

        • Livio says:

          Spero proprio che non dovrai fare misure per quella strada. C’è una porta I2C sui moduli, ma comunicare con i dispositivi I2C è estremamente scomodo. Purtroppo ogni dispositivo I2C è diverso, i loro protocolli sono molto complessi. Inoltre per leggerli dovresti programmare sia il firmware del Master, che una estensione al nostro protocollo di lettura, nella applicazione HAL. Non ne vale la pena.

          Con la normale risoluzione degli ADC del sistema Theremino si fanno già ottime misure. Tieni conto che 10 bit sono già 1000 punti di misura e che con il sovra-campionamento si arriva facilmente a 10000 punti. Un normale tester da elettricista ha solo 3 cifre e mezzo, quindi 2000 punti di misura. Non siamo molto lontani.

  14. alieno says:

    Ciao,
    nella pagina degli strumenti software viene esplicitamente indicato il compilatore vbnet della Microsoft (express 2008) di cui viene fornito anche il link per il download.
    peccato che detto compilatore funzioni solo su MS Windows…
    mi chiedevo se fosse possibile risolvere il problema utilizzando il compilatore (supposto cross-platform) messo a disposizione da Mono (monodevelop): d’altra parte si afferma che i compilati possono essere fatti girare utilizando il supporto run-time di quel framework.
    la cosa sembrerebbe possibile, almeno in teoria, infatti sulla pagina di mono si dice che il supporto a vbnet è allineato proprio alla versione ‘2008’.

    ho provato a scaricare il progetto Theremino_HAL con i sorgenti (indicato ‘per programmatori’) e l’ho ‘correttamente’ importato nella IDE di Mono, mi sono però subito arenato quando ho cercato di generare l’assembly:
    l’impostazione di default prevede (e consiglia per il tipo di progetto) l’uso del builder della microsoft (‘vbc’), ma, con quel settaggio il build fallisce: l’eccezione è lanciata proprio dal builder vbc, ma senza alcuna indicazione ‘diagnostica’
    Task “Vbc”
    Using task Vbc from Microsoft.Build.Tasks.Vbc, Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    Task “Vbc” execution — FAILED

    deselezionando l’uso del builder microsoft, Mono, se capisco bene la documentazione dovrebbe usare un builder nativo prodotto dal progetto mono-basic presente su git-hub e disponibile tra i pacchetti installabili come ‘mono-vbnc’.
    purtroppo anche questo settaggio provoca un errore, questa volta di complilazione (sulla classe Class_HID):

    Error VBNC30439: The constant expression cannot be represented in the type ‘Integer’. (VBNC30439) (Theremino_HAL)

    in corrispondenza della definizione di una costante, appunto:
    Private Const GENERIC_READ As Integer = &H80000000

    qualcuno saprebbe darmi dei lumi?
    c’è qualcuno che ha provato ad usare il compilatore suddetto anche solo su piattaforma microsoft e con quali risultati?

    TIA
    paolo

    • alieno says:

      dimenticavo un particolare non da poco:
      gli esperimenti suddetti li ho fatti su Debian 8 e con i pacchetti originari di mono

      paolo

      • Livio says:

        Ma certo che si può usare Mono per compilare!

        Mono Develop è il compilatore Cross Platform, che sostituisce Visual Studio su Linux, e Roberto lo ha usato spesso, per compilare alcune nostre applicazioni. Potresti farti mandare da lui i progetti pronti.

        Purtroppo però, mentre Visual Studio è baco-free al 100%, il Mono Develop è una palude di difetti. Se non mi credi, hai solo da provarci tu stesso, e alla fine mi darai ragione.

        Devo però dire che noi non siamo dei veri Linuxiani e quindi forse tu potresti riuscire dove noi ci siamo arresi. Te lo auguro sinceramente e spero che la tua collaborazione possa dare buoni frutti.

        Nelle nostre prove abbiamo constatato che Mono Develop ha meno difetti quando lavora in CSharp, per cui ti conviene partire da Theremino HAL in versione CSharp.

        Per gli altri particolari dovresti chiedere a Roberto. Io per favorire Linux ho lavorato centinaia di ore, ma lui almeno dieci volte di più. Ho scritto i suoi dati in uno dei precedenti post.

      • Livio says:

        Hai chiesto molti particolari tecnici per Mono Develop, ma io non so risponderti. Ricordo che anche noi abbiamo avuto problemi simili su Mono, ma non ricordo se Roberto è riuscito a risolverli, e come ha fatto.

        Ti consiglio di scrivere a Roberto direttamente, perché qui sul blog gli argomenti troppo specialistici, creano confusione negli altri utenti.

        Sarebbe bene pubblicare qui solo i risultati, quando tu e Roberto avrete trovato delle soluzioni valide, che possano essere utili a tutti.

      • Livio says:

        E grazie, grazie ancora, per la collaborazione!
        Sono anni che aspettiamo un vero Linuxiano che ci aiuti, ti daremo tutto l’appoggio possibile. Livio: 0125 57290 engineering@theremino.com, Roberto development@theremino.com. Infine, se ti serve dell’hardware chiedi pure, io posso farti i PCB con la fresa e Alessio sa come reperire i componenti più strani e può farti dei KIT. Alessio = makers@theremino.com

        • alieno says:

          non c’è di che, anche perchè il mio impegno è quel che è e le mie capacità non certo da asso di linux (o di windows, o di mac…)
          proverò a rivolgere una domanda diretta a Roberto, nel frattempo però, credo che tu sia la persona giusta per quanto riguarda questioni ‘architetturali’.

          premessa:
          – da quel che vedo, il problema principale, per il ‘porting’ è proprio vb.net: non solo non ci sono ide, ma neanche strumenti a riga di comando a parte quelli di mono, con i limiti che ci siamo detti.
          domanda:
          – da cosa deriva la necessità di usare vb.net?
          se capisco bene da quanto hai scritto e dal codice che ho avuto modo di vedere il ruolo svolto è quello di gestione della GUI.
          da quel che dici il ‘back-end’ è codice C++ che funziono correttamente (forse con qualche problema con libusb su linux):
          si tratta delle due librerie dinamiche (.dll su windows e .so su linux)
          quella che gestisce la comunicazione con HID e quella specifica degli slot di Theremino.
          andando a ritroso la necessità di usare vb.net per la gui torna comodo perchè gestisce al meglio le librerie ‘grafiche’ di windows.
          – è pensabile / ragionevole usare altre librerie grafiche per raggiungere il medesimo scopo?
          mi vengono in mente le gtk ma forse c’è anche qualcosa di meglio/diverso.
          lo dico perchè a quel punto anche la GUI diventerebbe C++ ergo più compatibile e tendenzialmente anche più stabile.

          paolo

          • Livio says:

            No, non c’è un back end in CPP.
            Ci sono due versioni dell’HAL. Una versione è scritta in VbNet e l’altra è scritta in CSharp. Sia VbNet che CSharp sono basati sul Common Language Runtime.

            Perchè usiamo il CLR al posto di altri linguaggi (ad esempio CPP)? Proprio per essere Cross Platform!

            Se l’HAL fosse scritto in CPP, non ci sarebbe la macchina virtuale DotNet (Mono) a fare da base comune, e quindi l’HAL conterrebbe centinaia di chiamate dirette alle librerie di Windows. E questo inchioderebbe le nostre applicazioni a Windows. Non si parlerebbe più di “Cross Platform”, bensì di traduzione nei linguaggi nativi di Linux, Android e Mac. Un lavoro immenso, che andrebbe rifatto, ad ogni nuova versione (e noi pubblichiamo molto spesso).

            Poi c’è un altro aspetto: il sistema Theremino non è una applicazione singola, ma un intero ecosistema di una cinquantina di applicazioni, che si parlano tra loro. L’HAL da solo serve davvero a poco.

            O si riesce a ottenere un vero Cross Platform, oppure c’è da passare anni a tradurre tutto, in CPP (per Linux), in Pyton (per Android e Raspberry) e anche in Objective-C (per Mac). E una volta finito questo lavoro faraonico, noi avremo pubblicato altre 50 versioni, e ci sarebbe da ricominciare da capo.

            • alieno says:

              Caro Livio,
              non voglio essere insistente, nè cercare di convincerti di alcunchè, ma mi pare che siamo arrivati al nocciolo della questione:
              CLR non è cross-platform e mai lo sarà perchè è proprietà di microsoft. Quindi il tuo/vostro codice è già, di fatto platform-dependent.
              La presunta indipendenza di CLR è solo presunta, appunto, è una pura asserzione di Microsoft, uno specchietto per le allodole messa in campo per arginare il dilagante strapotere di Java/Sun/Oracle, verosimilmente.
              CLR è uno standard stabilto da microsoft e, di fatto, imposto al resto del mondo dell’IT, che, guarda caso, non l’ha implementato, con l’unica eccezione di Novell che ha prodotto Mono, anche quello del tutto ignorato dal resto del mondo non microsoft.
              e non parlo solo delle sconosciute comunità di nerds raccolte attorno a questa o quella distro, ma anche dei pur commerciali (RedHat, Debian).
              mi spiace ammetterlo, ma si tratta di una strada senza uscita, di un out-out, CLR xor cross-platform. basta una semplice ‘googlata’ per rendersene conto.

              dici che CLR performa meglio di altre macchine: non lo metto neanche in dubbio. ma riguardo alla portabilità, resta inchiodata ad un limite severo e, probabilmente, insormontabile.
              dici che microsoft ha annunciato il rilascico della macchina per le altre piattaforme? non mi pare una novità, ma l’ennesima operazione di facciata, esattamente come il progetto Mono, o Rotor, la versione di CLR per BSD. chi dovrebbe occuparsi dell’onere di sostenere un progetto simile? la microsoft? la xamarin/novell/suse? al momento non sembra ci siano altri che se ne occupano ( il progetto dotGnu è finito da secoli, la distro monoppix è durata tre mesi, d’altra parte ti pare che uno sviluppatore medio di qualunque comunità possa aderire alle politiche del progetto mono?
              http://www.mono-project.com/docs/faq/licensing/ )
              parli del lavoro faraonico di fare il porting delle applicazioni Theremino? prova a pensare al lavoro necessario a sviluppare e sostenere la macchina CLR/.Net, lavoro che per altro non è neanche programmato/voluto da nessuna ‘comunità’ o azienda/fondazione!

              la amara conclusione è che allo stato attuale la soluzione più ragionevole, per l’utente non-Windows che voglia usare Theremino è quello di usare una virtualizzazione. Sempre che ciò non interferisca con la comunicazione con l’interfaccia. Il conseguente degrado delle prestazioni, ma almeno esente dai bachi dello stack Mono.

              paolo

              • Livio says:

                Si, si può virtualizzare oppure, se trovi un’altra soluzione, la seguiremo volentieri. Le questioni “direi filosofiche”, lasciamole ad altri.

                • alieno says:

                  ti sbagli, mi spiace non essermi spiegato. altrimenti non scambieresti per ‘filosofiche’ questioni del tutto pratiche.

              • Livio says:

                E comunque non è corretto dire che Mono è di Microsoft. Mono è una creazione di Miguel de Icaza e di Nat Friedman, che sono ambedue uomini di Linux (e forse un po’ anche Mac), ma non di Microsoft.
                http://en.wikipedia.org/wiki/Miguel_de_Icaza
                http://en.wikipedia.org/wiki/Nat_Friedman

                Miguel e Nat hanno trovato la macchina virtuale CLR, così efficiente e ben fatta, che hanno deciso di importarla.

                Quello che dico io non vale molto, ma Miguel de Icaza è considerato una delle “Most Powerful Voices in Open Source”. Se ha perso molti anni della sua vita dietro al CLR, è proprio per “questioni filosofiche” o “pratiche” come le chiami tu. Si tratta del sogno di avere, o prima o poi, un linguaggio comune per tutti. E’ lo stesso sogno di pace, che ha animato molti, prima di noi. E io sono pienamente su quella linea. Non sono pro Microsoft ma nemmeno pro Linux. Io sono per un linguaggio Cross-Platform, e purtroppo al momento non esiste di meglio che il CLR.

                • alieno says:

                  saranno anche gli uomini più potenti dell’open source (a parte il fatto, e non è filosofia, che il mondo linux è ben più che open source), ma non c’è nessun altro che li segue, a parte il team di svilupppo della Xamarin/Novell per la quaòe loro stessi lavorano.
                  quanto a CLR, ripeto, non discuto neanche quanto sia efficiente, ma non c’è nessuno, oltre al team suddetto che la sviluppi.
                  non mi invento niente, basta uno sguardo in rete, se non bastassero i problemi di cui abbiamo discusso.

                  paolo

                  • Livio says:

                    Sicuramente hai ragione, io non sono un esperto del mondo Linux e delle sue divisioni interne. Prima di ritrovarci a discutere su quanti capelli ha il Picaza e quanti ne ha Torvald, proporrei di limitarci solo a questioni pratiche.

                    Con pratiche intendo davvero pratiche. Non quello che tu definisci “architetturali” e “specifiche tecniche” ma proprio: “Questo essere possibile. Quest’altro non essere possibile. Augh!”

                    Quindi ti invito nuovamente a rispondere alla domanda: “Quale sarebbe l’alternativa al CLR che tu proponi?”

  15. Livio says:

    Importanti novità

    Ho parlato per telefono con Roberto. In questo periodo lui non ha tempo di intervenire, ma mi ha spiegato che l’HAL, dalla versione 5 in poi, potrebbe non funzionare, su Linux e su MAC.

    L’ultima versione provata, e quindi sicuramente funzionante, è la 4.6 (sia VbNet che CSharp):
    http://www.theremino.com/wp-content/uploads/files/Theremino_HAL_V4.6.zip
    http://www.theremino.com/wp-content/uploads/files/Theremino_HAL_V4.6_WithSources.zip
    http://www.theremino.com/wp-content/uploads/files/Theremino_HAL_CSharp_V4.6_WithSources.zip
    (sul nostro sito esistono tutte le versioni e tutti i sorgenti, basta cambiare i numeri di versione in 4.0/4.1/4.2/4.3/4.4/4.5/4.6/5.0/5.1)

    Ti invito a utilizzare gli eseguibili così come sono, senza ricompilarli e seguendo esattamente le istruzioni della pagina Linux. Sono sicuro che funzioneranno. Io stesso li ho visti funzionare varie volte, e molti li stanno usando su Linux, su Mac e anche su Raspbian. I giapponesi hanno fatto le loro versioni con tasti rotondi e scritte strane. Gli australiani li usano tutti i giorni sul MAC. Devono funzionare anche da te!

    Prova anche a leggere i post di altri utenti, ad esempio questi:
    http://www.theremino.com/blog/gamma-spectrometry#comment-12434
    http://www.theremino.com/blog/geigers-and-ionchambers#comment-786
    (io di questi consigli ci capisco poco, ma tu potresti trovare dei particolari importanti)

    Quando avrai una versione 4.6 funzionante, dovrebbe essere facile confrontare le versioni, e far funzionare anche la 5.

    Ti invito a insistere con pazienza, ne vale la pena. Alla fine avrai del software 100% Open Source, dalla prima riga nostra, fino all’ultima riga di Linux. E sarà anche 100% Cross-Platform.

  16. Livio says:

    Alieno unixiano chiama alieno debianico (Nota 1)
    Riportiamo una mail interessante che probabilmente, non è arrivata a destinazione, a causa di disturbi interstellari.
    (Nota 1) Ci teniamo a ricordare che questi termini non sono dispregiativi, ma scherzosi. Abbiamo grande rispetto per l’idea fondamentale di Open Source, che è alla base di Linux.

    Ciao alieno,
    Mi presento mi chiamo Ricky e sto aiutando il sistema Theremino a migrare.

    Sono uno sviluppatore professionista, sia sun win che su Linux, e sto facendo un porting di Theremino su sistemi Linux/Unix da qualche settimana. Sto postando tutto su github. Se vuoi seguire i miei progressi, li trovi qui: https:(link eliminato)//github.com/riccardoventrella/Theremino
    (abbiamo eliminato il link precedente perché il software di Ventrella è sparito dal WEB, il perché andrebbe chiesto a lui)

    Ti descrivo in breve cosa sto facendo: Per non impazzire a scegliere e usare librerie grafiche,
    su varie piattaforme, ho deciso di usare una pagina web, per configurare un HAL, e monitorarlo. Un po’ come si configura un router, usando il suo indirizzo IP con un browser. Ho quindi embeddato un webserver, in ogni istanza di eseguibile e sto già testando il tutto sia su Raspberry, sia sul Mac (Unix BSD) sul quale sviluppo e anche su Ubuntu. Sembra andare tutto, ho già anche trovato una libreria cross-platform, che sembra andare bene dappertutto.

    L’approccio web, fra le altre cose mi ha permesso di browsare (e già funziona) l’HAL dal mio smartphone o da un tablet, e anche di lanciare più client, su più browsers, sullo stesso HAL.

    Ti dico subito che non ho tempo ne voglia di seguire i blog, sicché non ho nemmeno letto completamente la vostra diatriba/discussione. Mi hanno chiesto di informarti, su quello che si stava facendo, e quindi eccomi qua. L’approccio che ho, funzionerò anche eventualmente su Win stesso, SENZA usare MONO o simili (evito pareri personali e cerco di tenere il tutto in un ambito tecnico). Attualmente ho deciso di portare su Raspy senza usare mono, perché l’ultima versione di mono costringe a usare una Raspbian softfloat, con N problemi. Quindi la (mia) scelta di abbandonare mono è dettata soprattutto da questo. Io sono abituato a compilare e poi cross-compilare in maniera nativa sulle varie macchine.

    Quindi, per consigli su MONO puoi sentire Roberto. Questa email è solo per informarti che qualcosa si sta muovendo e fra qualche mese (purtroppo lavoro e ho poco tempo), sarò in grado di rilasciare una versione full-webbased, che girerà su Linux, quindi anche su Raspy, su Mac e su FreeBSD (e naturalmente ANCHE su Win).

    A presto, ciao
    Ricky

  17. mirko says:

    salve vi scrivo perchè ho un problema. premetto che con visual basic faccio pena considerando il fatto che non so programmare ma ci provo con quello che ho. non riesco a creare un applicazione partendo dal vostro programma in “bianco” che riesca da una parte a simulare la tastiera come nel key manager e dall’altra ad utilizzare il valore di due slot che prendono dati da un joystick e da trasformarlo o in un dato joystick( mi spiego meglio …. come quello che windows riconosce come controller giochi ad esempio) oppure in una sorta di segnale come le freccette del pc in base al valore degli slot(insomma una sorta di selettore a 4 vie. scusate per il disturbo ma proprio non ci riesco

    • Livio says:

      Il problema come lo poni è complesso, cosa vuol dire “da una parte” e “dall’altra”? Vuol dire che dovrebbe fare tutte e due queste operazioni? Non potremmo dividerle, lasciar fare a KeyManager la prima metà e concentrarci solo sulla seconda?

      E la seconda parte a sua volta andrebbe divisa in due parti:
      Da Slots verso quattro frecce
      Questo lo fa già KeyManager, basta usarlo con i Key Left, Right, Up e Down
      Joystick proporzionale al valore di due slots
      Se il Joystick, alla fine di tutto, deve muovere il cursore del mouse sullo schermo, allora questo viene fatto da ThereminoPad: http://www.theremino.com/downloads/automation#pad
      Se invece deve fare qualcos’altro, dovrai specificare meglio i risultati da ottenere.

      Probabilmente tu non vorresti usare i software Theremino KeyManager e ThereminoPad, ma vorresti istruzioni, per fare le stesse cose in modo semplice, in poche righe, che potresti capire facilmente. Ma purtroppo non esiste un modo più semplice. Abbiamo già fatto tutto quello che siamo stati capaci di fare, per semplificare al massimo, le applicazioni pubblicate.

      Imparare a “trapiantare” le giuste parti da una applicazione a un altra, potrebbe richiedere anni di esperienza. Consigliamo di prenderla con calma, esplorare quello che abbiamo scritto e provare a copiare funzioni semplici. Se non riesci a farle funzionare cancella e riprova. Comunque siamo sempre qui e ti aiuteremo per quanto possibile.

      • mirko says:

        esattamente quello volevo fare cioè trapiantare le istruzioni oppure riuscire in qualche modo a modificare il keymanager. il problema sorge in quanto il key manager ha come impulsi 0 1000 invece a me serve che non sia fatto nulla quando lo slot ha valore 500 mentre deve fare 2 azioni diverse in caso si abbiano valori di 0 e 1000 e questo non me lo permette di farlo. volevo appunto sapere se esiste un comando per basic che mi permetta dato il valore di uno slot di fare l’azione a se 500 comunque grazie per la disponibilità

        • mirko says:

          oppure mi è venuto in mente ora se è possibile dall’HAL ottenere 2 risultati diversi da uno stesso pin, una sorta di sdoppiamento virtuale del segnale da una parte quelli maggiori di 500 dall’altra quelli minori ma mi sembra ancora più complesso delle altre soluzioni .

        • Livio says:

          Quindi vorresti premere un tasto della tastiera (o ad esempio la freccia sinistra) quando il valore di uno slot va a zero.

          E vorresti premere un diverso tasto della tastiera (o ad esempio la freccia destra) quando il valore va a 1000.

          E vorresti non fare niente quando il valore è 500.

          Se è così bastano poche righe. Il tutto potrebbe essere scritto in una tua applicazione o in Theremino Script o in Theremino Automation..

          ————

          Più o meno il principio è il seguente:

          Dim v As Single = ReadSlot(100)
          If v < 250 then . WriteSlot(1, 1000) Else . WriteSlot(1, 0) End IF If v > 750 then
          . WriteSlot(2, 1000)
          Else
          . WriteSlot(2, 0)
          End IF

          Si presuppone che:
          – lo slot 100 sia il valore di controllo
          – lo slot 1 vada a premere la freccia a sinistra sul KeyManager
          – lo slot 2 vada a premere la freccia a destra sul KeyManager

          Questo pezzo di codice deve stare in un evento Timer chiamato molto spesso, diciamo ogni 10 millisecondi.

          Ci sono dei punti in mezzo che andranno tolti (sono serviti per allineare le colonne – in gergo programmatorio si chiama “indentare”)

          • mirko says:

            grazie 1000 !! preferivo scriverlo usando il vb quindi in una mia applicazione utilizzando quindi quella vuota che avete messo sul vostro sito oppure in caso va benissimo anche nell’automation

  18. alieno says:

    Rileggendo i commenti da me scritti qualche tempo fa e le conseguenti ‘polemiche’ mi viene il sospetto che qualcuno possa essere tratto in inganno, riguardo alle mie personali considerazioni sul progetto Theremino.
    Vorrei precisare alcuni aspetti per me già evidenti allora ed ampiamente confermati dalla interazione con lo ‘staff’ di Theremino in generale e con Livio in particolare.

    Ciò che rende un progetto veramente ‘open’ non sono tanto i tecnicismi (che pure, come ho cercato di spiegare) hanno la loro importanza, ma l’atteggiamento di fondo e, da quel che mi è dato di constatare, l’idea di base del sistema Theremino è autenticamente improntata alla liberazione ed alla condivisione dei saperi proprio come dovrebbe essere ogni iniziativa open-source.
    Si tratta di un atteggiamento incomparabilmente più autentico e corretto rispetto a quello che è alla base di tanti altri progetti che mistificano in modo spudorato e furbo il concetto di open source a tutto vantaggio dei propri interessi a volte molto sporchi e persino preoccupanti…

    Continuo a sperimentare con Theremino e spero di poter contribuire al più presto al progetto con contributi che vadano in direzione di una sempre maggiore compatibilità con sistemi GNU/Linux convinto che, dato per l’appunto il proficuo clima di apertura, la partecipazione e la collaborazione all’interno di una comunità di utenti e sviluppatori con le esigenze e le sensibilità più disparate possano esprimere al meglio le potenzialità di una iniziativa così importante.

    paolo

  19. PATO65 says:

    Ciao,
    ho installato il firmware 3.2 sul master, ho scaricato HAL 5.1 ma non vedo nella lista della configurazioni slot le uscite di tipo Stepper e Stepper_Dir.
    Come mai? dove ho sbagliato?

    • Livio says:

      Quello che scrivi è giusto, devono apparire DIECI PIN al posto dei SEI PIN di prima.
      Se ti appaiono DIECI PIN allora i PIN 1,3,5,7 e 9 devono essere configurabili come Stepper
      La scritta Stepper è la sesta dall’alto e si nota poco forse ti è sfuggita…
      E la Stepper_dir non appare se prima non hai configurato i PIN Stepper…

      Ti appaiono dieci pin?

  20. PATO65 says:

    Verissimo, funziona tutto……evidentemente guardavo un pin pari :-(

    Ecco il mio Theremino-Master Flintstone :-)
    http://www.theremino.com/files/MasterPato65.jpg

  21. mirko says:

    ciao ho un problema con dei led rgb. ho preso dei led rgb con sigla apa-106-f8 e andrebbero comandati (da quanto ne capisco io) da un segnale a 24 bit che viene inviato con tempistiche di 0.35 uS high + 1.36 uS low per il bit 0 mentre 1.36uS high + 0.35uS low per 1 e questo per 24 volte prima di una pausa da almeno 50uS ora una domanda come posso pilotarlo e come devo impostare l’hal?
    ho provato a vedere ma i segnali pwm non vanno bene poichè hanno tempistiche diverse da queste mentre utilizzando il theremino automation anche impostando la massima velocità arrivo a 10uS per comando il che non mi fa fare in tempo i cambi utilizzando il DigOUT esiste un modo per regolare secondo queste tempistiche il segnale per inviare dei bit anzichè segnali grezzi? lo so che non si capirà molto ma non so bene come dirlo :D

    • Livio says:

      Conosco quei LED, hanno tempistiche precise da rispettare, quasi una linea seriale. Impossibile farli funzionare con i tipi di Pin standard. Dovresti riprogrammare il firmware per generare esattamente quel che serve a loro. Sarebbe un lavoro immenso e non ne vale la pena. Alla fine il risultato di tanto lavoro sarebbe di poter pilotare quei LED specifici e nient’altro. Ti conviene usare driver già fatti, credo che li puoi trovare a buon prezzo da Pololu e LadyAda.

      Oppure potresti usare un mini-Arduino (se qualcuno ha già scritto il firmware per pilotare i tuoi led). E a sua volta l’Arduino potrebbe essere pilotato da una delle nostre uscite. Arduino è adattissimo per fare piccoli driver hardware come questo.

      Il sistema Theremino invece è un IN-OUT generico per PC ed ha solo ingressi e uscite molto semplici. Attenzione anche in futuro a non usare niente di seriale (ad esempio sensori I2C), e niente che abbia registri da programmare o tempi precisi da rispettare.

      Questo vale però solo per i PIN standard (quelli che sono sui moduli Master e Slave). Se si passa “per altre vie” allora si può usare qualunque dispositivo o protocollo. Molti stanno leggendo i Geiger in seriale e mandano i dati sugli Slot del sistema Theremino e io leggo la produzione dei pannelli solari con un adattatore USB-RS485.

      Un altro esempio per spiegare il principio: sarebbe possibile programmare i Master per leggere anche i segnali delle telecamere. Ma sarebbe un gran lavoro e alla fine si impegnerebbe inutilmente il Master, con una gran quantità di dati. E il risultato finale non sarebbe gran che. Quindi le WebCam non si collegano al Master, ma alla USB, e comunicano con il sistema attraverso il software. Lo stesso vale per l’audio, i ricevitori GPS, le SDR (Software Defined Radio), etc…

  22. Angelo says:

    Ciao, sto aspettando il mio primo theremino master, vorrei sapere se col sw HAL o eventualmente altri, è possibile sommare i segnali letti…cioe volendo realizzare un gaussmetro ho 3 sensori di hall disposti in 3 posizioni diverse ma voglio sommarli per avere un unico segnale complessivo,…come posso fare o quale software utilizzare? o non esiste e dovrei crearmelo io?
    grazie
    Angelo

    • Livio says:

      Con il solo HAL non si riesce.
      Dovresti scrivere tre righe dentro alla applicazione Theremino Automation
      Oppure una riga sola dentro a Theremino Script
      Ti consiglio Theremino Script anche se più complesso perché ha molti esempi ed è molto più potente ed espandibile.
      Inoltre Theremino Script produce vere applicazioni (files.exe).
      – – – – –
      Se non riesci scrivimi e ti manderò un esempio in theremino Script che farà esattamente quello che ti serve.

    • Livio says:

      Ti ho fatto l’esempio di Theremino Script
      Si chiama “SlotOperations.vb”
      Legge gli slot 1 + 2 + 3 e mette la somma nello Slot 4

      Dentro al file ZIP trovi anche la applicazione compilata “SlotOperations.exe”
      Scarica lo ZIP da qui:
      http://www.theremino.com/uploads/ThereminoScriptExample-SlotOperations.zip

      Puoi anche provarlo senza hardware lanciando uno SlotViewer e muovendo i cursori degli Slot 1, 2 e 3 con il Mouse.

      • Angelo says:

        Grazie Livio per il programma! io adesso ho un po bisogno di masticare e digerire un po bene tutto, perché ho usato il vb anni fa (ma mai applicato all’hardware) e poi l’assembler x micro, lo script non lo conosco ma lo devo imparare e poi appena mi arriva il circuito devo mettere insieme un po il tutto…però grazie al vostro sito e collaborazione ci sono tutti gli strumenti per poter fare tutto,ci vuole solo buona volontà e tempo, grazie di nuovo!

        • Livio says:

          Il theremino Script è praticamente identico al VbNet ma non ha la parte che permette di impostare l’interfaccia utente in modo visuale (si deve scrivere tutto nel codice). E non ha nemmeno i breakpoint per fermare il programma e ispezionare i valori delle variabili. In compenso è tutto in un solo file e quindi più semplice da usare.

          Il firmware non lo dovrai programmare, è già tutto scritto nel modulo Master e dovrai solo configurarlo con la applicazione HAL.

          Se servirà altro siamo sempre qui.

Leave a Reply

Your email address will not be published.