Communications


Sensori e Attuatori comunicano con i connettori di Input-Output chiamati “PIN”

I Sensori e gli Attuatori comunicano con i PIN standard tramite 3 soli fili conduttori. Il primo conduttore è GND, il secondo conduttore è +5V , il terzo conduttore “SIG”, porta il segnale in ingresso o uscita.

I moduli Master hanno sei PIN di InOut gli SlaveServo ne hanno dieci e i moduli CapSensor nessuno.

Quando si effettuano i collegamenti a volte può essere difficile leggere le scritte per cui è bene sapere che in tutti i componenti del sistema Theremino il collegamento GND è sempre vicino al bordo della piastra.

I PIN configurati come OUT producono un tensione da 0 a 3,3 volt, quelli configurati come IN accettano tensioni da 0 a 3.3 Volt. Se si applicano ai PIN di input tensioni al di fuori da questo range le si devono limitare in corrente a 100 uA massimi (con un resistore da almeno 33k vicino al PIN) altrimenti la comunicazione USB viene disturbata e può anche interrompersi.


I moduli Slaves e il modulo Master comunicano via seriale

   

La linea seriale fornita dal Theremino Master non è una normale RS232 o RS485. Ma una linea speciale che trasmette e riceve su un singolo filo di segnale, secondo il protocollo DPM sviluppato da noi. I suoi vantaggi sono la alta velocità di comunicazione e l’autoriconoscimento dei moduli collegati. Maggiori informazioni qui: technical/protocol

Molti moduli Slave possono essere collegati alla linea seriale del Master.

Così come per i sensori, anche per i collegamenti della linea seriale, si usano le normali prolunghe per servo-comandi, reperibili a un ottimo prezzo presso www.hobbyking.com

Connectors

Marrone = Massa
Rosso = +5V
Giallo = Segnale

Per collegamenti molto lunghi o particolari esigenze di alimentazione è possibile effettuare la comunicazione seriale su due fili (Massa e Segnale), eventualmente su cavo schermato. Ulteriori informazioni nella sezione “Collegamenti lunghi e immunità ai disturbi” alla fine della pagina connection-cables


Master e Computer comunicano via USB

Anche più master possono essere connessi contemporaneamente allo stesso PC attraverso linee USB separate e verranno tutti riconosciuti dalla stessa applicazione HAL.

Usare più linee USB e più Master permette in alcuni casi di aumentare la velocità di comunicazione. In altri casi può servire per specializzare alcni Master per le comunicazioni lente e altri per comunicare con i canali che richiedono la massima frequenza di aggiornamento.

I cavi USB non devono essere speciali, di buona qualità o particolarmente corti. Abbiamo provato anche cavi molto lunghi (10 metri) e collegamenti con più cavi in serie (prolunghe) e tutti hanno funzionato perfettamente. Il sistema Theremino usa il protocollo USB 2.0, ma è stato possibile effettuare collegamenti senza errori, attraverso i normali HUB, anche di tipo USB 1.0.


Il programma HAL tiene in comunicazione i moduli Hardware con gli Slot

Theremino HAL

 

 

 

 

 

 

 

 

 

Theremino HAL Slots
-

L’HAL ( Hardware Abstraction Layer ) semplifica la comunicazione USB e le complessità dell’hardware trasformando tutti i segnali in numeri “Float” che vengono scritti nelle caselle di ingresso uscita da 0 a 999 nominate “Slot”, o letti dalle stesse e inviati verso l’hardware.

.

 

 


Gli SLOT

Gli “Slot” del sistema Theremino sono identificati con un numero da 0 a 999 e fanno tutti parte del MemoryMappedFile con nome “Theremino1″.

Ogni slot contiene un numero “Float” che può essere letto o scritto da qualunque componente del sistema Theremino.

In questa immagine soltanto l’HAL scrive negli slot ma in realtà tutti i componenti del sistema possono sia leggere che scrivere in uno qualunque degli slot, anche se già usato da altri.

I 1000 slot disponibili sono usabili liberamente esiste una sola regola:

Molte applicazioni e molti PIN possono leggere lo stesso slot, ma si deve evitare di scrivere in molti sul medesimo slot, facendolo non si rompe nulla ma si ottengono risultati indefiniti.

Se si inviano più flussi di dati verso lo stesso slot allora i dati si mischiano e vince l’ultimo a scrivere, se si vogliono unire i dati in modo ordinato sono necessarie delle regole.

Per stabilire regole matematiche e logiche tra gli Slot, ed anche per scrivere algoritmi di comportamento complessi, si usa “Theremino_Script” oppure qualunque linguaggio di programmazione come C++, CSharp, VbNet, VB6 o Pascal, ma è anche possibile usare linguaggi visuali come MaxMSP, Processing, PureData, LabView e EyesWeb.

