Armando47: Difference between revisions

From ciapini
Jump to navigation Jump to search
Line 295: Line 295:
|8||V -|| ||VSS  
|8||V -|| ||VSS  
|-
|-
|9||Xtal 32MHz|| ||OSC1/CLKI/CN30/RA2
|9||Xtal 32MHz/GPIO6|| ||OSC1/CLKI/CN30/RA2
|-
|-
|10||Xtal 32MHz|| ||OSC2/CLKO/CN29/PMA0/RA3  
|10||Xtal 32MHz/GPIO7|| ||OSC2/CLKO/CN29/PMA0/RA3  
|-
|-
|11||Xtal 32.768 kHz|| ||SOSCI/RP4(1)/CN1/PMBE/RB4  
|11||Xtal 32.768 kHz|| ||SOSCI/RP4(1)/CN1/PMBE/RB4  

Revision as of 17:32, 21 January 2014

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.

i mezzi fisici usabili possono essere

chi e' interessato a una parte se la prenoti!

  • gnugo: FEC, interleaver, hardware, demodulatore
  • 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)
  • 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

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

seriale UART con livelli TTL 3.3v

Modulazione

Implementa schemi di modulazione ASK, PSK, QAM o FSK , con costellazioni di dimensione da 2 a 32, frequenza massima 5khz (campionamento a 16khz).

Ogni simbolo della modulazione viene descritto come una struttura:

struct symbol_struct {
    uint16_t rotor_inc;
    uint16_t phase_offset;
    float gain;
};

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: 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:

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:

Hardware

PCB

il circuito stampato + componenti avra spessore minimo (6 mm), e dovrebbe essere abbastanza piccolo (8-10 cm2)

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

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/

TinyTrak3Plus_Schematic.png

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

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


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.

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

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 VSS

Componenti interni

Filtro anti-aliasing

passivo + secondo ordine sallen-key

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

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

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:

Morse

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:

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

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

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

nome 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