Controllo hw via seriale

Usate questo forum per richieste di aiuto e consigli sull'hardware montato nelle vostre macchine con GNU/Linux Slackware.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Citare il tipo di hardware coinvolto in modo dettagliato.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT. Non usare termini gergali come procio, mobo e simili per identificare i componenti hardware.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
diego
Linux 2.x
Linux 2.x
Messaggi: 333
Iscritto il: ven 1 apr 2005, 0:00

Controllo hw via seriale

Messaggio da diego »

Ciao,
sono alle prese con un'interfaccia a rele' da pilotare via seriale.
Da m$ e' semplice in qualto basta redirigere l' echo di una striga
sulla com1 a 9600, 8N1, in Linux c'e' un sistema senza dover
scomodare gcc?
Ho provato un echo "stinga" > /dev/ttyS0 e con minicom,
ma niente.
Ringrazio chiunque possa darmi qualche suggerimento.

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

dovrebbero funzionare, io uso minicom correntemente. hai provato da root?

Avatar utente
touchstyle
Linux 4.x
Linux 4.x
Messaggi: 1085
Iscritto il: gio 13 mag 2004, 0:00
Slackware: 12.1
Kernel: 2.6.27
Desktop: KDE
Località: Portogruaro [VE]
Contatta:

Messaggio da touchstyle »

Ho trovato in rete :

http://www.linuxfocus.org/Italiano/July ... e239.shtml
http://www.ontrak.net/linux.htm
http://howtos.linux.com/howtos/IO-Port- ... ming.shtml

Mi ricordo di aver trovato un how-to su come pilotare un relè, cerco sui backup perchè google non ne vuole sapere...

Mi raccomando, bufferizza! :o

Ciao,
Touch.

Avatar utente
touchstyle
Linux 4.x
Linux 4.x
Messaggi: 1085
Iscritto il: gio 13 mag 2004, 0:00
Slackware: 12.1
Kernel: 2.6.27
Desktop: KDE
Località: Portogruaro [VE]
Contatta:

Messaggio da touchstyle »

TROVATO!

Fa morire dal ridere... : http://www.sandlab.org/linux/howto/inde ... ini/Coffee

:D :) :wink: :) 8O :D :o

Ciao,
Touch.

Avatar utente
diego
Linux 2.x
Linux 2.x
Messaggi: 333
Iscritto il: ven 1 apr 2005, 0:00

Messaggio da diego »

Grazie a tutti per i link (figo quello del caffe')
ho deciso per scomodare il Perl con uno script
che si appoggia al modulo Device::SerialPort.

Ciao

Avatar utente
touchstyle
Linux 4.x
Linux 4.x
Messaggi: 1085
Iscritto il: gio 13 mag 2004, 0:00
Slackware: 12.1
Kernel: 2.6.27
Desktop: KDE
Località: Portogruaro [VE]
Contatta:

Messaggio da touchstyle »

Bene!
Tienici informati. La doc sull'uso delle periferiche con Linux scarseggia...!

Ciao e grazie!

Avatar utente
diego
Linux 2.x
Linux 2.x
Messaggi: 333
Iscritto il: ven 1 apr 2005, 0:00

Messaggio da diego »

Ho avuto qualche problemino col perl, quindi sono passato a c.
Questo e' il sorgente che ho utilizzato:

----------------------------------------------------
#include <termios.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <ctype.h>
#include <sys/signal.h>
#include <sys/types.h>

#define BAUDRATE B9600
#define MODEMDEVICE "/dev/ttyS0"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1


main()
{
int fd, c, res;
struct termios oldtio,newtio;
char buf[255];

/* Apro /edv/ttyS0 in modalita' non-blocking
(la read ritorna immediatamente) */
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd <0) {perror(MODEMDEVICE); exit(-1); }

tcgetattr(fd,&oldtio); /* Salvo il settaggio corrente */

/* e ne faccio una stampa */
printf("Control Mode (cflag) = %x\n", oldtio.c_cflag);
printf("Input Mode (iflag) = %x\n", oldtio.c_iflag);
printf("Output Mode (oflag) = %x\n", oldtio.c_oflag);
printf("Local Mode (lflag) = %x\n", oldtio.c_lflag);


/* nuove impostazioni: 9600 8N1 */
newtio.c_cflag = BAUDRATE | CS8;
newtio.c_iflag = 0;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);

/* Questo riguarda la scheda con cui mi interfacciavo:
la sequenza era composta da 2 "*" seguiti da un byte
per il pilotaggio dei rele e chiudevo con un "#"
*/

// reset
write(fd,"**",2);
write(fd,"",1);
write(fd,"#",1);

sleep(1);

// si attivano alcuni rele
write(fd,"**",2);
write(fd,"a",1);
write(fd,"#",1);

/* ripristino vecchi settaggi */
tcsetattr(fd,TCSANOW,&oldtio);
}

---------------------------------------------

Questo programma funziona, ma su un pc con
non riuscivo a farlo funzionare, dopo la stampa
dei settaggi mi andava in timeout nell'impostazione
dei nuovi parametri: i permessi su ttyS0 erano gli stessi
boh.
Spero possa essere utile a qualcuno per iniziare,
consiglio pure una approfondita lettura del
"man termios" e dell' "howto prgramming-serial"

Ciao

Rispondi