DISSENY D'UNA PLACA DE CIRCUIT IMPRÈS CONTROLADA PER ORDINADOR FENT ÚS D'EINES LLIURES I EN CATALÀ

20071111 – www.binefa.net




1. INTRODUCCIÓ

L'objectiu d'aquest document és desenvolupar una placa de circuit imprès per poder visualitzar 8 bits mitjançant el port paral·lel destinat primigèniament a connectar impressores. Aquest és un port en procés d'obsolescència degut a l'ús massiu del port USB. Malgrat això, el farem servir degut a la senzillesa de l'electrònica que cal per a tenir resultats tangibles. També s'explicarà com desenvolupar un programa senzill mitjançant el terminal d'ordres i un altre d'interfície gràfica.

El que és nou és que puguem fer tot aquest procés en la nostra llengua, de manera lliure i de franc. Això ha estat possible per la feina feta per un munt de gent durant molts anys. El meu granet de sorra ha estat l'aportació de la catalanització del programa de disseny electrònic anomenat Kicad.


2. EINES EMPRADES

2.1 SISTEMA OPERATIU

Per desenvolupar aquest disseny s'ha fet ús d'una distribució de Linux basada en Debian (www.debian.org) anomenada Ubuntu (www.ubuntu.com i www.ubuntu.cat). La versió emprada ha estat la 7.10, també anomenada Gutsy Gibbon. Tot l'explicat en aquest document també funciona per la versió 7.04 o Feisty Fawn. En d'altres distribucions de Linux el Kicad no ve en els repositoris per defecte, però es pot instal·lar sense masses problemes. Es poden trobar imatges dels discs compactes auto arrencables (Live CD) a la pàgina de l'Associació d’Usuaris i Usuàries de GNU/Linux en Llengua Catalana ( http://www.caliu.cat/ i ftp://ftp.caliu.cat/pub/distribucions/ubuntu-cat/ ).


Logotip de Debian

Logotip d'Ubuntu

Logotip de GNOME


Hi ha diferents escriptoris, els més populars són el KDE, el GNOME i el XFCE. Ubuntu té les següents variants en funció de l'escriptori : Kubuntu, Ubuntu i Xubuntu. En aquest exemple farem servir l'escriptori GNOME.

2.2 DISSENY DE MAQUINARI

