Date de création: 21.07.2001
Rubrique du:
Auteur(s): hpbaby
Navigation: precedent principal suivant
Version:     FR

Voir en: 1024*768

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 :

picsys-schematic.jpg (121103 bytes)


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.

picsys_ports.jpg (22433 bytes) picsys_outside.jpg (33346 bytes)


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.

picsys_network.jpg (14518 bytes)

picsys_jtag.jpg (11407 bytes)

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 .

picsys_inside_compo.jpg (39766 bytes) picsys_inside_tracks.jpg (43380 bytes)

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:

picsys-implantation.png (28030 bytes) picsys-typon.png (25241 bytes)

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.

picsys_on2.jpg (22751 bytes) 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!

Lab48 :

Oscilloscope pour HP et
générateur de signaux +5/-5V
 
ou centrale domotique de
8 Entrées/ Sorties Numériques
Hpmodem :
Dialoguer par voie hertzienne entre
2 HP - nécessite des alimentations externes
.
Hptalk:
Faire épeller des lettres de l'alphabet à l'aide d'un synthétiseur vocal type ISD
 

HpDomotic :
1)Construire son programmateur PIC (picdev)
2)Construire son interface domotique  (picsys)
3)Le module Infrarouge multiusage