Note sulla CM3-Home

Note sulla CM3-Home

Assegnazione periferiche sul pannello demo

| Indirizzi DALI | Colore |
|----------------|--------|
| 22             | Green  |
| 23             | Red    |
| 24             | Blue   |
| 25             |        |

I dispositivi KMTronic sono collegati alla /dev/ttyUSB0

Il lampeggiatore è collegato al GPIO21 Il teleruttore è collegato al GPIO22

Comandi utili per la seriale

stty -F /dev/ttyACM0 115200
echo "Ciao" > /dev/ttyACM0

Log per vedere se sono stati caricati gli overlay

vcdbg log msg

Cambio del repository Raspbian

Per velocizzare l'installazione di pacchetti o in alcuni casi anche solo per riuscire a farla conviene usare un repository geograficamente vicino:

Nel file /etc/apt/sources.list commentare la linea:

#deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi

e sostituirla ad esempio con:

deb http://raspbian.mirror.garr.it/mirrors/raspbian/raspbian/ stretch main contrib non-free rpi

Quindi aggiornare l'indice dei package con:

sudo apt-get update

La lista dei repository disponibili è questa: http://www.raspbian.org/RaspbianMirrors

Led RGB

Assegnazione delle linee:

  • GPIO 36 Red 0=on
  • GPIO 35 Green 0=on
  • GPIO 34 Blue 0=on

Script di test in Python:

import RPi.GPIO as GPIO
import time

RED_LED=36
GREEN_LED=35
BLUE_LED=34

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(RED_LED,GPIO.OUT)
GPIO.setup(GREEN_LED,GPIO.OUT)
GPIO.setup(BLUE_LED,GPIO.OUT)

for i in range(5):
    GPIO.output(RED_LED,GPIO.LOW)
    GPIO.output(GREEN_LED,GPIO.HIGH)
    GPIO.output(BLUE_LED,GPIO.HIGH)
    time.sleep(0.5)

    GPIO.output(RED_LED,GPIO.HIGH)
    GPIO.output(GREEN_LED,GPIO.LOW)
    GPIO.output(BLUE_LED,GPIO.HIGH)
    time.sleep(0.5)

    GPIO.output(RED_LED,GPIO.HIGH)
    GPIO.output(GREEN_LED,GPIO.HIGH)
    GPIO.output(BLUE_LED,GPIO.LOW)
    time.sleep(0.5)

GPIO.output(RED_LED,GPIO.HIGH)
GPIO.output(GREEN_LED,GPIO.HIGH)
GPIO.output(BLUE_LED,GPIO.HIGH)

Device tree per assegnare le seguenti funzioni ai tre colori:

  • Led verde heartbeat
  • Led rosso attività su mmc0
  • Led blu spento

Salvare nel file cm3-home-leds.dts

/dts-v1/;
/plugin/;
/ {
    compatible = "brcm,bcm2708";

    fragment@0 {
        target = <&leds>;
        __overlay__ {

            rgb_red: rgb_red {
                label = "rgb_red";
                gpios = <&gpio 36 1>;
                linux,default-trigger = "mmc0";
            };


            rgb_green: rgb_green {
                label = "rgb_green";
                gpios = <&gpio 35 1>;
                linux,default-trigger = "heartbeat";
            };

            rgb_blue: rgb_blue {
                label = "rgb_blue";
                gpios = <&gpio 34 1>;
                linux,default-trigger = "none";
            };
        };
    };
};

Altri funzioni definibili:

[none] kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on input panic mmc0

Per compilare l'overlay:

sudo apt-get update
apt-get install device-tree-compiler

sudo dtc -@ -I dts -O dtb -o /boot/overlays/cm3-home-leds.dtbo cm3-home-leds.dts 

Aggiungere in /boot/config.txt le righe:

#CM3-Home led definition
dtoverlay=cm3-home-leds

Fare reboot poi per controllare che l'overlay sia stato caricato bene:

sudo vcdbg log msg

Le seguenti directory dovrebbero essere state create dopo il boot:

$ ls -al /sys/class/leds/rgb*
lrwxrwxrwx 1 root root 0 Oct  5 12:59 /sys/class/leds/rgb_blue -> ../../devices/platform/leds/leds/rgb_blue
lrwxrwxrwx 1 root root 0 Oct  5 12:59 /sys/class/leds/rgb_green -> ../../devices/platform/leds/leds/rgb_green
lrwxrwxrwx 1 root root 0 Oct  5 12:59 /sys/class/leds/rgb_red -> ../../devices/platform/leds/leds/rgb_red

Wifi

Assegnazione delle linee:

  • GPIO 37 WiFi ON

Configurare l'accesso su /etc/wpa_supplicant/wpa_supplicant.conf

country=IT                                                                                                                               
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev                                                                                  
update_config=1                                                                                                                          

network={                                                                                                                                
    ssid="TanzoLab"                                                                                                                      
    psk="tanzolab"                                                                                                                       
}  

Accendere l'alimentazione:

On:

echo 37 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio37/direction                                   
echo 1 > /sys/class/gpio/gpio37/value

Off:

echo 0 > /sys/class/gpio/gpio37/value

Dali