El kicad (http://www.lis.inpg.fr/realise_au_lis/kicad/ i http://kicad.sourceforge.net/) és una de les eines gratuïtes de disseny electrònic més completes que conec. Té esquemàtic (EsSchema), editor de circuits impresos (Pcbnew) amb visualitzador tridimensional (fent servir models de components desenvolupats amb l'eina de modelar malles tridimensional wing3d - http://www.wings3d.com/ -), associació de components a mòduls (Cvpcb) i visualitzador d'arxius tipus Gerber (GerbView).

Hi ha molta documentació i exemples a ftp://iut-tice.ujf-grenoble.fr/cao/ . Per exemple un tutorial introductori, en anglès, molt interessant a ftp://iut-tice.ujf-grenoble.fr/cao/kicad/tutorial/Kicad_Tutorial_en.odt. A més, hi ha pàgines amb més elements dissenyats en 2D i 3D. Per exemple la pàgina, en portuguès, del brasiler Renie S. Marquet (http://www.reniemarquet.cjb.net/kicad.htm).

En cas de voler fer models de components tridimensionals personalitzats pel kicad amb wings3d hi ha manuals d'ús a http://www.wings3d.com/tutorials.php i a la pàgina de Renie S. Marquet.

Logotip del Kicad

Logotip del wings3d



Tant el kicad com el wings3d es poden baixar amb l'eina d'instal·lació de programes que ve per defecte amb l'Ubuntu (per a que surtin a la llista s'ha de seleccionar l'opció “Totes les aplicacions disponibles”). Kicad està als repositoris d'Ubuntu des de la versió 7.04 o Feisty Fawn.

En el moment de fer aquest document encara no s'ha alliberat la versió de Kicad que incorpora el català com a llengua seleccionable. Una manera fàcil de catalanitzar el Kicad és afegir una carpeta ca/ a /usr/share/kicad/internat/. I a /usr/share/kicad/internat/ca/ copiar els arxius kicad.mo i kicad.po que es poden baixar, comprimits, de www.binefa.net/electronica/kicad/en.zip i donar-lis permisos de lectura i escriptura, fent que tinguin drets d'usuari primari (root). Al seleccionar idioma per defecte ja surt en català. En cas de no funcionar, una altra manera és copiar la carpeta /usr/share/kicad/internat/ca/ a /usr/share/kicad/internat/en/ i al seleccionar l'idioma anglès sortirà en català (quedant la versió anglesa com la llengua per defecte).


2.3 DISSENY DE PROGRAMARI

El compilador que fem servir és el gcc (http://gcc.gnu.org/). En cas de que no estigui instal·lat, mitjançant el terminal d'ordres fem un “sudo aptitude install build-essential”.

Es poden escollir diferents editors de codi amb la interfície en català. Un dels possibles és el Geany (http://geany.uvena.de/), fàcilment instal·lable des de l'eina d'instal·lació d'Ubuntu.

Logotip del GCC

Logotip de les GTKs

Logotip del Geany



Per dissenyar interfícies gràfiques hem escollit el conjunt d'eines lliures GTK (http://www.gtk.org/). Per poder compilar amb les GTK :

En C : “sudo aptitude install libgtk2.0-dev libglade2-dev”. Més informació a : http://developer.gnome.org/doc/API/2.0/gtk/index.html i a http://library.gnome.org/devel/libglade/

En C++ : “sudo aptitude install libgtkmm-2.4-dev libglademm-2.4-dev”. Més informació a : http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/index.html

En Python : “sudo aptitude install python python-gtk2”. Més informació a : http://www.pygtk.org/

En Java : “sudo aptitude install libglib-java libgtk-java libglade-java”. Més informació a : http://java-gnome.sourceforge.net/

En C# : “sudo aptitude install mono-mcs libgtk2.0-cil libglade2.0-cil”. Més informació a : http://www.mono-project.com/GtkSharp

En Ruby : “sudo aptitude install ruby-gnome2”. Més informació a : http://ruby-gnome2.sourceforge.jp

En Haskell : “sudo aptitude install gtk2hs”. Més informació a : http://haskell.org/gtk2hs/overview

Per dissenyar la interfície gràfica d'usuari fem servir el Glade-3 (http://glade.gnome.org/), fàcilment instal·lable des de l'eina d'instal·lació d'Ubuntu. Amb l'Ubuntu també es pot instal·lar el Glade-2 (que tot i estar obsolet genera codi de programació automàticament). La diferència de versió és fa visible a la icona :


Logotip del Glade-2

Logotip del Glade-3


A més, cal instal·lar els següents paquets de la interfície d'usuari del gnome :

sudo aptitude install libgnomeui-common libgnomeui-0 libgnomeui-dev”


A la distribució Feisty Fawn (Ubuntu 7.04) ve instal·lada la versió 3.2.0 de Glade i està catalanitzat per defecte el programa. L'arxiu que conté la versió catalana del Glade és :


/usr/share/locale/ca/LC_MESSAGES/glade3.mo


A la distribució Gutsy Gibbon (Ubuntu 7.10) ve instal·lada la versió 3.4.0 de Glade. En el moment de fer aquest document encara no està catalanitzat. És a dir, no hi és l'arxiu glade3.mo a la carpeta /usr/share/locale/ca/LC_MESSAGES/ . He copiat l'arxiu glade3.mo present a la Feisty Fawn i l'he copiat a la carpeta /usr/share/locale/ca/LC_MESSAGES/ del Gutsy Gibbon. Una manera ràpida d'aconseguir aquest arxiu és arrencar un LiveCD de la Feisty Fawn (per exemple aquest : ftp://ftp.caliu.cat/pub/distribucions/ubuntu-cat/ubuntu-7.04-desktop-i386_ca.iso), fer una instal·lació del Glade 3 i aconseguir l'arxiu glade3.mo. Copiant-ho a la mateixa carpeta ja tindrem catalanitzat el Glade-3 (excepte les poques noves cadenes). És molt possible que en el moment de llegir aquest document puguin obviar aquesta part.



2.4 DISSENY DE LA PÀGINA WEB I ALTRES EINES AUXILIARS

Logotip del NVU

Logotip del Quanta Plus

Logotip del GIMP

Logotip de l'Inkscape

Logotip del file-roller

Logotip de l'OpenOffice

Logotip del Nautilus



NVU i Quanta Plus

Malgrat que els programes de creació de pàgines web més populars són el Bluefish i Screem per l'escriptori GNOME i el Quanta Plus pel KDE (els dos primers encara no estan traduïts al català i el Quanta Plus s'ha traduït, per primer cop, en la versió Gutsy Gibbon), el primer programa d'aquestes característiques traduït al català era l'NVU. L'NVU estava als repositoris de l'Ubuntu 6.06 o Dapper Drake, però a partir de l'Ubuntu 6.10 o Edgy Eft va desaparèixer. NVU no ha tingut mai molt bona premsa, però fins fa quatre dies era l'única eina de creació de pàgines web disponible en català. Degut a no estar present als repositoris s'ha de descarregar des de : http://www.softcatala.org/wiki/Nvu

Per a poder disposar d'una aplicació d'escriptori KDE (com ara el Quanta Plus) en català funcionant en un escriptori GNOME cal tenir carregats els paquets de llengua del KDE :

sudo aptitude install language-pack-kde-ca language-pack-kde-ca-base ”

Per saber més de Quanta Plus : http://quanta.kdewebdev.org/


GIMP

Programa de manipulació d'imatges GNU (Gnu No és Unix). És el programa més important desenvolupat amb les GTK (Gimp Tool Kit)

http://quanta.kdewebdev.org/


Inkscape

Programa de dibuix vectorial

http://www.inkscape.org/


Gestor d'arxius file-roller

Programa de gestió d'arxius comprimits

http://fileroller.sourceforge.net/


OpenOffice

Conjunt de programes d'oficina. Són uns programes molt populars i, a més, el processador de texts és molt útil com a corrector.

http://ca.openoffice.org/


Gestor d'arxius Nautilus

És el gestor d'arxius (explorador) per defecte del GNOME

http://www.gnome.org/projects/nautilus/


2.5 EINES DE LLENGUA

http://www.softcatala.cat/projectes/eines/recull/recull.htm

http://www.softcatala.cat/projectes/eines/guiaestil/guiaestil.htm

http://dlc.iec.cat/

http://www.termcat.cat/


3. MAQUINARI

El byte (http://ca.wikipedia.org/wiki/Byte) de sortida del port paral·lel DB-25 ((http://www.beyondlogic.org/spp/parallel.htm i http://en.wikipedia.org/wiki/DB25)) està físicament entre les potes 2 (bit -http://ca.wikipedia.org/wiki/Bit- de menys pes) i 9 (bit de més pes), la massa entre la 18 i la 25. Taula de connexió del port paral·lel :


Pin (DB-25)

Pin (Centronics)

Senyal SPP

Sentit

entrada / sortida

Registre

Lògica invertida

1

1

nStrobe

entrada / sortida

Control

2

2

bit 0 de dades

sortida

Dades


3

3

bit 1 de dades

sortida

Dades


4

4

bit 2 de dades

sortida

Dades


5

5

bit 3 de dades

sortida

Dades


6

6

bit 4 de dades

sortida

Dades


7

7

bit 5 de dades

sortida

Dades


8

8

bit 6 de dades

sortida

Dades


9

9

bit 7 de dades

sortida

Dades


10

10

nAck

In

Estat


11

11

Busy

In

Estat

12

12

Paper-Out / Paper-End

In

Estat


13

13

Select

In

Estat


14

14

nAuto-Linefeed

entrada / sortida

Control

15

32

nError / nFault

In

Estat


16

31

nInitialize

entrada / sortida

Control


17

36

nSelect-Printer / nSelect-In

entrada / sortida

Control

18 - 25

19-30

Massa

Comú



Taula dels contactes del port de la impressora


L'esquema electrònic consta d'un connector mascle DB-25, resistències (http://ca.wikipedia.org/wiki/Resistor) de 330 ohms connectades a cada bit i al seu temps al led (http://ca.wikipedia.org/wiki/Led) indicador d'estat (estat alt : il·luminat, estat baix : apagat).


L'esquema, el disseny de la placa de circuit imprès (http://en.wikipedia.org/wiki/Printed_circuit_board), el model tridimensional, la col·locació de components i el positiu per revelar la placa s'han desenvolupat amb el kicad. Podeu descarregar-vos el fitxer comprimit amb tots els arxius necessaris : parPort01kicad.zip


Esquema electrònic :

    Un tutorial d'ús del KiCad : http://www.binefa.net/electronica/tutorial02

esquema electronic


Disseny de la placa de circuit imprès :

Model tridimensional :

Col·locació de components :

Positiu per revelar la placa :

Guia per fer la placa de circuit imprès i muntar-la :

http://www.binefa.net/electronica/tutorial03

http://www.ladyada.net/library/pcb/inhouseetch.html

http://www.computronics.com.au/kinsten/

http://www.electricstuff.co.uk/pcbs.html







Alternativament es pot realitzar un prototipus amb placa de forats :


4. PROGRAMARI



Per accedir a qualsevol port hem de donar permisos d'accés. Aquest permisos d'accés s'han de fer com a usuari primari (root).

Els permisos d'entrada i sortida els gestiona la crida a la funció ioperm (http://linux.about.com/library/cmd/blcmdl2_ioperm.htm).


Codi de petició de permís d'accés

Codi per acabar els permisos d'accés



if(ioperm(DATA,3,1)) {

perror("Donant permisos");

exit(1);

}

if(ioperm(DATA,3,0)) {

perror("Treient permisos");

exit(1);

}


Per accedir al port paral·lel cal tenir permisos d'accés específics :

system("chmod 666 /dev/parport0");

Aquesta comanda es pot executar fora del programa i n'hi ha prou en fer la crida un sol cop.

El port de dades del port paral·lel de la majoria de màquines i386 (http://ca.wikipedia.org/wiki/I386) i x86_64 (http://ca.wikipedia.org/wiki/AMD64) és el 0x378 :

#define PORTADDRESS 0x378

#define DATA PORTADDRESS+0

#define STATUS PORTADDRESS+1

#define CONTROL PORTADDRESS+2

Programació per terminal de línia d'ordres

Es defineix la macro BYTE com a tipus char sense signe :

#define BYTE unsigned char

Per trametre qualsevol byte al port de dades :

outb(mask,DATA);

Essent mask qualsevol número de tipus byte (entre 0x00 i 0xFF) i DATA l'adreça del port físic (macro definida als #define)

Un programa d'exemple és ( es pot baixar aquí : lptlinux01.c ) :

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/io.h>

#define PORTADDRESS 0x378

#define DATA PORTADDRESS+0

#define STATUS PORTADDRESS+1

#define CONTROL PORTADDRESS+2

#define BYTE unsigned char

int main(int argc, char *argv[]){

BYTE mask = 0x01;

if(ioperm(DATA,3,1)) {

perror("Donant permisos");

exit(1);

}

system("chmod 666 /dev/parport0");

while(mask){

printf("mask = 0x%X\n",mask);

outb(mask,DATA);

getchar();

mask <<= 1;

}

printf("\noutb(DATA,0xFF)");

outb(0xFF,DATA);

getchar();

printf("\noutb(DATA,0x00)");

outb(0x00,DATA);

if(ioperm(DATA,3,0)) {

perror("Treient permisos");

exit(1);

}

return 0;

}

Per compilar, escriure al terminal :

gcc lptlinux01.c -o lptlinux01

Per a executar-ho, cal fer-ho com a usuari primari :

sudo ./lptlinux01

Programació visual

L'objectiu és crear una aplicació amb aquest aspecte :




Ús del glade versió 3

A l'escriptori de l'Ubuntu, aneu a Aplicacions>Programació>Disseny d'interfícies Glade




Hi apareixerà una finestra com aquesta :




Seleccioneu la icona Finestra :




Poseu un títol a la finestra. Premeu el botó de tres punts al costat de la caixa d'edició de “Títol de finestra :” (senyalat amb la fletxa verda). Apareix una finestra d'edició de text i a “Text : ” escriviu el títol desitjat :




Anomeneu i deseu el projecte (Fitxer > Anomena i desa). Per exemple parPort01.glade a una carpeta anomenada parPort01.

Seleccioneu a Contenidors la icona de la caixa vertical :




Seleccioneu 2 elements :




Seleccioneu a Contenidors la icona de la caixa horitzontal i després premeu la part superior del disseny de la finestra :




Seleccioneu 8 elements :




Torneu a seleccionar a Contenidors la icona de la caixa horitzontal i després premeu la part inferior del disseny de la finestra :




Seleccioneu 2 elements :




A Control i visualització premeu la icona del Botó de commutació :




Premeu la primera cel·la de la fila superior de la finestra a dissenyar :




A propietats canvieu el nom i l'etiqueta. L'anomeneu togglebutton_b7 i a l'etiqueta hi escriviu b7 :




A Control i visualització torneu a prémer la icona del Botó de commutació :




Premeu la segona cel·la de la fila superior de la finestra a dissenyar. A propietats l'anomeneu togglebutton_b6 i l'etiqueta b6.

Repetiu aquest procés 6 cops més fins arribar a togglebutton_b0 i etiqueta b0.

A Control i visualització premeu Botó de comprovació. Després premeu la primera cel·la de la fila inferior de la finestra a dissenyar :




Canviar l'etiqueta per Canvia directament :




A Control i visualització premeu Botó. Després premeu la segona cel·la de la fila inferior de la finestra a dissenyar :




A propietats seleccioneu a Edita el tipus l'opció : Predeterminat. I a botó predeterminat seleccioneu : Aplica.




Seleccioneu el giny vbox1 de l'arbre de ginys i li canvieu les propietats : Espaiat posant-hi un 4 i Homogeni commutant-ho a Sí :




Seleccioneu el giny hbox2 de l'arbre de ginys i li canvieu les propietats : Espaiat posant-hi un 4 i Homogeni commutant-ho a Sí :




Aneu al giny principal, window1, i a la finestra de propietats seleccioneu la pestanya Senyals. Desplegueu GtkObject i desplegueu el Gestor del senyal destroy seleccionant la funció gtk_main_quit.




Això permetrà sortir de l'aplicació quan es prem l'X per tancar la finestra.

Aneu al giny togglebutton_b7, i a la finestra de propietats seleccioneu la pestanya Senyals. Desplegueu GtkToggleButton i desplegueu el Gestor del senyal toggled seleccionant la funció on_togglebutton_b7_toggled.




Això permetrà controlar cada esdeveniment generat per prémer el Botó de commutació.

Repetiu l'operació prèvia des de togglebutton_b6 fins togglebutton_b0 relacionant la senyal toggled de cadascun amb les funcions on_togglebutton_b6_toggled fins on_togglebutton_b0_toggled.

Aneu al giny checkbutton1, i a la finestra de propietats seleccioneu la pestanya Senyals. Desplegueu GtkToggleButton i desplegueu el Gestor del senyal toggled seleccionant la funció on_checkbutton1_toggled.




Aneu al giny button1, i a la finestra de propietats seleccioneu la pestanya Senyals. Desplegueu GtkButton i desplegueu el Gestor del senyal clicked seleccionant la funció on_button1_clicked.




Premeu Desa. Si heu seguit tots els passos us sortirà un arxiu com parPort01.glade . Està comprimit a :

http://www.binefa.net/electronica/tutorial01/parPort01.glade.zip



Programació en C emprant l'arxiu generat pel Glade-3

Obriu el Geany (Aplicacions > Programació > Geany). Premeu la icona Nou per a crear un nou fitxer i l'anomeneu (Fitxer > Anomena i desa) parPort01.c desant-ho a la mateixa carpeta a on heu desat parPort01.glade

Afegim els arxius de capçalera propis de les GTKs i de l'ús del Glade :

#include <gtk/gtk.h>

#include <glade/glade.h>

Es defineixen com variables globals (a sota dels includes) :

static GtkWidget *finestraPrincipal;

static gboolean gbSel;

static guchar gucByte;

Afegiu la funció vIniciaVariables() :

void vIniciaVariables(){

gbSel = FALSE;

gucByte = 0x00;

}

I aquest main():

int main(int argc, char *argv[]){

GladeXML *arbreDeGinys;

gtk_init(&argc,&argv);

vIniciaVariables();

arbreDeGinys = glade_xml_new("parPort01.glade",NULL,NULL);

finestraPrincipal = glade_xml_get_widget(arbreDeGinys,"window1");

glade_xml_signal_autoconnect(arbreDeGinys);

gtk_widget_show_all(finestraPrincipal);

gtk_main();

return 0;

}

Deseu l'arxiu (també el podeu descarregar : parPort01.c per no tenir problemes amb els accents podeu anar al terminal i escriure : “wget http://www.binefa.net/electronica/tutorial01/parPort01.c”) i compileu-lo al terminal amb tots els paràmetres :

gcc -o parPort01 parPort01.c `pkg-config --cflags --libs libglade-2.0 gtk+-2.0` -rdynamic

Executeu-lo :

./parPort01

Sortirà pel terminal diversos missatges d'avís de l'estil “libglade-WARNING **: could not find signal handler” degut a que encara no hem associat funcions als gestors de senyal de l'arxiu parPort01.glade . L'aplicació visual dissenyada amb el Glade s'estarà executant. Premeu X per finalitzar l'aplicació (que encara no fa res).





Reanomeneu parPort01.c com parPort02.c . Deixarem parPort01.c tal qual i seguirem treballant amb parPort02.c

Afegiu La funció per trametre bytes l'anomenem vTramet(). De moment comentarem la línia d'accés al port paral·lel :

void vTramet(gboolean gbDirecte){

if(gbDirecte){

/* outb(gucByte,DATA); */

g_print("Escric directament : 0x%X\n",gucByte);

}else

g_print("No escric directament : 0x%X\n",gucByte);

}

Afegiu la funció on_button1_clicked() que serà cridada quan premem el giny button1 (botó Aplica) :

void on_button1_clicked(GtkWidget *widget){

vTramet(TRUE);

}

Afegiu la funció on_checkbutton1_toggled() que serà cridada quan premem el giny checkbutton1 (botó de comprovació Canvia directament) :

void on_checkbutton1_toggled(GtkWidget *widget){

if(gtk_toggle_button_get_active((GtkToggleButton *)widget))

gbSel = TRUE;

else

gbSel = FALSE;

}



Afegiu la funció on_togglebutton_b0_toggled() que serà cridada quan premem el giny togglebutton_b0 (botó de commutació b0) :

void on_togglebutton_b0_toggled(GtkWidget *widget){

if(gtk_toggle_button_get_active((GtkToggleButton *)widget))

gucByte |= 0x01;

else

gucByte &= 0xFE;

vTramet(gbSel);

}



Afegiu la funció on_togglebutton_b1_toggled() que serà cridada quan premem el giny togglebutton_b1 (botó de commutació b1) :

void on_togglebutton_b1_toggled(GtkWidget *widget){

if(gtk_toggle_button_get_active((GtkToggleButton *)widget))

gucByte |= 0x02;

else

gucByte &= 0xFD;

vTramet(gbSel);

}



Afegiu la funció on_togglebutton_b2_toggled() que serà cridada quan premem el giny togglebutton_b2 (botó de commutació b2) :

void on_togglebutton_b2_toggled(GtkWidget *widget){

if(gtk_toggle_button_get_active((GtkToggleButton *)widget))

gucByte |= 0x04;

else

gucByte &= 0xFB;

vTramet(gbSel);

}



Afegiu la funció on_togglebutton_b3_toggled() que serà cridada quan premem el giny togglebutton_b3 (botó de commutació b3) :

void on_togglebutton_b3_toggled(GtkWidget *widget){

if(gtk_toggle_button_get_active((GtkToggleButton *)widget))

gucByte |= 0x08;

else

gucByte &= 0xF7;

vTramet(gbSel);

}



Afegiu la funció on_togglebutton_b4_toggled() que serà cridada quan premem el giny togglebutton_b4 (botó de commutació b4) :

void on_togglebutton_b4_toggled(GtkWidget *widget){

if(gtk_toggle_button_get_active((GtkToggleButton *)widget))

gucByte |= 0x10;

else

gucByte &= 0xEF;

vTramet(gbSel);

}



Afegiu la funció on_togglebutton_b5_toggled() que serà cridada quan premem el giny togglebutton_b5 (botó de commutació b5) :

void on_togglebutton_b5_toggled(GtkWidget *widget){

if(gtk_toggle_button_get_active((GtkToggleButton *)widget))

gucByte |= 0x20;

else

gucByte &= 0xDF;

vTramet(gbSel);

}



Afegiu la funció on_togglebutton_b6_toggled() que serà cridada quan premem el giny togglebutton_b6 (botó de commutació b6) :

void on_togglebutton_b6_toggled(GtkWidget *widget){

if(gtk_toggle_button_get_active((GtkToggleButton *)widget))

gucByte |= 0x40;

else

gucByte &= 0xBF;

vTramet(gbSel);

}



Afegiu la funció on_togglebutton_b7_toggled() que serà cridada quan premem el giny togglebutton_b7 (botó de commutació b7) :

void on_togglebutton_b7_toggled(GtkWidget *widget){

if(gtk_toggle_button_get_active((GtkToggleButton *)widget))

gucByte |= 0x80;

else

gucByte &= 0x7F;

vTramet(gbSel);

}



Deseu l'arxiu (també el podeu descarregar : parPort02.c per no tenir problemes amb els accents podeu anar al terminal i escriure : “wget http://www.binefa.net/electronica/tutorial01/parPort02.c”) i compileu-lo al terminal amb tots els paràmetres :

gcc -o parPort02 parPort02.c `pkg-config --cflags --libs libglade-2.0 gtk+-2.0` -rdynamic

Executeu-lo :

./parPort02

L'aplicació visual dissenyada amb el Glade s'estarà executant. Proveu de fer diferents combinacions i observeu el que surt pel terminal. Premeu X per finalitzar l'aplicació.



Reanomeneu parPort02.c com parPort03.c . Deixar parPort02.c tal qual i seguir treballant amb parPort03.c

Afegiu les funcions per iniciar -vIniciaPermisos()- i finalitzar permisos -vFinalitzaPermisos()-.

void vIniciaPermisos(){

if(ioperm(DATA,3,1)) {

perror("Donant permisos (esteu segurs de que sou root?)");

exit(1);

}

/* Dono permisos d'ús al port paraƀlel */

system("chmod 666 /dev/parport0");

}



void vFinalitzaPermisos(){

if(ioperm(DATA,3,0)) {

perror("Treient permisos");

exit(1);

}

}

Al main() afegiu vIniciaPermisos(); després de la funció vIniciaVariables(); i vFinalitzaPermisos(); sota gtk_main_quit();. Quedant-hi :

int main(int argc, char *argv[]){

GladeXML *arbreDeGinys;

gtk_init(&argc,&argv);

vIniciaVariables();

vIniciaPermisos();

arbreDeGinys = glade_xml_new("parPort01.glade",NULL,NULL);



finestraPrincipal = glade_xml_get_widget(arbreDeGinys,"window1");

glade_xml_signal_autoconnect(arbreDeGinys);

gtk_widget_show_all(finestraPrincipal);

gtk_main();

vFinalitzaPermisos();

return 0;

}

Sota els actuals includes afegiu :

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/io.h>



#define PORTADDRESS 0x378

#define DATA PORTADDRESS+0

#define STATUS PORTADDRESS+1

#define CONTROL PORTADDRESS+2



Descomentareu la línia d'accés al port paral·lel de la funció vTramet() :

void vTramet(gboolean gbDirecte){

if(gbDirecte){

outb(gucByte,DATA);

g_print("Escric directament : 0x%X\n",gucByte);

}else

g_print("No escric directament : 0x%X\n",gucByte);

}

Deseu l'arxiu (també el podeu descarregar : parPort03.c per no tenir problemes amb els accents podeu anar al terminal i escriure : “wget http://www.binefa.net/electronica/tutorial01/parPort03.c”) i compileu-lo al terminal amb tots els paràmetres :

gcc -o parPort03 parPort03.c `pkg-config --cflags --libs libglade-2.0 gtk+-2.0` -rdynamic

Connecteu la placa de circuit imprès al port paral·lel i executeu-lo amb permisos d'usuari primari :

sudo ./parPort03

L'aplicació visual dissenyada amb el Glade s'estarà executant. Proveu de fer diferents combinacions i observeu els leds il·luminats solidaris amb el que surt pel terminal. Premeu X per finalitzar l'aplicació.



Us podeu baixar tots els codis font a parPort010203.zip.




5. AGRAÏMENTS

A l'Associació d’Usuaris i Usuàries de GNU/Linux en Llengua Catalana (http://caliu.cat) i la seva tasca de proselitisme amb el programari lliure en la nostra llengua. Especialment a en Rafael Carreras ( http://rcarreras.blogspot.com/ i http://wiki.caliu.cat/index.php/Rafael_Carreras) i en Miquel Chicano (http://miquel.caliu.cat/) pels anys dedicats a potenciar els sistemes operatius lliures, i llurs programes, en català.

A Orestes Mas (http://orestes.caliu.cat/) per personalitzar discs compactes auto arrencables amb el català com llengua per defecte.

A Softcatalà (http://www.softcatala.cat/) pel foment de l'ús del català a les noves tecnologies. I llur col·laboració amb termcat (www.termcat.cat) per la normalització dels nous mots.

Jean-Pierre Charras (http://geii2.free.fr/Profs/Charras.html) per llur tasca desenvolupant Kicad i per incorporar a les properes versions la llengua catalana.

A Ubuntu (www.ubuntu.com i www.ubuntu.cat) per desenvolupar un sistema operatiu lliure d'ús amigable i senzill.

A Debian (www.debian.org) per desenvolupar un sistema operatiu lliure i molt fiable.

A Mark Shuttleworth (http://ca.wikipedia.org/wiki/Mark_Shuttleworth i http://www.markshuttleworth.com/) per liderar el projecte Ubuntu.

A Linus Torvalds (http://ca.wikipedia.org/wiki/Linus_Torvalds i http://www.cs.helsinki.fi/u/torvalds/) per ser el que lidera el desenvolupament del nucli (www.kernel.org/) de Linux (http://www.linux.org/) i li va donar el nom genèric al sistema operatiu.

A Richard Stallman (http://ca.wikipedia.org/wiki/Richard_Stallman) pels esforços per llicenciar el programari perquè sigui sempre de lliure ús i modificació.

A Dennis Ritchie (http://ca.wikipedia.org/wiki/Dennis_Ritchie) i Brian Kernighan (http://en.wikipedia.org/wiki/Brian_Kernighan) per ser els pares del llenguatge de programació C i del sistema operatiu Unix.

A Daniel Collados (www.collados.org) pel seu mestratge en el món dels sistemes operatius i per la seva amistat.

A l'Escola Tècnica Professional del Clot (http://www.etpclot.fje.edu) pel seu mestratge i introducció en el món de l'electrònica i la informàtica quan era tot just un adolescent. I, actualment, pel privilegi de poder-hi ensenyar electrònica i programació a les futures generacions de tècnics superiors d'aquest país.

Als usuaris de programari i d'altres tecnologies en català.


5. ALTRES ENLLAÇOS INTERESSANTS

www.getautomatix.com : Script (arxiu de guió) que permet instal·lar paquets de programari extres. Per exemple, còdecs per a la correcta visualització de DVDs o scripts per a l'explorador d'arxius Nautilus que permeten passar a mode d'usuari primari (root) (i així poder executar en mode gràfic el programa d'interfície visual de control dels leds).

www.translendium.com : Pàgina que permet traduir petits texts i pàgines web de l'anglès al català i viceversa, entre d'altres llengües.

www.beyondlogic.org : Pàgina de l'australià Craig Peacock amb molta documentació sobre totes les tecnologies de connexió a l'ordinador.

www.epanorama.net : Pàgina amb molts circuits electrònics i de temàtiques ben diferents.

www.tuxgraphics.com/electronics : Pàgina de l'alemany Guido Socher amb un munt de muntatges electrònics interessants fent servir eines lliures.

www.binefa.net/electronica/tutorial02 : Un tutorial d'ús del KiCad

www.binefa.net/electronica/tutorial03 : Guia per fer plaques de circuit imprès