LA PRATIQUE POUSSEE |
Nous
avons abordé dans le chapitre précédent, le programmateur de pic , voyons maintenant le
système cible picsys.
J'ai pour but del'utiliser comme centrale domotique afin de relier la HP au PC par
infrarouge, de décoder les trames de télécommandes
pour commander le PC (comme le module IRman/UIR) et de faire l'inverse du PC vers
n'importe quel appareil domestique doté d'une télécommande infrarouge.
Plusieurs d'entre vous m'ont demandé s'il était possible d' échanger/récuperer sur pc,
les logos et sonneries des portables ou de leur PDA favori PSion, Palm
et Razor. .Et bien, je réponds que oui , avec ce module, tout est possible de la
simulation d'une souris, d'un clavier aux trucs les plus fous..comme un serveur
web (le plus petit au monde en plus)!!!!
I- Schéma électrique :
II - Aspect extérieur et intérieur :
En fait, j'ai constitué un mini système embarqué à base de pic 16F84 qui se
limite à un max232 et à de la connectique.
La facade avant de leds sert à voir ce qui ce passe car généralement dans tout système
embarqué, il faut ajouter un afficheur et le gérer.
Pour faire l'ensemble des tests, j'ai raccordé directement les 10 fils d'entrées/sorties
(network) sur le panneau de leds avec un connecteur HE14.
L'interface J-TAG est acessible par le coté droit quant à la
liaison série (COM1) et les ports d'entrées sortie (NETWORK) sont sur le coté gauche.
Ce que l'on voit sur la photo éclaté de l'ensemble, c'est le raccord du panneau de leds
à la carte par deux fils noir (la masse) et blanc (+5V). Ainsi, la led
rouge la plus à droite est allumée car j'avais alimenté le montage en mode autonome (le
programmateur n'est plus relié) par le coupleur de pile .
A la vue de ces deux clichés , c'est sans aucun doute une de mes
meilleures réalisations, pas un poil de place restant.
III- Plans et typon:
A- Carte principale:
Le condensateur marqué C au milieu est un
condensateur de découplage de 100nF.
Attenttion
, précision importante que j'ai oublié de signaler:
- Ce
typon a été initialement conçu pour être
relié au PC par un cable 3 fils droit DB9 femelle/DB9 femelle
(broche 2 du PC=broche 2 port P1 ; broche 3 PC=broche 3 port P1;broche
5PC=broche 5port P1) . J'utilise le freeware
terminator pour envoyer des caractères ou recevoir
à partir du PC.
- Si
vous souhaitez brancher votre HP 4x ou HP3x dessus avec le câble
HP , il faut intervertir les fils 2 et 3 du connecteur P1 soit
:
-par un câble croisé DB9 male / DB9 femelle (broche
2 du PC=broche 3 du port P1 ; broche 3 duPC=broche 2 du port P1;broche
5 du PC=broche 5 du port P1)
-en faisant la modif sur le typon même (ce que j'ai fait
et donc j'ai du transformer mon câble droit en câble
croisé pour le relier au PC ).
B- Panneau de leds
J'ai utilisé des leds transparentes (vertes allumées) montées
en zigzag sur 3 barettes tylipe. J'ai aussi mis deux réseaux de
résistance 1k* 8+1PC sur support tulippe, le point commun étant
relié à la masse. Je ne détaillerais pas le schéma qui consiste
à mettre 8 leds en série avec les 8 résistances du réseau de résistance.
Par contre, je me suis amusé à faire un chenillard à la K2000 ,
très bon moyen de tester les leds une à une et l'affectation des
ports d'entrée/sortie.
La chenille (au milieu) laisse apparement des traces derrière
elle...
Voici le programme optimisé car synchronisé sur le temporisateur timer0: Il faudra
255*256*8 microsecondes= 0.5secondes pour un aller (ou retour) de la chenille
programme K2000.c |
fichier include/mapping.h |
#include <pic.h>
#include <mapping.h>
__CONFIG(FOSC0|PWRTE|CP);
/*************************************
Version B: K2000 ajout Timer 0
**************************************/
#define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))
#define POLLING_PERIOD 255 //TMRO=255 microsecondes
#define TMR0_SETTING (0xFF-(POLLING_PERIOD-5)) //ajustement
#define TMR0_PRESCALER 0b111 //predivision par 256 de TMR0
#define ITMask 0B10000000
volatile union PORTIO PORT @ 0x05; //implante à l'adresse
0x05 la structure
volatile union DATABYTE Buff;
volatile unsigned char Up;
volatile unsigned char Timer;
void WriteParport(void);
void ReadParport(void);
main()
{
unsigned k;
// unsigned t;
TRISB = ITMask;
TRISA = 0;
PORTA = 0;
PORTB = 0;
Up=1;
Timer=0;
k=0;
//Timer
OPTION&=0B11000000; //turn 0ff bottom 6bits to configure tmr0
OPTION|=TMR0_PRESCALER;
T0IE=1;
GIE=1;
//Start Kit :-)
for(;;) {
if(Timer) { //quand la durée TMR0 est écoulée..
WriteParport(); //On met à jour
les 8 bits
//K2000 test
if(Up) { //Aller
k=k+1;
if(k==7) {
Up=0;
}
} else { //Retour
k=k-1;
if(k==0){
Up=1;
}
}
Buff.BYTE=1<<k;
Timer=0;
}
}
}
void WriteParport(void) {
PORT.BYTE.MSB=Buff.FIELD.MSB;
PORT.BYTE.LSB=Buff.FIELD.LSB;
}
void ReadParport(void) {
Buff.FIELD.MSB=PORT.BYTE.MSB;
Buff.FIELD.LSB=PORT.BYTE.LSB;
}
interrupt isr()
{
if(T0IF) {
TMR0=TMR0_SETTING;
T0IF=0;
Timer=1;
}
}
|
#ifndef MAPPING_H
#define MAPPING_H
typedef union DATABYTE {
unsigned char BYTE;
struct{
unsigned char LSB:4;
unsigned char MSB:4;
} FIELD;
struct{
unsigned char D1:1;
unsigned char D2:1;
unsigned char D3:1;
unsigned char D4:1;
unsigned char D5:1;
unsigned char D6:1;
unsigned char D7:1;
unsigned char D8:1;
} BIT;
} _DATABYTE;
typedef union PORTIO {
unsigned int WORD;
struct {
unsigned char D1:1; //Alias for RA0
unsigned char D2:1; //RA1
unsigned char D3:1; //RA2
unsigned char D4:1; //RA3
unsigned char RS_OUT:1; //RA4
unsigned char NC:3; //NC
unsigned char D5:1; //RB0
unsigned char D6:1; //RB1
unsigned char D7:1; //RB2
unsigned char D8:1; //RB3
unsigned char TC_IN:1; //RB4
unsigned char HP_IN:1; //RB5 or D9
unsigned char HP_OUT:1; //RB6 or D10
unsigned char RS_IN :1; //RB7
} BIT;
struct {
unsigned char LSB:4;
unsigned char NC2:4;
unsigned char MSB:4;
} FIELD;
struct {
unsigned char LSB;
unsigned char MSB;
} BYTE;
};
#endif
|
|
|
Attention, j'ai trouvé un problème
dans le compilateur PICLITE C compiler 7.85 , le transfert de champs
de bits supérieur à 7 bits entre deux structures typedef
union est mal gérée !!! Il y a des décalages
mémoire dans les champs de la structure à l'arrivée!!
Dans cet exemple j'ai eu de la chance , j'effectue que des transfert
de blocs de 4 bits donc cela marche. J'ai écrit au support
technique, ils m'ont répondu d'acheter la version intégrale
qui est non boguée...facile à dire!
|