Armando47: Difference between revisions

From ciapini
Jump to navigation Jump to search
No edit summary
 
(42 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:Telecom]]
[[File:Aardvark2 (PSF).png]]
''modem tascabile''
''modem tascabile''


modem piccolo, economico e a basso consumo per lo scambio a bassa velocita' di dati cifrati su canali rumorosi half-duplex con banda passante da 1Hz a 5khz.
modem piccolo, economico e a basso consumo per la comunicazione digitale a bassa velocita' su canali rumorosi half-duplex con banda passante da 1Hz a 5khz.


i mezzi fisici usabili possono essere  
{{Special:PrefixIndex/{{FULLPAGENAME}}/}}
* radio(pmr, cb, hf)
 
* rame(linee PSTN, doppino, linea elettrica)
== Caratteristiche del mezzo trasmissivo ==
* ottico (su fibra o in aria http://ronja.twibright.com/)
 
* sempre broadcast
* banda 1 Hz - 5 kHz
* puo avere SNR infimi
* e' half-duplex
* puo' avere tempi di commutazione R/T lunghi
* non ha meccanismi di collision detect
* puo' non essere possibile la rilevazione di canale occupato
* puo' presentare condizioni di terminale nascosto
* puo contenere uno o piu' canali
 
esempi di mezzi fisici usabili possono essere:
* radio(pmr, cb, vhf, hf)
* rame
** RS485
** Powerline
* ottico
** fibra
** in aria
* acustico
* acustico
* idroacustico
* idroacustico
Line 12: Line 32:
* neutroni
* neutroni
* neutrini
* neutrini
* onde gravitazionali (http://astronomyonline.org/Astrobiology/SETIAlternatives.asp)
* onde gravitazionali
* piccioni, topi, cani, blatte
* piccioni, topi, cani, blatte


chi e' interessato a una parte se la prenoti!
== Caratteristiche ==
 
=== Alimentazione ===
* gnugo: FEC, interleaver, hardware, demodulatore
3.3v DC
* ciaby: dds
* ema: aprs
 
== TODO ==
* Decidere dove mettere il modem, il terminale, la chat
* In-band or out-of-band signalling? (Controllare lo standard Hayes/AT, Xmodem/Zmodem, escape characters)
* Come gestire la memoria: volatile (si perde tutto al riavvio) / non volatile (salvare lo stato nella flash)
** http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en538000
* Bisogna scrivere il menu di configurazione
* Possibile out-of-band con il FT232*
* Uso automatico (modem, APRS) / Uso manuale (chat/sms)
 
----
 
== Livello fisico ==
 
=== Caratteristiche del mezzo trasmissivo ===
 
* e' sempre broadcast
* banda 1 Hz - 5 kHz
* puo avere SNR infimi
* e' sempre half-duplex
* puo' avere tempi di commutazione lunghi
* non ha meccanismi di collision detect
* puo' essere possibile la rilevazione di canale occupato
* puo' presentare condizioni di terminale nascosto
* contiene uno o piu' canali
 
=== Caratteristiche elettriche ===


=== Porte audio ===
input e output sbilanciati standard consumer line-level −10 dBV con impedenza 10kohm
input e output sbilanciati standard consumer line-level −10 dBV con impedenza 10kohm
seriale UART con livelli TTL 3.3v


=== Modulazione ===
=== Modulazione ===


Implementa schemi di modulazione ASK, PSK, QAM o FSK , con costellazioni di dimensione da 2 a 32, frequenza massima 5khz (campionamento a 16khz).
Implementa squalsiasi combinazione di ASK, PSK, e FSK, con costellazioni di dimensione da 2 a 16, frequenza massima 5khz (campionamento a 20khz).
 
Ogni simbolo della modulazione viene descritto come una struttura:
 
<source lang="C">
struct symbol_struct {
    uint16_t rotor_inc;
    uint16_t phase_offset;
    float gain;
};
</source>
 
http://cgit.brokenbydesign.org/cgit.cgi/armando.git/plain/dds.h
 
 
==== FSK ====
La modulazione si fa facilmente con un accumulatore di fase.
 
http://cgit.brokenbydesign.org/cgit.cgi/armando.git/plain/dds.c
 
http://altivec.indivia.net/code/modulator.c (OOK, BFSK e BPSK)
 
La demodulazione è fattibile in linea di principio con:
 
* FFT: si prende un blocco di campioni, si fa la FFT e si misurano le energie nei bin corrispondenti alle frequenze di ciascun simbolo. Se il segnale ha però una banda stretta rispetto alla banda totale dei dati, calcolare tutti i bin è uno spreco inutile; inoltre la FFT deve avere una risoluzione sufficiente almeno a mappare le diverse frequenze in bin diversi, e questo richiede una quantità sufficiente di campioni. Se questa quantità supera di molto il numero di campioni per simbolo, questo sistema non funziona.
 
* Banco di filtri adattati: se ci sono N simboli (N frequenze) si costruiscono N filtri narrow-band centrati sulle frequenze corrispondenti. I dati vengono filtrati con ciascun filtro e si ottengono in uscita le N ampiezze, che formano un vettore che rappresenta il simbolo. Questo sistema dovrebbe andare bene se non ci aspettiamo portanti troppo ballerine; in particolare la fluttuazione della portante non deve portare una frequenza sopra al filtro di quella vicina. Schema a blocchi: http://www.zipcores.com/skin1/zipdocs/graphics/fsk_demod_block_diag.jpg Correzione automatica della soglia in presenza di fading selettivo: http://www.w7ay.net/site/Technical/Old/ATC/
 
* Misura della variazione di fase: si costruisce una portante e si demodula il segnale in modo che le frequenze dei simboli siano centrate sulla DC. Si moltiplica ciascun campione demodulato con il complesso coniugato del campione precedente. La fase di questo prodotto rappresenta la variazione della fase del segnale tra i due campioni, ovvero la frequenza del segnale, che quindi è direttamente mappabile nel simbolo corrispondente. Questo metodo dovrebbe essere computazionalmente banale e abbastanza robusto a derive della portante; se necessario, dovrebbe permettere un tracking semplice della portante stessa.
 
letture:
* http://www.w7ay.net/site/Technical/Old/ATC/
* http://www.cse.yorku.ca/course_archive/2010-11/F/3213/CSE3213_07_ShiftKeying_F2010.pdf
 
==== PLL ====
 
quando si e' riconosciuto il preambolo, un PLL deve sincronizzarsi con la portante del segnale. fatto questo l'oscillatore locale rimane fisso fino alla fine del pacchetto. praticamente lo smorzamento del loop e' basso durante il preambolo e diventa infinitamente alto durante il pacchetto.
 
letture:
* https://en.wikipedia.org/wiki/Phase-locked_loop#Implementing_a_digital_phase-locked_loop_in_software
* http://lists.canonical.org/pipermail/kragen-hacks/2012-February/000534.html una delle cose piu divertenti che abbia mai provato
* http://arachnoid.com/phase_locked_loop/
 
== Hardware ==
 
=== PCB ===
 
il circuito stampato + componenti avra spessore minimo (6 mm), e dovrebbe essere abbastanza piccolo (8-10 cm2)
 
* http://www.pcbproject.it/
 
=== Connessioni ===
 
sulla scheda si potrebbero mettere semplicemente i vari header
 
 
==== Connettore GPIO ====
 
header 4 pin, ad uso generico (radiocomandi) e per esporre i simboli in maniera digitale
 
{|style="color:orange; background-color:#eeeeee;" cellpadding="10" cellspacing="0" border="1"
||1||GPIO0||
|-
||2||GPIO1||
|-
||3||GPIO2||
|-
||4||GPIO3||
|-
||5||GPIO4||
|-
||6||GPIO5||
|}
 
==== Connettore TinyTrack ====
 
header 8 pin
 
ha tutto quel che serve lato radio
 
va collegato a un db9 col pinout usato da quelli di tinytrack http://www.byonics.com/tinytrak4/
 
http://ciapini.contaminati.net/wiki/images/TinyTrak3Plus_Schematic.png
 
{|style="color:blue; background-color:#eeeeee;" cellpadding="10" cellspacing="0" border="1"
||1||AUDIO_OUT||Audio out
|-
||2||CARR_DET||Carrier detect
|-
||3||PTT_OUT||PTT Out
|-
||4||SW1||Switch (vedi sotto)
|-
||5||AUDIO_IN||Audio in
|-
||6||GND||Ground
|-
||7||VDD||Ingresso positivo alimentazione non regolato
|-
||8||PTT_IN||PTT In
|}
 
 
SW1: ''This switch input will select the primary or secondary operating parameters. When left floating, or at 5 volts, the primary parameters are used. When grounded, secondary parameters are used. Whenever this switch is changed, the timers are reset, the Carried Detect LED (D2) will blink rapidly for a short time, and then a transmission will be sent. SW1 is also available on J1 pin 4. This switch input is optional, and can be left unconnected.''
 
==== Seriali ====
 
===== In-Band =====
 
header 1x3 pin
 
solo ed esclusivamente i dati trasmessi e ricevuti
non ha flow control (ne HW ne SW), bisogna studiare una strategia magari usando la out-band uart
 
{|style="color:green; background-color:#eeeeee;" cellpadding="10" cellspacing="0" border="1"
|-
||1||U1_RX||UART1 receive.
|-
||2||U1_TX||UART1 transmit.
|-
||3||U1_GND||Ground
|}
 
===== Out-Band =====
 
header 1x3 pin
 
espone un terminale tty con menu di configurazione, applicazioni di chat, ecc
 
 
{|style="color:green; background-color:#eeeeee;" cellpadding="10" cellspacing="0" border="1"
|-
||1||U2_RX||UART2 receive.
|-
||2||U2_TX||UART2 transmit.
|-
||3||U2_GND||Ground
|}
 
==== Connettore programmazione ====
 
Serve per poter programmare il pic una volta installato. Vanno ai rispettivi pin sul uC.
 
{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1"
!Pin
!Funzione
!Nome
|-
|1||Abilitazione programmazione||ICSP_MCLR
|-
|2||Positivo. Dev'essere interrompibile con jumper||VDD
|-
|3||Negativo||VSS
|-
|4||Dati programmazione||ICSP_DATA
|-
|5||Clock programmazione||ICSP_CLOCK
|-
|6||Non usato||Aux
 
|}
 
==== Connettore alimentazione ====
 
{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1"
!Pin
!Funzione
!Nome
|-
|1||input a monte del regolatore||RAW_VDD_INPUT
|-
|2||output del regolatore||REG_VDD_OUTPUT
|-
|3||input 3.3 regolati||VDD
|-
|4||massa|VSS
|}
 
=== Componenti interni ===
 
* processore: dspic33fj128gp802 oppure dsPIC33FJ128GP804 se i piedini non ci bastano
* quarzo 8mhz
* quarzo 32khz
* op-amp filtro antialias input ADC 1/2 MCP6022 http://ww1.microchip.com/downloads/en/DeviceDoc/21685d.pdf
* op amp uscita DAC 1/2 MCP6022
* condensatori di livellamento vari
 
==== Filtro anti-aliasing ====
 
passivo + secondo ordine sallen-key
 
* http://ww1.microchip.com/downloads/en/AppNotes/00699b.pdf
* http://www.ti.com/tool/antialiasingcalc
 
==== Buffer uscita DAC ====
 
http://ww1.microchip.com/downloads/en/DeviceDoc/70211B.pdf
 
1/2 MCP6022
 
=== uC ===
 
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en532298 dsPIC33FJ128GP802
 
* RAM: 16K
* Flash: 128K
* Timers: 5
* UART: 2
* primitive DSP
* ADC >=12bit
* DAC >=12bit
 
 
==== Power Management ====
 
quando non e' attivo ne il PTT ne il Carrier Detect, ne arrivano dati sulla UART, il device va in idle mode. avendo piedini per farlo si potrebbe anche spegnere l'LDO analogico.
 
==== Mappa pin ====
 
{|style="color:green; background-color:#ffffdd;" cellpadding="10" cellspacing="0" border="1"
!Pin
!Funzione
!Nome
!porta sul uC
|-
|1||MCLR|| ||MCLR
|-
|2||GPIO0|| ||AN0/VREF+/CN2/RA0
|-
|3||GPIO1|| ||AN1/VREF-/CN3/RA1
|-
|4||Dati ICSP/GPIO2/PWM0/ANALOG0|| ||PGED1/AN2/C2IN-/RP0(1)/CN4/RB0
|-
|5||Clock ICSP/GPIO3/PWM1/ANALOG1|| ||PGEC1/ AN3/C2IN+/RP1(1)/CN5/RB1
|-
|6||GPIO4/PWM2/ANALOG2|| ||AN4/C1IN-/RP2/CN6/RB2
|-
|7||GPIO5/PWM3/ANALOG3|| ||AN5/C1IN+/RP3/CN7/RB3
|-
|8||V -|| ||VSS
|-
|9||Xtal 32MHz/GPIO6|| ||OSC1/CLKI/CN30/RA2
|-
|10||Xtal 32MHz/GPIO7|| ||OSC2/CLKO/CN29/PMA0/RA3
|-
|11||Xtal 32.768 kHz|| ||SOSCI/RP4(1)/CN1/PMBE/RB4
|-
|12||Xtal 32.768 kHz|| ||SOSCO/T1CK/CN0/PMA1/RA4
|-
|13||V +|| ||VDD
|-
|14||U1RX registro RPINR18|| ||PGED3/ASDA1/RP5 /CN27/PMD7/RB5
|-
|15||U1TX RP 00011|| ||PGEC3/ASCL1/RP6(1)/CN24/PMD6/RB6
|-
|16||U2RX registro RPINR19|| ||INT0/RP7(1)/CN23/PMD5/RB7
|-
|17||U2TX RP 00101|| ||TCK/SCL1/RP8(1)/CN22/PMD4/RB8
|-
|18||Carrier Detect|| ||TDO/SDA1/RP9(1)/CN21/PMD3/RB9
|-
|19||V -|| ||VSS
|-
|20||10 uF tantalio verso VSS|| ||VCAP
|-
|21||PTT In|| ||PGED2/TDI/RP10(1)/CN16/PMD2/RB10
|-
|22||PTT Out || ||PGEC2/TMS/RP11(1)/CN15/PMD1/RB11
|-
|23||DAC left +|| ||AN12/DAC1RP/RP12(1)/CN14/PMD0/RB12
|-
|24||DAC left -|| ||AN11/DAC1RN/RP13(1)/CN13/PMRD/RB13
|-
|25||ADC Audio In|| ||AN10/DAC1LP/RTCC/RP14(1)/CN12/PMWR/RB14
|-
|26||ADC Vbatt In|| ||AN9/DAC1LN/RP15(1)/CN11/PMCS1/RB15
|-
|27||V - analogico|| ||AVSS
|-
|28||V + analogico|| ||AVDD
 
|}
 
----
----
 
== Software ==
 
=== Modalita GPIO ===
 
Armando ha 6 GPIO che possono lavorare nelle seguenti modalita'
 
==== R/C ====
 
http://www.aerodesign.de/peter/2000/PCM/PCM_PPM_eng.html
 
{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1"
!CH
!porta
!descrizione
|-
|1||GPIO0||
|-
|2||GPIO0||
|-
|3||ANALOG0/PWM0||
|-
|4||ANALOG1/PWM1||
|-
|5||ANALOG2/PWM2||
|-
|6||ANALOG3/PWM3||
|}
 
 
GPIO0 e GPIO1 sono ingressi logici
 
ANALOG0 - ANALOG3 sono ingressi analogici (0-vdd)
 
armando va in trasmissione (setta PTT_OUT alto) quando lo stato degli input cambia.
 
il protocollo di trasporto e' [[arNet]]
 
in Rx:
 
dai pin PWM0-3 esce un segnale pwm in standard analog servo r/c.
dai pin GPIO0-1 esce un livello logico
 
* frequenza: 50 Hz
* 0 duty cycle: 1.25 ms
* 512 duty cycle: 1.50 ms
* 1023 duty cycle: 1.75 ms
* VLo: Vss
* VHi: Vdd
 
=== Protocolli ===
 
armando e' in grado di parlare differenti protocolli
 
==== APRS ====
 
Automatic Packet Reporting System, e' un sistema di localizzazione a pacchetti che usa un protocollo AX.25 in modalita senza connessione su una modulazione afsk Bell 202 a 1200 bps
 
sarebbero utili 3 modalita APRS
* client, che riceve dalla UART stringhe NMEA e le trasmette in aprs
* digipeater, che ritrasmette i messaggi APRS ricevuti
* gateway, che manda via UART i messaggi APRS ricevuti
 
Qui c'è vita morte e miracoli dell'aprs, con relative specifiche:
 
http://www.aprs.org/
 
la prima reference: ftp://ftp.tapr.org/aprssig/aprsspec/spec/aprs101/APRS101.pdf
 
sw da cui è possibile attingere: http://info.aprs.net/index.php?title=Software
 
Per fortuna ci sono delle bellissime librerie in c++
 
http://sourceforge.net/projects/libaprs/
 
http://sourceforge.net/projects/ax25/
 
https://code.google.com/p/trackuino/ (solo invio) c'e' una versione in gcc-C, progetto vivo
* nei file trackuino-firmware-1.4/trackuino/ax25.cpp e trackuino-firmware-1.4/trackuino/aprs.cpp sembra esserci quel che serve
 
 
https://sites.google.com/site/ki4mcw/Home/arduino-tnc (solo ricezione)
 
http://aprsdroid.org/ (invia e riceve, codice utilizzabile?) AGH! e' scritto in SCALA.. mi sa di no
 
==== arNet ====
 
[[ArNet]]
 
==== ANI ====
 
client e server Push-To-Talk ID e selective calling.
 
tipi di ANI
 
* Motorola’s MDC-1200
* Kenwood’s FleetSync
* Harris’ G-Star (aka GE-Star)
* DTMF
* 5-Tone
 
letture:
* https://en.wikipedia.org/wiki/Selective_calling
 
==== Morse ====
 
* http://kb8ojh.net/msp430/morse_encoding.html
 
=== generatore OTP ===
 
dato che abbiamo un rtc l'apparato potrebbe fare da one time password generator.
usiamo la chiave come seme? che implementazioni ci sono?
 
letteratura:
* https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm
* https://otpd.googlecode.com/svn-history/r77/trunk/cardops/totp.c
* https://www.yubico.com/products/yubikey-hardware/yubikey/
* https://code.google.com/p/yubikey-personalization/
 
=== stringa di configurazione ===
 
la configurazione dell'apparato deovrebbe essere importabile ed esportabile come una stringa esadecimale
 
anche la chiave crittografica sara una stringa di 32/48/64 caratteri esadecimali
 
=== PIN/PUC ===
 
quando il device andra in sleep sara necessario un pin di 4 caratteri per risvegliarlo
 
dopo 5 tentativi sbagliati, il device dimentica la chiave crittografica.
 
=== Crittazione ===
Se vogliamo usare AES, questo potrebbe fare al caso nostro:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en027644
 
[[ArNet#Cifratura]]
 
== Mezzi fisici ==
 
=== Powerline ===
 
* https://it.wikipedia.org/wiki/Powerline
* https://it.wikipedia.org/wiki/LonWorks
* https://en.wikipedia.org/wiki/KNX_%28standard%29
* https://en.wikipedia.org/wiki/G.hn
* http://www.st.com/web/catalog/sense_power/FM1968/SC923/PF144101
 
== Possibili usi ==
 
=== Comunicazione sicura mobile ===
L'apparato in modalita' modem+microterminale e' connesso a un CB/PMR/LPD. Ogni terminale puo' mandare e ricevere informazioni in maniera sicura senza rischio di essere intercettati. Volendo si puo' stabilire una stazione fissa collegata a un pc dove si loggano tutti i messaggi e si possono mandare informazioni in broadcast/multicast, nonche' creari ponti radio a lunga distanza mediante internet/ponti radio wifi/etc. etc.
 
Dove:
* polizia comunitaria (Mexico)
* manifestazioni (ovunque)
* qualunque evento pubblico in cui si voglia coordinare su corto/medio raggio.
 
=== rete dati a banda stretta ===
Una serie di modem collegati a computer che utilizzano il protocollo ArNet per scambiarsi dati a bassa velocita'. Utilizzabile come rete primaria per comunicazione scritta, oppure come rete di backup in caso di spegnimento della rete internet.
Dove: ovunque il governo abbia la possibilita' di censurare/spegnere le connessioni internet (Egitto, Siria, Libia, Turchia...).
 
=== data-logger, APRS ===
Il modem e' collegato direttamente a un altro dispositivo via UART, e manda/riceve dati a velocita' e intervallo costante. Se la UART non e' disponibile o troppo complessa, si possono i usare i GPIO.
 
Dove:
* data-logging scientifico
* APRS per mezzi e/o persone in movimento
* sistemi di soccorso.
 
=== radiocomando R/C ===
 
* TX: i gpio sono input analogici
* RX: i gpio sono output pwm in standard r/c
 
== sintassi uart controllo ==
 
 
== comandi configurazione ==


{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1"
Il symbol rate va da 1 a 1200 baud/s
!nome
!valore
!argomento
!descrizione
|-
|NUL||0x00|| ||Nullo
|-
|RGR||0x01||registro||Legge valore registro di configurazione
|-
|RGW||0x02||registro+valore||Scrive valore nel registro
|-
|TQA||0x03||dati||Appende dati nella coda TX
|-
|TQF||0x04||||Termina scrittura coda TX
|-
|RQR||0x05||n||Legge n bytes dalla coda RX
|-
|RST||0x06||||Resetta modem
|}


== registri configurazione ==
=== UART ===
2 seriali UART 9600N1 con livelli TTL 3.3v


{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1"
=== GPIO ===
!nome
8 GPIO con acquisizione analogica e output PWM
!valore
!dimensione (byte)
!descrizione
|-
|SYF||0x01||3||1 byte symbolo (00 - 15), 2 byte frequenza
|-
|SYP||0x02||3||1 byte symbolo (00 - 15), 2 byte fase
|-
|SYA||0x03||3||1 byte symbolo (00 - 15), 2 byte ampiezza
|-
|MBS||0x04||1||Bit per simbolo
|-
|MSR||0x05||2||Symbol rate
|}

Latest revision as of 20:41, 28 September 2016

Aardvark2 (PSF).png modem tascabile

modem piccolo, economico e a basso consumo per la comunicazione digitale a bassa velocita' su canali rumorosi half-duplex con banda passante da 1Hz a 5khz.

Caratteristiche del mezzo trasmissivo

  • sempre broadcast
  • banda 1 Hz - 5 kHz
  • puo avere SNR infimi
  • e' half-duplex
  • puo' avere tempi di commutazione R/T lunghi
  • non ha meccanismi di collision detect
  • puo' non essere possibile la rilevazione di canale occupato
  • puo' presentare condizioni di terminale nascosto
  • puo contenere uno o piu' canali

esempi di mezzi fisici usabili possono essere:

  • radio(pmr, cb, vhf, hf)
  • rame
    • RS485
    • Powerline
  • ottico
    • fibra
    • in aria
  • acustico
  • idroacustico
  • induzione magnetica
  • neutroni
  • neutrini
  • onde gravitazionali
  • piccioni, topi, cani, blatte

Caratteristiche

Alimentazione

3.3v DC

Porte audio

input e output sbilanciati standard consumer line-level −10 dBV con impedenza 10kohm

Modulazione

Implementa squalsiasi combinazione di ASK, PSK, e FSK, con costellazioni di dimensione da 2 a 16, frequenza massima 5khz (campionamento a 20khz).

Il symbol rate va da 1 a 1200 baud/s

UART

2 seriali UART 9600N1 con livelli TTL 3.3v

GPIO

8 GPIO con acquisizione analogica e output PWM