PICOReseau 485 El ComboX.Fenard
PICOReseau 485 El Combo
La prolifération, en tout genre, nuit. C’est pour l’éviter que fut crée le circuit Combo.
Le module réseau PIC485 décrit dans l’IPC12 était adaptable avec les sources du programme, mais il ne disposait que des fonctions E/S tout ou rien. Pour l’el Combo, c’est le contraire, il contient un ensemble de fonctions intégrées, prêt à l’emploi.
L’esclave
La programmation en assembleur, et sa mise au point peut devenir rapidement long et laborieux. Même en basic sur un circuit distant, la recherche d’un bug peut devenir difficile. Pour simplifier, et arriver rapidement au résultat, le système s’articule autour du PC et du QBasic (Microsoft). Ultérieurement, le programme pourra être transporté vers un système " embarqué ". Les circuits El Combo sont des esclaves du programme Basic.
Les fonctionnalites
Compatibilité oblige, les circuits dialoguent en utilisant le protocole FXRS485AS (9600 bits/s) sur un bus RS485. Les fonctions disponibles peuvent être classées en plusieurs groupes. Les fonctions entrées tout ou rien, les fonctions horloges, les fonctions afficheur LCD, les fonctions télécommande, les fonctions détection boutons. Nous ne reviendront pas sur la fonction entrées tout ou rien, déjà décrite dans IPC12, et qui s’utilise en écrivant dans les mémoires du PIC aux adresses des ports A et B. Dorénavant il y aura des restrictions en fonctions des autres fonctions.
Utilisation des ports.
Le circuit El combo ou FX485ASComboHorloge est constitué d’un PIC type 16F84A/04Mhz programmé. Il doit fonctionner avec un quartz de 3,6864Mhz. Le tableau 1 donne l’affectation des ports. Le port A est utilisé comme un bus de 4 bits, il sert pour l’afficheur LCD et le retour des bouton poussoirs. Cette fonction enregistrant la fermeture peut servir dans un système d’alarme. Si la fonctions LCD et la fonction bouton ne sont pas utilisé, alors le PORTA peut être utilise en entrés sorties tout ou rien.
Il en est de même pour le PORTB, à l’exception de PB0 et PB1 réservé au réseau RS485.
Les ports PB2 et PB6 servent pour l’afficheur LCD. Si l’option récepteur horaire est sélectionnée, le port PB4 reçoit le signal DCF inversé. Le signal est normalement à 1, les impulsions de 100 ou 200ms doivent être au niveau zéro. La fourchette acceptée va de 70 a 140ms pour le zéro et de 140ms a 210ms pour le un. Hors de ces valeurs, le circuit considère qu’il s’agit d’une erreur. La sortie Télécommande s’effectue sur le port PB5. Le signal émis, suivant la configuration, sera compatible avec le signal des circuit MM53200 (ou UM3750), ou bien UM3758 ou bien Star chip. Enfin la ligne port PB3 sert au timer.
Rappelons que l’état des ports se défini dans l’EEPROM, sauf pour PB0 et PB1 qui est de toute façon géré par le programme RS485.
Affectation des ports tableau 1
PA0 |
Afficheur LCD D4 /retour Boutons Poussoir |
PA1 |
Afficheur LCD D5 /retour Boutons Poussoir |
PA2 |
Afficheur LCD D6 /retour Boutons Poussoir |
PA3 |
Afficheur LCD D7 /retour Boutons Poussoir |
PA4/RTCC |
Non utilisable |
PB0 |
RS485 sur TX/RX du transceiver RS485 |
PB1 |
RS485 sur TXE/RXE du transceiver RS485 |
PB2 |
Afficheur LCD RS |
PB3 |
Libre /sortie TimerX |
PB4 |
Libre/entrée DCF (inversée) |
PB5 |
Libre/sortie émetteur HF |
PB6 |
Afficheur LCD E |
PB7 |
Libre/ Retour Boutons Poussoir |
La réalisation.
La figure 1 présente le schéma électrique. Il reprend le tableau. On reconnaît rapidement les parties classiques, interface RS485, PIC 16F84. Rien au demeurant n’est très nouveau. Un petit haut parleur piezo sert de beeper, il utilise la ligne de commande HF. Le transistor T1 est prévu pour inverser la polarité d’un signal. Soit pour celui d’un récepteur horaire, soit pour amplifier le signal du beeper pour attaquer un petit haut parleur relié a une alimentation positive. Au niveau du circuit imprimé, le cuivre a exactement la taille du boîtier.
Aucune fixation n’est a prévoir. Il suffit de faire les trous pour passer les boutons sur une face, et la découpe pour passer la prise DB9. La face avant est faite a partir d’une feuille translucide autocollante. Le dessin est imprimé a l’envers, de cette manière la face est collée à l’intérieure du boîtier. Des pastilles cuivrées sont réservées pour la personnalisation. Sur le coté une bande permet de mettre son module HF, par défaut les lignes de masse le destine au module mitpot. Si l’on utilise pas l’afficheur, on peut aussi utiliser le cuivre décrit dans l’IPC numéro 12.
Les Fonctions horloges
Entrons maintenant dans la description des fonctions. L’accès a celles ci se font par des commandes réseaux. Pour ne pas être trop long, et fastidieux, signalons qu’un programme écrit en Qbasic est disponible et permet de comprendre le dialogue. Rien en vaut l’exemple. Au niveau des commandes, celle ci sont soit directes, soit on passe par des commandes de lecture/écriture en mémoire. C’est souvent le cas et cela permet de tester facilement la fonction en utilisant le programme moniteur RS485. Le tableau 2 donne la carte mémoire de la RAM. Pour l’heure, la notation des chiffres est en BCD, le nombre 24 s’écrit 24 en hexadécimal. Pour lire l’heure, il suffit de lire le contenu des adresses Seconde, Minute et Heure.
Pour la mise a l’heure, il suffit d’écrire. Rappelons que les circuits ont une adresse station " générale ", en écrivant à cette adresse on peut remettre à jours toutes les horloges d’un coup.
Comme les dizaines, dans une horloge, ne dépassent pas 5, il reste sur chaque chiffre BCD un bit de libre qui est utilisé pour des options. Avec les minutes et les heures on arrête ou bien on compte ou décompte le temps. Le dernier bit permet de passer en mode chronomètre autonome, dans cette configuration on peut utilise les boutons pour un départ a zéro, un arrêt.
La configuration à la mise sous tension est indiqué dans l’EEPROM voir le tableau 3.
Tableau 2 : carte mémoire RAM
Adresse RAM |
Nom |
Description |
0x14 |
ConfA |
Configuration de l’application |
0x17 |
Seconde |
Code en BCD B7=1 Chrono Autonome |
0x18 |
Minute |
Code en BCD,B7=1 Arrêt |
0x19 |
Heure |
Code en BCD, B7=0 Compte, B7=1 Décompte |
0x1A |
HFBtL |
Temps 0/1 pas 277uS max 15/15 |
0x1B |
HFCmd |
Commande Télécommande HF |
0x22 |
Bout1 |
Détection entrée 1 |
0x23 |
Bout2 |
Détection entrée 2 |
0x24 |
Bout3 |
Détection entrée 3 |
0x25 |
Bout4 |
Détection entrée 4 |
0x32 |
Date |
Code en BCD date 1...31 |
0x33 |
Jour |
Code en BCD jour lundi...samedi (B3..B0 uniquement) |
0x34 |
Mois |
Code en BCD mois 1..12 |
0x35 |
Année |
Code en BCD année 0..99 |
Tableau 3 : carte mémoire EEPROM
Adresse EEPROM |
Nom |
Description |
0x00 |
StationAdresse |
Adresse de la station |
0x01 |
StationType |
Type de module (non modifiable) |
0x02 |
NumeroSerieL |
Numéro de série/lot (bas) (non modifiable) |
0x03 |
NumeroSerieH |
Numéro de série/lot (haut) (non modifiable) |
0x04 |
VersionLogicielL |
Version logiciel (bas) (non modifiable) |
0x05 |
VersionLogicielH |
Version logiciel (haut) (non modifiable) |
0x06 |
Courant |
Courant en mA que peut fournir le module au réseau |
0x07 |
Configuration |
Configuration de l’application |
0x08…0x09 |
Réservé |
|
0x0A |
EportA |
Valeur du portA par défaut |
0x0B |
EportB |
Valeur du portB par défaut |
0x0C |
Réservé |
|
0x0D |
EDDRA |
Valeur du DDRA par défaut |
0x0E |
EDDRB |
Valeur du DDRB par défaut |
0x0F |
Réservé |
|
0x10 |
SecondeDp |
Code en BCD, Départ B7=1 Chrono Autonome |
0x11 |
MinuteDp |
Code en BCD,B7=1 Arrêt |
0x12 |
HeureDp |
Code en BCD, B7=0 Compte, B7=1 Décompte |
0x13 |
EEHFBtL |
Temps 0/1 pas 277uS max 15/15 (def :0x21) |
0x14,0x15 |
Rtel01 |
Télécommande Start ON |
0x16,0x17 |
Rtel02 |
Télécommande Start OFF |
0x18,0x19 |
RtelMM53 |
Télécommande MM53200/UM3750 |
0x1A,0x1B |
RtelMM53 |
Télécommande MM53200/UM3750 |
0x1C,0x1D, 0x1E |
RtelMM58 |
Télécommande UM3758 |
0x1F |
Libre |
|
0x20..0x2F |
Message1 |
Premier message de présentation (16 max) |
0x30..0x38F |
Message2 |
Second message de présentation (8 max) |
0x39..0x3F |
Message3 |
Troisième message de présentation (8 max) |
Fonction TIMER
En mode décompte de temps, en arrivant a zéro, le port TIMER est inversé. Ce dispositif permet l’arrêt ou la mise en marche après un temps défini. On peut, par exemple programmer le PC pour sa remise en marche apes un temps défini, avant de s’éteindre.
Horloge DCF
Dans cette configuration, le circuit est capable de décoder l’heure DCF77. Des lors que le chrono télégramme est correcte, l’ heure et date sont affichées.
L’afficheur LCD
Plusieurs types d’afficheurs peuvent être utilisés, par défaut, il utilise un afficheur d’une ligne de 16 caractères. Il affiche HH :MM.SS, puis la date :JJ/MM/Js. Le Js indique le jour de la semaine, Lu pour lundi. A chaque réception correcte du chrono télégramme la seconde lettre (le u ici) passe de minuscule a majuscule et inversement. L’affichage peut être inhiber, par exemple pour envoyer un message par le réseau. Pour envoyer du texte il faut utiliser des commandes réseaux. L’afficheur gère les codes retour a la ligne, saut de ligne, le code SYN effectue une RAZ du circuit. Pour pouvoir utiliser les fonctions spécifiques de l’afficheur, il est possible d’écrire une donnée ou une commande. Enfin, on peut envoyer deux caractères par paquets réseau. Le module passe les commandes, la seconde directement sans attendre, attention certaines commandes nécessites l’attente, dans ce cas il vaut faut passer deux paquets a un octet.
La fonction Telecommande
A courte distance, sur une pièce, la télécommande HF (ou IR) permet d’éviter de tirer des fils, c’est une solution souple. On trouve dans le commerce des télécommandes utilisant des prises gigognes secteur ( Start). Avec cette solution on ne peut pas avoir de retour pour savoir si l’action a été enregistrée. Dans ces conditions, il est préférable de renouveler l’opération. Par configuration on peut émettre des codes pour MM53200 (UM3750), MM3758 et Start.
D’origine le modèle Start a un code ON et un code OFF. Avec les autres circuit, il suffit d’adjoindre une bascule qui modifie le code de réception pour obtenir le même résultat.
Les codes sont mis dans l’EEPROM, puis il suffit d’écrire à HFCmd pour émettre la commande pour le module d’indice N dans l’EEPROM. Hormis pour l’UM3758, les codes sont sur deux octets, trois pour l’UM3758 parce que le code est sur 18 bits.
Là encore, en supposant que l’indice N correspond à ON (ou OFF) pour un éclairage dans chaque pièce, un message général allumera (ou éteindra) toutes les lampes…
Le beeper
Avec un petit HP piezo on peut utiliser le signal de la télécommande pour faire un beep, utilisable pour attirer l’attention lors d’un message par exemple.
Les boutons
Le principe est simple, un appuie sur un bouton est enregistré. Cette information est lisible par le réseau, le réseau réarme le bouton. Ce dispositif est utilisable pour un système d’alarme a boucle normalement ouvert, chaque circuit peut contrôler 4 boucles. En raison de la vitesse de scrutation, sur une ligne longue un petit interface peut être nécessaire.
Message de présentation
A la mise sous tension l’afficheur présente toujours deux messages Message1 et Message2. Ces messages sont dans l’EEPROM, ils sont personnalisable. Le dernier caractère du message doit avoir le bit 7 a 1. Le message 1 peut avoir jusqu'à 16 caractères, le second huit, enfin le troisième n’est émis que si l’option affichage de la date est activée.
Configuration Application
L’octet EEConfA permet de configurer le module, sa valeur est mise en RAM dans ConfA à la mise sous tension (Tableau 4).
Tableau 4 : configuration
Bit |
Nom |
Action |
0 |
CLcd |
=1 Afficheur LCD type LM40 |
1 |
CLcd2 |
=1 LCD 2 lignes |
2 |
CHorI |
=1 Inhibe l’affichage de l’heure et date |
3 |
CDate |
=1 réception heure |
4 |
CBou |
=1 scrutation des boutons poussoir |
5 |
TimerX |
=1 Inversion sur passage 0 du chronomètre |
6 |
AdFFI |
=1 Adresse station 0xFFH (note1) |
7 |
ChkSum |
=0 contrôle Somme paquet, pas bon : pas traité |
Résumé des codes de commande
Le tableau 5 résume le code des commandes. Les commandes MASK et LCD sont nouvelles, elles permettent de modifier la configuration sans détruire le contenu de la mémoire pour mask.
Tableau 5 : Codes de commandes
R FFF FF DD |
Nom |
Descriptif |
0 000 00 00 |
AdressReponse |
Mémorise l’adresse de réponse (Mm) |
------------------ |
--------------- |
-----------Fonctions RAM/EPROM-------------- |
0 000 10 00 0x08 |
Lecture RAM |
Réponse: station MmAdresse |
1 000 00 00 0x80 |
Lecture RAM |
Réponse: station adresse dans Data2 |
0 000 01 00 0x04 |
Ecriture RAM |
P4 :Adresse,P3:Data , Pas de réponse |
1 000 01 00 0x84 |
Ecriture RAM |
P4 :Adresse,P3:Data , Réponse a MmAdresse |
1 000 10 00 0x88 |
Lecture EEPROM |
Réponse: station adresse dans Data2 |
0 000 11 00 0x0C |
Ecriture EEPROM |
P4 :Adresse,P3:Data , Pas de réponse |
1 000 11 00 0x8C |
Ecriture EEPROM |
P4 :Adresse,P3:Data , Réponse a MmAdresse |
------------------ |
--------------- |
---------- Fonctions bit mask sur la RAM |
X 001 00 xx |
OperMaskAnd |
Fait un mask AND Datas :adresse et mask |
X 001 01 xx |
OperMaskOr |
Fait un mask OR Datas :adresse et mask |
------------------ |
--------------- |
---------- Fonctions LCD |
X 001 10 xx |
EcritureData |
Ecriture dans le registre de Data de l’afficheur |
X 001 11 xx |
EcritureCmd |
Ecriture dans le registre de Commande |
Charge du processeur.
Nous n’entrerons pas dans le détails de la programmation, il ne faut pas oublier que le PIC16F84 ne possède pas d’uart, la gestion du dialogue est fait uniquement par logiciel.
La gestion du réseau est prioritaire. La conception a été prévu pour qu’il ne rate pas une trame.
Il en est de même pour l’heure, la précision reste celle du quartz. L’émission de la trame de télécommande est longue (1/2 seconde), il faut attendre la fin avant d’en émettre une autre, par contre les autres commandes sont utilisable pendant la transmission.
Mise en route.
Avant la mise ne place du composant, on vérifie l’alimentation. Des la mise sous tension, les messages de présentations doivent apparaître, puis l’horloge et la date. On peut ensuite faire un ping, l’adresse par défaut est 1, on peut aussi passer par l’adresse 255, si le circuit est seul.
Le ping consiste a envoyer un paquet, pour qu’il réponde. Si tout est correcte, avec le menu du programme Basic on pourra essayer les commandes. En appliquant un signal DCF77, avec une bonne réception le circuit donne l’heure et la date après environ deux minutes.
Conclusion
Voilà un circuit qui permet de réalise un ensemble domotique, sans programmation autre que sur le PC en Basic, il évite la prolifération des programmes.