Assegnazione delle linee:

  • TX su GPIO31
  • RX su GPIO30

Collegare un dispositivi DALI. Settarlo ad indirizzo 2. Scaricare l'utility per testare la comunicazione:

wget https://raw.githubusercontent.com/tanzilli/cm3-utilities/master/dali.py

Chiudere il ponticello LIGHT PWR e lanciare il comando:

python daly.py

Utility in Python usata per fare un controllo dimmerato con un ballast PowerLed

Connettore di espansione (8+8) J3

Assegnazione delle linee:

| Pin # | Segnale           | Linea CPU |
|-------|-------------------|-----------|
| 1     | 3V3 out           |           |
| 2     | 3V3 out           |           |
| 3     | SPI0 CE1          | GPIO 7    |
| 4     | Display backlight | GPIO 18   |
| 5     | SPI0 CE0          | GPIO 8    |
| 6     | Display reset     | GPIO 23   |
| 7     | SPI0 MOSI         | GPIO 10   |
| 8     | Display D/C       | GPIO 24   |
| 9     | SPI0 MISO         | GPIO 9    |
| 10    | Display IRQ       | GPIO 25   |
| 11    | Display GPIO      | GPIO 26   |
| 12    | Available         | GPIO 27   |
| 13    | GND               | GND       |
| 14    | SPI0 SCLK         | GPIO 11   |
| 15    | GND               |           |
| 16    | GND               |           |

Info su come collegarci il display SPI:

I2C su morsetto

Assegnazione delle linee:

  • GPIO 44 SDA
  • GPIO 45 SCL

Per attivarla bisogna abilitare l'i2c da raspi-config e inserire le seguenti linee in config.txt:

#I2C su morsetto
#(https://github.com/raspberrypi/linux/blob/rpi-4.9.y/arch/arm/boot/dts/overlays/README#L783)
dtparam=i2c_arm=on
dtparam=i2c_arm_baudrate=400000
dtoverlay=i2c1-bcm2708,sda1_pin=44,scl1_pin=45,pin_func=6

Installare i2c-tools:

apt-get update
apt-get install i2c-tools

e fare lo scan

i2cdetect -y 1

I2C in bit banging su J3

Come definirla in /boot/config.txt:

Name:   i2c-gpio
Info:   Adds support for software i2c controller on gpio pins
Load:   dtoverlay=i2c-gpio,<param>=<val>
Params: i2c_gpio_sda            GPIO used for I2C data (default "23")

        i2c_gpio_scl            GPIO used for I2C clock (default "24")

        i2c_gpio_delay_us       Clock delay in microseconds
                                (default "2" = ~100kHz)

Come l'ho definita in /boot/config.txt per fare il test:

dtoverlay=i2c-gpio,i2c_gpio_sda=11,i2c_gpio_scl=27
  • J3.13 = SDA
  • J3.14 = SCL

Si annuncia come /dev/i2c3

Link su I2C:

ADC su Yarm

Assegnazione delle linee:

| Morsetto | Analog line   | Yarm pin # | Signal |
|----------|---------------|------------|--------|
| 1        | AIN[1]        | 8          | ADC1   |
| 2        | Analog common |            |        |
| 3        | AIN[0]        | 9          | ADC0   |

Collegarsi con minicom sulla seriale attestata alla Yarm e dopo aver visualizzato il prompt premere "r" per leggere i valori di tensione sui morsetti.

I2C su Yarm

Assegnazione delle linee:

| Segnale | Yarm pin # |
|---------|------------|
| SDA     | 12         |
| SCL     | 13         |

Assegnazione seriali

Linee seriali su chip FT4232H

| /dev/ttyUSB0 | RS485 left  |
| /dev/ttyUSB1 | Yarm        |
| /dev/ttyUSB2 | RS485 right |
| /dev/ttyUSB3 | Serial out  |

Linee seriali dirette su Raspberry pi CM3L

! /dev/ttyAMA0 | KNX        |
! /dev/ttyS0   | Debug port |

Schemi

Datasheet

Overlay

Link utili

Sergio Tanzilli (Autore - Progettista hw & sw - Imprenditore - Musicista dilettante, classe 1964)
Fondatore di Area SX srl, Acme Systems srl e del TanzoLab, si occupa dal 1974 di elettronica digitale, dal 1978 di microprocessori, dal 1992 di microcontroller, dal 1995 di Linux e pubblicazioni su Web, dal 2005 di progettazione, produzione e commercializzazione di schede Linux Embedded.
http://www.tanzilli.com - http://www.acmesystems.it - https://github.com/tanzilli - sergio@tanzilli.com



Le attività del TanzoLab si svolgono ogni mercoledi sera, salvo casi speciali, dalle ore 18:30 presso i locali della Acme Systems srl e consistono in:

  • Talk monotematici a cura di professionisti in vari settori tecnologici
  • Workshop pratici su elettronica embedded, produzione e informatica
  • Progettazione e realizzazione di nuovi prodotti embedded per l'IT

Le attività vengono coordinate tramite questo sito, in cui vengono pubblicati tutti i lavori svolti o in via di sviluppo, e tramite un gruppo Telegram con cui per interagire direttamente via chat con gli altri membri.