====== Stratum 1 Orangepi ======
Come avere un orologio preciso (ordine di microsecondi) in casa? Basta prendere un ricevitore GPS!
{{ :progetti:stratum_zero:e.jpeg?direct&400 |}}
* **Responsabile**: g5pw
* **Membri**: g5pw
* **Data inizio**:
* **Data fine**: 24/2/2019
===== Materiali =====
* Orange Pi Zero
* Ricevitore GPS con PPS
===== Costruzione =====
Come prima cosa c'è da individuare i pin necessari per il collegamento. Per il GPS basta collegare alimentazione (Vcc e GND), comunicazione (RX, TX) e il pin di PPS. Il PPS deve essere collegato a un pin con interrupt.
Non tutti i pin sul header supportano interrupt! Interrupt solo su ''PA*'', ''PG'', ''PL'' (vedi data sheet Allwinner H3 p. 74)
{{gallery>stratum_zero?lightbox&240x240&=4}}
===== Configurazione =====
Innanzitutto bisogna dire al kernel di usare i pin come UART e come PPS. Questo si fa configurando il device tree.
Il modo in cui farlo dipende da distribuzione a distribuzione (alcuni hanno supporto dei DTB overlay).
==== Fedora ====
Su Fedora, si fa con ''fdtput'', che permette di modificare il device tree compilato.
NB: Per rendere effettive le modifiche è necessario un riavvio.
fdt=/boot/dtb-4.14.5-300.fc27.armv7hl/sun8i-h3-orangepi-pc.dtb
# setup TTY
fdtput -t s $fdt '/soc/serial@01c28c00' status okay
# setup pps pin
## Setup pinctrl
fdtput -c $fdt '/soc/pinctrl@01c20800/pps0'
fdtput -t s $fdt '/soc/pinctrl@01c20800/pps0' pins PD14
fdtput -t s $fdt '/soc/pinctrl@01c20800/pps0' function "gpio_in"
# setup PPS device
fdtput -c $fdt /soc/pps
fdtput -t s $fdt /soc/pps compatible pps-gpio
fdtput $fdt /soc/pps gpios 6 0 12 0
==== Armbian ====
Su armbian basta aprire il file ''/boot/armbianEnv.txt'' e inserire le seguenti linee (occhio a non avere un ''overlay='' duplicato!)
overlays=uart1 pps-gpio
param_pps_pin=PA7
===== GPSd =====
Basta inserire nella configurazione GPSd in ''/etc/default/gpsd'':
# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyS1"
# Other options you want to pass to gpsd
GPSD_OPTIONS="-n"
E far partire GPSd all'avvio con ''systemctl enable --now gpsd''
===== Chrony =====
Per attivare il GPS + PPM su Chrony basta aggiungere queste linee al suo config.
refclock SHM 0 refid GPS precision 1e-1 offset 0.134 delay 0.2 noselect
refclock PPS /dev/pps0 lock GPS
====== Bonus stuff ======
Un po' di cose extra che ho deciso di aggiungere.
===== Display LCD Crystalfontz =====
Un display LCD comandato via USB che è supportato da [[https://lcd4linux.bulix.org/wiki/Howto|LCD4linux]], che ho configurato per mostrare l'ora corrente.
===== RTC =====
Per fare in modo che il tempo venga salvato a OrangePI spenta. FIXME (work in progress)
===== Battery backup/UPS =====
Ulteriore sicurezza per la OrangePi.
===== Link Utili =====
* https://frillip.com/raspberry-pi-stratum-1-ntp-server/
* http://linux-sunxi.org/Xunlong_Orange_Pi_PC
* http://elixir.free-electrons.com/linux/v4.14.5/source/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt
* https://www.blackmagicboxes.com/?p=581
* http://dl.linux-sunxi.org/H3/Allwinner_H3_Datasheet_V1.0.pdf
* http://developer.ridgerun.com/wiki/index.php?title=Edit_device_tree_at_run_time
* https://forum.armbian.com/topic/4944-opi-zero-gps-ntpserver/