Per MaxMSP sono disponibili i Plugin e gli esempi qui: downloads/foundations


I Memory Mapped Files

Gli SLOT sono basati sui “Memory Mapped Files” che sono poco conosciuti ma utilissimi.

Comunicare tramite i “Memory Mapped Files” è estremamente efficiente, in poche decine di microsecondi si possono trasferire centinaia di numeri “Float” tra programmi separati, con thread differenti e scritti in linguaggi diversi.

Il “Memory Mapped File” chiamato “Theremino1″ è lungo 4096 byte e contiene i 1000 slot usati dal sistema Theremino. Tutti i programmi del sistema Theremino possono scrivere e leggere i loro dati, sotto forma di numeri float, nei 1000 slot di questo file.

Ogni slot è lungo quattro byte per cui quando si usano funzioni di memorizzazione a basso livello si deve moltiplicare lo “Slot” per quattro per ottenere l’indice al byte nel MemoryMappedFile.

Sono disponibili i programmi di prova ed esempio, con i sorgenti, nei principali linguaggi di programmazione. Usando questi esempi è molto facile dotare qualunque programma della possibilità di comunicare con il sistema Theremino.

Sono anche disponibili gli “External” per Max4 e Max5 che si trovano nel file “MaxInstall.zip”. In questo modo è possibile far comunicare le “Patch” di Max con il sistema “Theremino” attraverso i MemoryMappedFiles.


Collegamenti con cavetti standard

Per tutti i collegamenti tra pin, sensori e attuatori ed anche per la linea di comunicazione seriale sono molto comode le normali prolunghe per servo-comandi reperibili ad un ottimo prezzo presso “www.hobbyking.com” nella sezione “Hardware e accessories” / “Wires and plugs” / “Servo Wire & Servo Plugs”

Cavetto standard con connettore maschio-femmina

Brown   = Gnd
Red     = +5V
Yellow  = Signal
  • Per correnti fino a 0.5 Ampere usare i 26 AWG (0.13 mmq)
  • Per correnti fino a 1 o 2 Ampere usare i 22 AWG (0.33 mmq)

Maggiori informazioni sui cavi di collegamento per alte correnti e linee molto lunghe, nonché prezzi indicativi e links nella sezione: connection-cables


I numeri Float

I numeri “Float” sono numeri in virgola mobile da 32 bit (singola precisione). Il sistema Theremino usa sempre i “Float” invece dei numeri “Interi” o “Double” per i seguenti motivi:

1) Essendo lunghi 32 bit vengono scritti e letti in una sola istruzione del processore e non necessitano quindi di meccanismi di sincronizzazione per evitare errori.

2) Pur essendo numeri con la virgola possono contenere senza errori o arrotondamenti qualunque numero intero da -16`000`000 a +16`000`000 e rotti, e quindi contenere facilmente i valori da 0 a 65535 (16 bit) e anche fino ai 24 bit dei migliori sensori e attuatori esistenti.

3) Possono essere usati per inviare 16 milioni di differenti comunicazioni “di servizio” per mezzo dei valori NaN (not a number) e NaNs ( NaN di segnalazione ).

4) Possono anche contenere i valori speciali “+infinity” e “-infinity”, utili quando i calcoli producono valori molto elevati.

5) La precisione dei “Float” è da migliaia a milioni di volte superiore rispetto alla precisione richiesta, perché sono usati solo per comunicare e non per eseguire calcoli.

6) Tutti i processori attuali trasferiscono 32 bit in una sola istruzione, per cui l’efficienza è massima e due programmi separati possono comunicare in pochi microsecondi.

Per maggiori particolari sui numeri “Float” leggere le pagine seguenti.

- – - – - -

Float – Single precision, 32 bit, floating point numbers

Positive max: 3.4028235 E+38
Positive min: 1.401298 E-45

Negative max: -3.4028235 E+38
Negative min: -1.401298 E-45

Max integer stored without rounding errors : +16’777’216
Min integer stored without rounding errors : -16’777’216

Max integer visualized (7 digits rounded): +9’999’999
Min integer visualized (7 digits rounded): -9’999’999

+Zero: 0 00000000 00000000000000000000000 (0000 0000)
-Zero: 1 00000000 00000000000000000000000 (8000 0000)
+Infinity: 0 11111111 00000000000000000000000 (7F80 0000)
-Infinity: 1 11111111 00000000000000000000000 (FF80 0000)

Positive NANS
from: 0 11111111 00000000000000000000001 (7F80 0001)
to: 0 11111111 01111111111111111111111 (7FBF FFFF) (4’194’303 values)

