In questa sezione presentiamo un mini how-to che, grazie a schemi elettrici e
sorgenti di test, fornisce le linee guida per iniziare a sviluppare con la FOX e
la SX18. Proprio di quest'ultima verrà spiegato come interfacciarsi alle varie
periferiche di cui è dotata.
Sommario dell' HOW-TO
La FOX è una scheda di ridotte dimensioni, solo 66 x 72 mm, basata sul
microprocessore ETRAX LX100 MCM 4+16 prodotto dalla Axis, su cui gira un
completo ambiente Linux completo di server WEB, FTP, SSH ecc. Oltre ad un
interfaccia Ethernet 10/100 Base/T e di due porte USB 1.1 master, la FOX è
dotata di due connettori 20x2 passo 2.54mm su cui sono attestate 62 linee di I/O, un port I2C bus
e 3 seriali asincrone.
Di seguito è riportato il pinout completo, indispensabile per utilizzare la FOX.
J7 |
Pin |
Dir |
Function |
Axis ref |
1 |
|
GND |
|
2 |
|
GND |
|
3 |
I/O |
IOG22 |
H18 |
4 |
I/O |
IOG23 |
H19 |
5 |
I/O |
IOG20 |
G19 |
6 |
I/O |
IOG21 |
G20 |
7 |
I/O |
IOG18 |
F19 |
8 |
I/O |
IOG19 |
G18 |
9 |
I/O |
IOG16 |
G17 |
10 |
I/O |
IOG17 |
E20 |
11 |
|
N.A. |
J17 |
12 |
|
N.A. |
C19 |
13 |
O |
OG25 |
A20 |
14 |
|
N.A. |
C20 |
15 |
|
N.A. |
B20 |
16 |
|
N.A. |
C18 |
17 |
|
N.A. |
E18 |
18 |
|
N.A. |
D19 |
19 |
|
N.A. |
E17 |
20 |
|
N.A. |
D20 |
21 |
I/O |
IOG24 |
E19 |
22 |
O |
I2C_RES |
N18 |
23 |
|
N.A. |
W20 |
24 |
|
N.A. |
C8 |
25 |
|
N.A. |
U19 |
26 |
|
N.A. |
T17 |
27 |
|
N.A. |
Y10 |
28 |
|
N.A. |
V19 |
29 |
|
+5V |
|
30 |
I |
IRQ |
U9 |
31 |
I |
DCD2 |
U7 |
32 |
I |
DSR2 |
V6 |
33 |
I |
RI2 |
Y5 |
34 |
O |
DTR2 |
W5 |
35 |
O |
DL1 |
Y4 |
36 |
O |
DL2 |
Y3 |
37 |
I |
SW1 |
U5 |
38 |
I/O |
PA0 |
W1 |
39 |
|
+3.3V |
|
40 |
|
+3.3V |
|
|
|
|
J2 |
Pin |
Dir |
Function |
Axis ref |
1 |
|
N.C. |
|
2 |
|
GND |
|
3 |
|
GND |
|
4 |
|
+5V |
|
|
|
J10 |
Pin |
Dir |
Function |
Axis ref |
1 |
|
+3.3V |
|
2 |
O |
RTS1 |
|
3 |
O |
TXD1 |
|
4 |
I |
RXD1 |
|
5 |
I |
CTS1 |
|
6 |
|
GND |
|
|
|
|
J6 |
Pin |
Dir |
Function |
Axis ref |
1 |
|
+3.3V |
|
2 |
|
+3.3V |
|
3 |
O |
RTS3 |
B19 |
4 |
I |
RXD3 |
J18 |
5 |
O |
TXD3 |
H20 |
6 |
I |
CTS3 |
J19 |
7 |
O |
RTS2 |
P19 |
8 |
I |
RXD2 |
J20 |
9 |
O |
TXD2 |
K19 |
10 |
I |
CTS2 |
K18 |
11 |
I |
NMI |
A18 |
12 |
|
+5V |
|
13 |
I/O |
IOG9 |
L18 |
14 |
I/O |
IOG8 |
L20 |
15 |
I/O |
IOG11 |
M19 |
16 |
I/O |
IOG10 |
L19 |
17 |
I/O |
IOG13 |
M17 |
18 |
I/O |
IOG12 |
M18 |
19 |
I/O |
IOG15 |
N19 |
20 |
I/O |
IOG14 |
N20 |
21 |
O |
OG2 |
K20 |
22 |
O |
OG5 |
P17 |
23 |
O |
OG1 |
P20 |
24 |
I |
IG1 |
R18 |
25 |
O |
OG4 |
R19 |
26 |
O |
OG3 |
R20 |
27 |
I |
IG4 |
T18 |
28 |
I |
IG3 |
T19 |
29 |
I |
IG2 |
T20 |
30 |
I |
IG5 |
V20 |
31 |
O |
I2C_CLK |
W16 |
32 |
I/O |
I2C_DATA |
V15 |
33 |
|
N.A. |
V16 |
34 |
|
N.A. |
Y17 |
35 |
|
N.A. |
Y18 |
36 |
I/O |
PB4 |
W17 |
37 |
I/O |
PB7 |
U16 |
38 |
I/O |
PB6 |
Y19 |
39 |
|
GND |
|
40 |
|
GND |
|
|
|
|
La scheda SX18 è un hardware ideato per consentire la realizzazione di
progetti che utilizzano FOX senza il bisogno di circuiti esterni o collegamenti
filati per alimentazione o periferiche.
Nelle dimensioni di 150 x 80 mm trovano posto:
- una porta seriale RS232 attestata su un connettore pannellabile
- un connettore per un modulo ricetrasmettitore in radiofrequenza ER400TRS
(per ulteriori informazioni: Trasmissioni in Radiofrequenza facili con Easy Radio)
- un chip Real Time Clock DS1302 con batteria tampone al litio
- due pulsanti di test
- tre led di utilizzo generale
- 1 led di alimentazione
- 3 connettori di espansione 5+5 di uso generale
- 1 connettore di espansione compatibile con la scheda di Ingresso/Uscita
SX16 (per ulteriori informazioni: SX16B - Scheda di espansione IN/OUT)
- 1 connettore di espansione compatibile con la scheda dimmer SX13 (per
ulteriori informazioni: Dimmer multifunzione)
- 1 connettore di espansione per il collegamento di un display LCD
Oltre alle periferiche appena descritte è stata integrata nella SX18 una
completa sezione d'alimentazione a range esteso, che permette di alimentare il
tutto con un normale trasformatore a parete 220v - 12V.
Schema elettrico completo della SX18 :
SX18_Schematic.pdf
Il principale linguaggio di programmazione della FOX è il C. I sorgenti, che
possono essere scritti con un normale editor di testo, vanno compilati tramite
l'apposito SDK, disponibile al momento solo per ambiente Linux, scaricabile
gratuitamente dal sito AXIS all'URL:
http://developer.axis.com/download/compiler/old/
o in alternativa usando WebCompiler accessibile alla pagina
http://www.acmesystems.it/?page=webcompiler.
Il file .out che otteniamo al termine della compilazione, può essere caricato
nella memoria RAM o FLASH della FOX attraverso un normalissimo client FTP, aprendo una
sessione verso l'IP assegnato alla scheda (per default 192.168.0.90) ed usando,
per loggarsi come username root e
password acme.
Per salvare il programma in RAM è necessario trasferire via FTP il file .out nella directory
/var/state. Questa posizione permette di
provare i propri programmi ma appena viene tolta l'alimentazione alla scheda, i
file caricati vengono cancellati. Per salvare il nostro programma in FLASH,
bisogna sempre tramite client FTP salvare il file .out
nella directory /mnt/flash/ in questo caso anche se tolta l'alimentazione i file
non vengono persi.
Una volta completato l'upload dei file, per eseguire i programmi si deve
aprire una console telnet o SSH (si può usare come client
Putty se si lavora sotto
windows)
scendere nella cartella dove è stato copiato il programma
es:
cd /var/state
e rendere eseguibile il file con il comando che segue:
chmod +x programma.out
a questo punto possiamo lanciare il nostro esempio precedendo al nome
dell'eseguibile un "./"
./programma.out
I tre LED di test presenti sulla SX18: DS2, DS3 e DS4 sono collegati
rispettivamente ai pin 13 (OG25), 21 (OG0) e 38(PA0) presenti sul connettore J7
della FOX.
Di seguito è riportato un semplice sorgente di test che, dopo aver
inizializzato i vari port, fa lampeggiare in
successione i tre LED.
#include "stdio.h" #include "unistd.h" #include "sys/ioctl.h" #include "fcntl.h" #include "time.h" #include "asm/etraxgpio.h"
#define LED_1 1<<25 #define LED_2 1<<24 #define LED_3 1<<0
#define IO_SETGET_OUTPUT 0x13
int main(void) { int fda; int fdg; int iomask_a; int iomask_b; int iomask_g; int i;
if ((fda = open("/dev/gpioa", O_RDWR))<0) { printf("ERRORE nell'apertura di /dev/gpioa\n"); return 1; } if ((fdg = open("/dev/gpiog", O_RDWR))<0) { printf("ERRORE nell'apertura di /dev/gpiog\n"); return 1; } iomask_a = LED_3; ioctl(fda, _IO(ETRAXGPIO_IOCTYPE, IO_SETGET_OUTPUT),&iomask_a); iomask_g = LED_1 | LED_2; ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_SETGET_OUTPUT),&iomask_g);
while (1) { printf("Test LED\n"); ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS),LED_1); //LED 1 ON sleep(1); ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_CLRBITS),LED_1); //LED 1 OFF sleep(1); ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS),LED_2); sleep(1); ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_CLRBITS),LED_2); sleep(1); ioctl(fda, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS),LED_3); sleep(1); ioctl(fda, _IO(ETRAXGPIO_IOCTYPE, IO_CLRBITS),LED_3); sleep(1); }
close(fda); close(fdg); return 0; }
I due pulsanti test S3 e S4 sono collegati ai pin 29 (IG2) e 28 (IG3)
del connettore J6 della FOX.
Di seguito è riportato il sorgente di test per interfacciarsi con i due
pulsanti. Ogni volta che uno di questi viene premuto appare sulla console un
messaggio che identifica quale dei due è stato chiuso a massa.
#include "stdio.h" #include "unistd.h" #include "sys/ioctl.h" #include "fcntl.h" #include "time.h" #include "asm/etraxgpio.h"
#define BUTTON_1 1<<2 #define BUTTON_2 1<<3 #define IO_SETGET_INPUT 0x12
int main(void) { int fdg; int iomask_g; unsigned char value = 0;
if ((fdg = open("/dev/gpiog", O_RDWR))<0) { printf("ERRORE nell'apertura di /dev/gpiog\n"); return 1; }
iomask_g = BUTTON_1 | BUTTON_2; ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_SETGET_INPUT),&iomask_g);
while(1) { value=ioctl(fdg, _IO(ETRAXGPIO_IOCTYPE, IO_READBITS)); if ((value&(BUTTON_2))==0) printf("Pulsante 1 premuto\n"); if ((value&(BUTTON_1))==0) printf("Pulsante 2 premuto\n"); } }
Sulla SX18 è presente un completo stadio RS232 composto da un
MAX232 (integrato
per convertire i livelli da TTL/CMOS a RS232 ) e un connettore DB a 9 poli
maschio. Oltre ai classici segnali RX e TX, sono riportati sul connettore anche
i controlli di flusso RTS e CTS. Lo stadio seriale RS232 è collegato al device
della FOX identificato come /dev/ttyS3 riportato sui pin 3 (RTS), 4 (RX), 5 (TX)
e 6 (CTS) del connettore J6 di quest'ultima.
Per effettuare il test della seriale, è necessario collegare la SX18 ad un PC
tramite un cavo seriale incrociato il cui schema è riportato di seguito:
E' necessario questo particolare cavo perchè il binomio FOX - SX18 è
configurato come DTE (Data Terminal Equipment) che in un collegamento seriale è
l'equivalente di un PC.
Il sorgente di test proposto è un semplice programma ECHO che rinvia sulla
seriale tutto quello che da essa riceve. Il sorgente vuole essere solo un esempio
che mostra come instaurare una semplice comunicazione con le porte seriali della FOX, in questo
caso particolare con ttyS3.
#include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> #include <sys/types.h> #include <sys/stat.h> #include <signal.h> #include <stdlib.h>
#define BAUDRATE B19200 #define DEVICE "/dev/ttyS3"
int main (int argc, char * argv[]) { int fd, res; struct termios oldtio,newtio; char buf[200]; printf("Apertura Porta COM\n"); fd = open(DEVICE, O_RDWR | O_NOCTTY); if (fd < 0 ) { printf("Device %s non presente su questo sistema\n\n", DEVICE); exit(-1); } printf("Inizializzazione della comunicazione seriale\n");
tcgetattr(fd,&oldtio); /* Salva i precedenti settaggi */
bzero(&newtio, sizeof(newtio)); newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_lflag = 0; newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 1; tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); //Inizializzazione device
seriale terminata
sprintf(buf, "Ciao sono la FOX sulla SX 18 :)\n\rScrivi ti ascolto (digita Q per terminare)\n\r"); if (write(fd, buf, strlen(buf)) < 0) { printf("INVIO SULLA SERIALE FALLITO\n"); } while(1){ res = read(fd,buf,sizeof(buf)); buf[res]=0;
if (write(fd, buf, strlen(buf)) < 0) { printf("INVIO SULLA SERIALE FALLITO\n"); } if (buf[0]=='Q') break; } printf("\nChiusura comunicazione seriale...\n"); tcsetattr(fd,TCSANOW,&oldtio); printf("Arrivederci :)\n"); close(fd); exit(0); }
Per provare il tutto occorre: collegare un PC con la SX18-FOX attraverso un
cavo seriale incrociato (sopra descritto); aprire sul PC una console seriale es: Hyperterminal o Minicom
e una seconda console SSH verso la FOX per lanciare l'applicazione TEST_SERIALE.C. OUT (file
ricavato al termine della compilazione del sorgente sopra riportato)
precedentemente caricata nella memoria della FOX.
A questo punto tutto quello che digiteremo su Hyperterminal lo vedremo comparire
sullo stesso dopo essere passato per la FOX.
La SX18, opzionalmente, può essere equipaggiata con un modulo Easy Radio
ER400TRS, per la trasmissione via radio di dati seriali. Tale modulo consente di
stabilire un affidabile link seriale senza utilizzare fili. Il modulo integra
già tutte le funzionalità necessarie ad una trasmissione radio: codici a
controllo di errore, gestione delle ritrasmissioni, controllo di potenza, ecc.
Lo stadio seriale RF è connesso al device della FOX identificato come /dev/ttyS2
e
riportato sui pin 8 (RXD) e 9 (TXD) del connettore J6 di quest'ultima.
Il link seriale RF può essere adoperato per: comandare la
SX16-RF
una completa scheda
d'espansione I/O wireless, oppure per connettere via onde radio la
SX18 direttamente ad un PC dotato del modulo
USBRF04
Il sorgente per testare la periferica RF della SX18 è identico a quello
precedentemente visto per provare lo stadio RS232, bisogna soltanto modificare
il define DEVICE come segue:
#define DEVICE "/dev/ttyS2"
Al transito dei dati vedremo lampeggiare il led verde etichettato con RFTX.
Nella SX18 è presente un RTC DS1302 della
Dallas, con relativa batteria tampone, pienamente supportato dal kernel
della FOX. L'RTC è indispensabile per mantenere memorizzati data e ora sul
sistema FOX anche quando viene tolta l'alimentazione.
Per impostare l'orario e la data, da console, lanciare il comando data con la
seguente sintassi:
data MMDDHHmmYYYY
dove:
MM il mese da 01 a 12
DD il giorno da 01 a 31
HH l'orario da 00 a 24
mm i minuti da 00 a 59
YYYY l'anno per esteso
es:
date 051813502005
per salvare permanentemente le impostazioni nel chip RTC e far si che
il sistema le ricarichi ad ogni riaccensione, bisogna lanciare
il comando
hwclock -w
Se si vuole visualizzare la data settata sulla FOX, basta digitare da
console il comando data
Il connettore a 10 poli individuato con la scritta "SX16 EXPANDER" è stato studiato per la
connessione diretta alla FOX di una SX16-BASE.
Questa particolare configurazione della SX16, pur mantenendo invariata la sua
dotazione di I/O, è molto più economica perchè non dotata di PIC e modulo Easy
Radio ER400TRS.
La dotazione hardware comprende:
- 24 ingressi di cui
8 ingressi diretti a livelli TTL
(0V-5V)
8 ingressi filtrati (filtro CLC) a
livelli TTL (0V-5V)
8 ingressi optiosolati a cui è
possibile collegare tensioni fino a 24V CC, configurabili anche come ingressi
TTL (0V-5V)
- 6 uscite a relè che consentono di operare con tensioni fino a 125V (30W di
carico)
- 1 sensore di temperatura DS1621 con precisione 1/2 grado e range compreso tra
-55 a + 128°C
La SX16-BASE è la soluzione ideale per implementare un completo stadio di I/O
al proprio micro usando poche linee di controllo di quest'ultimo.
L'expander SX16 è connesso i pin della FOX secondo lo schema riportato nella
tabella che segue
FOX |
SX16 EXPANDER su
SX18 |
|
JP2 su SX16-BASE |
PB6 (pin 38-J6) |
pin 1 |
<-> |
SDA (pin 1) |
PB7 (pin 37-J6) |
pin 2 |
--> |
SCL (pin 2) |
OG3 (pin 26-J6) |
pin 3 |
--> |
ICL (pin 3) |
IG1 (pin 24-J6) |
pin 4 |
<-- |
IDA (pin 4) |
OG5 (pin 22-J6) |
pin 5 |
--> |
IPL (pin 5) |
OG1 (pin 23-J6) |
pin 6 |
--> |
OCL (pin 6) |
OG4 (pin 25-J6) |
pin 7 |
--> |
STR (pin 7) |
OG2 (pin 21-J6) |
pin 8 |
--> |
ODA (pin 8) |
VCC +5V |
pin 9 |
--- |
VCC +5V (pin 9) |
GND |
pin 10 |
--- |
GND (pin 10) |
Il sorgente per testare i vari stadi che compongono la SX16 è descritto
nell'articolo
Controllare la SX16-BASE dalla FOX board
L'expander serigrafato "LCD EXPANDER" presente sulla SX18 è stato
implementato per poter collegare in modo semplice e veloce alla FOX
un display LCD con interfaccia Hitachi HD44780.
Sul connettore a 10 poli JP11, oltre all'alimentazione per il display,
è collegato anche un trimmer (R12) indispensabile per gestirne il contrasto.
I pin della FOX connessi all'expander LCD sono descritti nella tabella che
segue:
FOX |
ESPANDER LCD su SX18 |
LCD |
IOG8 (pin 14-J6) |
pin 1 |
D0 |
IOG9 (pin 13-J6) |
pin 2 |
D1 |
IOG10 (pin 16-J6) |
pin 3 |
D2 |
IOG11 (pin 15-J6) |
pin 4 |
D3 |
IOG12 (pin 18-J6) |
pin 5 |
RS |
IOG13 (pin 17-J6) |
pin 6 |
EN |
IOG14 (pin 20-J6) |
pin 7 |
BL |
Trimmer R12 |
pin 8 |
|
VCC +5V |
pin 9 |
VCC |
GND |
pin 10 |
GND |
Esempi per controllare un display LCD sono disponibili al link:
http://www.acmesystems.it/?id=8021.
I tre expander su connettori a 10 poli (5+5) alloggiati sulla SX18
identificati da JP8, JP9 e JP10, sono a disposizione dell'utente e sono
collegati ai Pin della FOX secondo lo schema delle tre tabelle che seguono:
EXPANDER JP8
FOX |
EXPANDER JP8 su SX18 |
IOG8 (pin 14-J6) |
pin 1 |
IOG9 (pin 13-J6) |
pin 2 |
IOG10 (pin 16-J6) |
pin 3 |
IOG11 (pin 15-J6) |
pin 4 |
IOG12 (pin 18-J6) |
pin 5 |
IOG13 (pin 17-J6) |
pin 6 |
IOG14 (pin 20-J6) |
pin 7 |
IOG15 (pin 19-J6) |
pin 8 |
VCC +5V |
pin 9 |
GND |
pin 10 |
EXPANDER JP9
FOX |
EXPANDER JP9 su SX18 |
IOG16 (pin 9-J7) |
pin 1 |
IOG17 (pin 10-J7) |
pin 2 |
IOG18 (pin 7-J7) |
pin 3 |
IOG19 (pin 8-J7) |
pin 4 |
IOG20 (pin 5-J7) |
pin 5 |
IOG21 (pin 6-J7) |
pin 6 |
IOG22 (pin 3-J7) |
pin 7 |
IOG23 (pin 4-J7) |
pin 8 |
VCC +5V |
pin 9 |
GND |
pin 10 |
EXPANDER JP10
FOX |
EXPANDER JP9 su SX18 |
TXD (pin 9-J6) |
pin 1 |
RXD (pin 10-J9) |
pin 2 |
IG2 (pin 29-J6) |
pin 3 |
IG3 (pin 28-J6) |
pin 4 |
IG4 (pin 27-J6) |
pin 5 |
IG5 (pin 30-J6) |
pin 6 |
IRQ (pin 30-J7) |
pin 7 |
NMI (pin 11-J6) |
pin 8 |
VCC +5V |
pin 9 |
GND |
pin 10 |
Di questa scheda è possibile scaricare:
Segnala questo articolo:
Parole chiave: - How-To - Linux - Schede Area SX -
|