Negative NANS
from: 1 11111111 00000000000000000000001 (FF80 0001)
to: 1 11111111 01111111111111111111111 (FFBF FFFF) (4’194’303 values)

Positive NAN
from: 0 11111111 10000000000000000000000 (7FC0 0000)
to: 0 11111111 11111111111111111111111 (7FFF FFFF ) (4’194’304 values)

Negative NAN
from: 1 11111111 10000000000000000000000 (FFC0 0000)
to: 1 11111111 11111111111111111111111 ( FFFF FFFF ) (4’194’304 values)

- – - – - -

Special Values

IEEE reserves exponent field values of all 0s and all 1s to denote special values in the floating-point scheme.

Zero - As mentioned above, zero is not directly representable in the straight format, due to the assumption of a leading 1 (we need to specify a true zero mantissa to yield a value of zero). Zero is a special value denoted with an exponent field of zero and a fraction field of zero. Note that -0 and +0 are distinct values, though they both compare as equal.

Denormalized - If the exponent is all 0s, but the fraction is non-zero (else it would be interpreted as zero), then the value is a denormalized number, which does not have an assumed leading 1 before the binary point. Thus, this represents a number (-1)s × 0.f × 2-126, where s is the sign bit and f is the fraction. For double precision, denormalized numbers are of the form (-1)s × 0.f × 2-1022. From this you can interpret zero as a special type of denormalized number.

Infinity - The values +infinity and -infinity are denoted with an exponent of all 1s and a fraction of all 0s. The sign bit distinguishes between negative infinity and positive infinity. Being able to denote infinity as a specific value is useful because it allows operations to continue past overflow situations. Operations with infinite values are defined in IEEE floating point.

Not A Number - The value NaN (Not a Number) is used to represent a value that does not represent a real number. NaN’s are represented by a bit pattern with an exponent of all 1s and a non-zero fraction. There are two categories of NaN: QNaN (Quiet NaN) and SNaN (Signalling NaN).

QNaN  - A QNaN is a NaN with the most significant fraction bit set. QNaN’s propagate freely through most arithmetic operations. These values pop out of an operation when the result is not mathematically defined.

SNaN - An SNaN is a NaN with the most significant fraction bit clear. It is used to signal an exception when used in operations. SNaN’s can be handy to assign to uninitialized variables to trap premature usage.

Semantically, QNaN’s denote indeterminate operations, while SNaN’s denote invalid operations.

- – - – - -

Special Operations

Operations on special numbers are well-defined by IEEE. In the simplest case, any operation with a NaN yields a NaN result. Other operations are as follows:

Operation Result
n ÷ ±Infinity 0
±Infinity × ±Infinity ±Infinity
±nonzero ÷ 0 ±Infinity
Infinity + Infinity Infinity
±0 ÷ ±0 NaN
Infinity – Infinity NaN
±Infinity ÷ ±Infinity NaN
±Infinity × 0 NaN

- – - – - -

Summary

Sign Exponent (e) Fraction (f) Value
0 00..00 00..00 +0
0 00..00 00..01
:
11..11
Positive Denormalized Real
0.f × 2(-b+1)
0 00..01
:
11..10
XX..XX Positive Normalized Real
1.f × 2(e-b)
0 11..11 00..00 +Infinity
0 11..11 00..01
:
01..11
SNaN
0 11..11 10..00
:
11..11
QNaN
1 00..00 00..00 -0
1 00..00 00..01
:
11..11
Negative Denormalized Real
-0.f × 2(-b+1)
1 00..01
:
11..10
XX..XX Negative Normalized Real
-1.f × 2(e-b)
1 11..11 00..00 -Infinity
1 11..11 00..01
:
01..11
SNaN
1 11..11 10..00
:
11.11
QNaN


Ottenere i moduli del sistema

Il team del sistema Theremino si occupa solo di ricerca e non vende hardware. Il sistema è completamente “Freeware”, “Open Source”, “No Profit” e “DIY”, ma esistono produttori che possono fornire i moduli assemblati e collaudati a un ottimo prezzo. Difficilmente si potrebbe auto-costruirli spendendo meno. Un elenco dei produttori in questa pagina: www.theremino.com/contacts/producers


Donazioni
 

Il codice sorgente dei nostri programmi non contiene note sul copyright, nomi degli autori e link al nostro sito, per cui potete farne ogni uso, senza limitazioni di alcun genere. Non chiediamo di specificare la fonte originale o il nostro sito ma se sarete contenti del nostro software ricordatevi di noi e fate conoscere questo sito ai vostri amici. Eventuali donazioni, anche piccole, sono molto gradite e possono aiutarci a mantenere il software “free” ed a produrne sempre di nuovo.

Comments are closed.