rev0 14/01/2014
Rev 09/03/2018

Presentation carte IrDA Demo Board Microchip 102-00032 (MikroC version démo)
Test formatage de l'affichage en flottant sur le LCD (MikroC version démo)
Test avec RTC DS1307 et Eeprom 24KC256 sur bus I2C ( MikroC enregistré)
Mesure Tension Secteur 230V AC 5 (MikroC enregistre)
Chargement d'une EEPROM 24LC256 32K par un fichier de donnée





16F877 et IrDA Demo Board Microchip 102-00032

Fevrier 2008
Test avec le programme microchip livré avec la carte

images/Pickit2_MCP2150_demo_board.jpg images/MCP2150_demo_board_Test_Shanga.JPG
Connecteur RJ pour l' ICSP !! Test liaison IR avec PC et cle IR Shangai


Alim : 9V DC par pile ou bloc alim 9V DC AC/DC
OSCILLATOR 20MHZ TTL ECS-100AX-200 ECS Inc.
MCP2150 pour liaison IRDA avec coupleur optique en U14= TFDU4300
Emplacement pour EEprom 24LC256
docu technique Microchip ICI .
http://ww1.microchip.com/downloads/en/DeviceDoc/51516b.pdf

Le PC est equipé d'une clé à 10€, marque Shangai , qui necessite un driver KS-959.sys
les test realisées avec le logiciel Microchip pre-installé sur la carte et en face l'appli IRDA , sont OK.
Les sources ne sont pas fournies ! VRAIMENT DOMMAGE..

images/IRDA_board_16F877_a_schem.jpg images/IRDA_board_16F877_LCD_schem.jpg images/IRDA_Board_16F877_implantation.jpg
schema 1 Attention Mettre RD5=1 pour usage du LCD  



../common/GIF/lgreen_cligno.gif
14-01-2014
Test formatage de l'affichage en flottant sur le LCD
(avec MikroC version limitéee 2K )


utilise la librairie michrochip LCD , mais Attention: ne pas oublier RD5=1 , sinon pas d' affichage (quand meme) déroutant !!!
Ne pas oublier non plus de passer les Pin RA en TOR au lieu d'Analogique (par defaut au reset.) via ADCON=6.

MikroC en version limitee 2K :
source : 16F877_Irdaboared_Float2asc_140114.c
chargeur :16F877_Irdaboard_Float2asc.hex


Test mesure ADC channel 1 voie RA0

Cette voie est reliée au potar VR1 sur la carte..
Pour Conserver RA0 en ANA et RA1,2,3 en Sortie TOR , cette fois ADCON1=0x0E.
Usage de float2ascii,pour afficher 0,000 à 4.999V
MikroC en version limitee 2K :
source :16F877_Irdaboared_ADC1_140114.c
chargeur :16F877_Irdaboard_ADC.hex

images/IRDA_ADC0.jpg images/IRDABoard.jpg
Test reel, voie RA0 sur potar de la carte L'elastique,c'est pour tenir renfoncé la plug cassée





Juin 2014
Test avec version MikroC enregistrée, donc NON limitée..

Connection Interface 2T, sur RC7 et RC6 pour exploiter l'UART
raccordes sur J15, RC6 et RC7 ..vers interface 2T

images/IRDABoard_Test_140607.jpg images/IRDA_board_16F877_sch.jpg
carte raccordéee au Pickit2, alim 9V et interface 2T schema complet

Le module transmet bien sur TX vers le PC, mais la reception RX ne fonctionne pas ...
ATTENTION:
soit retirer le circuit MCP2150 qui interfere sur le niveau de RC7 RX
soit, solution soft, Mettre un 0 sur RC0 => Reset du MCP2150 en permanence, pour ne pas perturber le niveau de RC7.
Les tests de reception via interruptions sont alors OK

Rajout RTC DS1307 sur le bus I2C

Module RTC DS1307 Miniinthebox, alimenté via +5V et Gnd de J15
Raccordement SCL sur RC3 de J15
Raccordement SDA sur RC4 de J15

Adrese I2C Eeeprom 24C32 = 0xA0 !

../common/GIF/DS1307_24C32_I2C_RTC_module.jpg ../common/GIF/DS1307_24C32_schema_RTC_Module.jpg
RTC DS 1307 with Lithium Ion Battery LIR2032 3.6V nota: with Eeprom 24C32 4K bytes at I2C @ 0xA0


Usage de SW2 = BP sur rentree RA5 , pour forcage Init RTC DS1307 à une date et heure par defaut
si il est maintenu appuyé pendant la phase d'initialisation => message "Init RTC DS1307 par defaut"
sinon, relit simplement le contenu du DS1307 , maintenu à jour grace à sa pile LIRC2032.
Affichage alternatif sur la 1ere ligne " LCD2x16 & UART" ou " Time: 17:10:35 ", toutes les 4 secondes .
Possibilité de remettre à la date et heure via la commande Terminal : U;07;06;14;6;19;09#035#013
( exemple pour le 7 juin 2014 à 19H09)

Acquisition voie 0 = Potar de la carte .
Moyennage sur 32 valeurs consecutives et affichage en point + Volts (en flottant) sur la 2em ligne du LCD
Envoi aussi sur le terminal des 32 valeurs intermediaires (en points) suivant l'etat d'un flag modifié par la commande DS1= visu, ou DS0 = pas visu
Les valeurs : moyenne en point et en flottant sont aussi affichées sur le terminal.

Commandes des leds LD0 à LD3 (sur RD0 ..RD3) via la commande terminal Dx1 ou Dx0, avec x representant le numero de led (ou bit)
D21 allume led 2 , D20 eteint led 2..
On ne commande pas Led D5 .. qui sert à valider l'affichage LCD..

Gestion EEPROM PIC 256 bytes
pour affichage des messages sur terminal ..permet d'economiser de la RAM ....no comment
D'autres messages sont en ROM Code

Rajout EEPROM I2C 24LC256 32Kbytes et Gestion stockage
ATTENTION : delai OBLIGATOIRE de 5mS apres chaque ecriture individuelle...
Rajout : sauvegarde date et heure dans les 6 premiers bytes de l'Eeprom au format : MMJJHHMMSS<CR>
puis chaque mesure moyenne en point..
Demarrage sauvegarde sur Eprom 24LC256 par appui sur SW2
On affiche alors en 1ere ligne LCD la valeur de l'index de stockage qui evoulue par pas de 2 , car stoke : 1 entier = 2 bytes
On peut stopper à tout moment le stockage , par appui sur SW2.
qui lance la relecture complete de l'EEPROM, avec affichage du contenu sur le terminal
date et heure de debut, Numero de mesure, et valeur en Volt (flottant) au format X.xxx
Une fois l'edition terminé , on revient en mode affichage alterné sur ligne 1 et stockage arreté.
Un nouvel aapui sur SW2 , relance, continue le stockage au point d'arret precedent , sans sauver date et heure
Un appui simultanné sur SW2 et SW3 , fait une RAZ Index de la memoire 24LC256 et stoppe le stockage
Un nouvel appui sur SW2 relancera donc le stockage de la date et heure au debut de l'eeprom..etc...

15/07/2014 A VERIFIER
SI INTERFERENCE 24C32 du module RTC DS1307

En transfert Byte par Byte , il peut y avoir ecriture simultanée dans les 2 eeprom ,meme adresse
idem pour a lecture, par contre le mode Page , non encore testé ne devrait pas survivre à cette cohabiation forcéee
A SUIVRE ...



Resultat sur terminal VBRAY:


En resumé: Application point de depart ,pour Datalogger

Eeprom: 16F877_Irdaboard_EEPROM_RS.ihex
Source MikroC : 16F877_Irdaboard_Float_LCD_RS_PicEEprom_24LC256_DS1307_140607.c
Chargeur Hex : 16F877_IRDAboard_LCD_RS_ADC_PWM.hex




Mesure Tension Secteur 230V AC

schema original


Schema Modifié

But: mesurer la tension du secteur
base de calcul :
On prevoit la possibilité de Secteur +10% => 253 V
Transfo 230V/12V
Le generateur 50Hz necessite une valeur crete crete et non pas RMS
d'ou , en partant de 12V +10% => 13,2V et 13,2*1,414 => 18,6V crete
On etablit le rapport diviseur de façon à obtenir ,pour le maxi=253V,
La mesure Maxi sur l'entrée ADC du PIC devra etre alors de 5V pour obtenir 1023 pts
La mise à l'echelle , en unite phisyque , se fera donc avec 1023/4.04=253
Le reglage fin par potar 10 tours, permettant une calibration en divisant simplement par 4.
Division qui se resume par 2 decalage à Droite..
On a la relation finale:
253V AC --> 18,6V crete -> 5V ->1023pts => 1023/4.04=> 253 (V)
Avec -10% ......................-<> 16,79V crete -> 4.39V -> 898 pts -> 222 V
Au lieu de 253-25.3=227V
erreur due à la pauvre resolution de mesure : +-1 point => +-4V !!


A Suivre : Liaison IRDA ! au lieu de liaison RS232



Chargement d'une EEPROM 24LC256 32K par un fichier de donnée

En réponse à cette question :
Programmer une 24LC256 sans acheter un programmateur dedié pour

Le fichier de donnée à charger est constitué de datas 8 bits representées en ascii, sur 2 digits, en hexadecimal
Fichier au format CSV, separateur ";" , et terminaison de chaque ligne de 64 datas par un code <CR>
La terminaison du fichier etant un codage remarquable, ic le code CD3
La taille du fichier test est de 46 857 bytes .. pour 15 616 bytes de datas utilse .. celle qui seront chargées dans l'EEPROM 32K.

Un microcontroleur ,avec une liaison UART Hardware et une liaison I2C HARDWARE , peu gerer cela/
Le fichier à envoyer , se fera par la liaisoin Serie UART , via un terminal PC, sous le format 19200,N,8,1 protocole RTS/CTS.
Le cable de laision devra donc comorter la gestion de ces siganux !

Pour ma part , j'ai utilisé le meme interface hardware que pour le programmateur de AT89C2051.
Nota: la ligne RTS n'est pas exploitée..



HARDWARE :

Je me suis servi de ma carte 16F877 IrDA Board , qui a quelques particularites:
8 leds sur le port D
Bloc Oscillateur externe 20MHz
LCD 2x16
I2C Eeprom emplacement DIP 8 avec adresses A0,A1,A2 = 0

le hardware minimaliste étant:
UART .....RC6,RC7
I2C1 ..... RC3,RC4 avec Pull up 4,7K
CTS ... sortie RC5
Qxx MHz oscillateur ( on peut mettre une autre valeur que 20MHz)
MCLR tiré au +5 via 6,8K

Terminal VBRAY ( tourne encore ) sour WIN10, mais il n'y a plus de scroll ecran.


Le fichier à charger : 64bytesHEX.csv

sous excel , 64ytesHEX.csv remis en forme avec format 0# pour les valeurs Hexadecimales < 10 ( etait sur 1 seul char !)
// 1 ligne de 64 data => 192 chars +CR =193
// 244 lignes de 192 chars utiles
// 244 x 64 datas => 15 616 datas.
// taille fichier 46857 bytes
// lecture par shunks de 64 chars .. des que 64 Bytes data extirpés des 192 chars d'une ligne
// rangement en ligne dans la Page Eeeprom des 64 datas => ecriture dans EEPROM
Nota :
on aurait pu charger le fichier "brut de pomme " , toutes les datas en binaire , 1 unsigned char = 1 byte de data, sans separateur,
et 1 seul CR ou DC3 en fin de fichier , soit un fichier de 15617 octets.
Le separateur ";" et le <CR> amenent un plus : démontre qu'on a la meme modularité au niveau du dump final eeprom.

SOFTWARE :

La principale difficulté est le peu de RAM dispo avec ce PIC16F877 , et surtout la mauvaise gestion des bank RAM par MikroC
Alarme IRP Bit .. meme avec une taille de buffer de 90 bytes , alors qu'il y a > 150 bytes dispo en RAM, mais dans d'autres BANK RAM.
Ce probleme n'existe pas pour les 18F .. mais ici 16F877 IMPOSé .
Le Buffer RAM n'est donc que de 64 bytes .. la Page EEPROM est aussi de 64 bytes !
Au fur est a mesure de la lecture des 192 characteres par ligne ,
avec 3 chars par donnes ( ex: "FF;" les 2 carac Hexadecimaux de la valeurs + le separateur ";")
192/3= 64 donnees , qu' on stoke dans la table de 64 bytes, puisqu'elle est pleine
on la transfert dans la page EEPROM 24LC256, puis on continue ainsi

On a donc 1 pages EEPROM pour chaque ligne de characteres .. à terme 244 lignes -> 244 pages ( de 0 à 243)
A la fin du fichier, par detection de DC3, on lance le DUMP de l'eeprom , pour en verifier (visuelement) le contenu .

Le projet complet MikroC
File_To_24LC256_via_16F877.zip
source : _16F877_File_2_Eeeprom_24LC256_CTS_180307.c
chargeur : 16F877_Irdaboard_File_To_24LC256_CTS.hex
le résultat : DUMP de l'eeprom
Test_Relecture _24LC256_chargee_par_file_64bytesHex_180306.log

Cette application serait plus facile et performante avec un 18F26K22 avec 3896 bytes RAM à acces linéaire,
plutot que le 16F877 avec 368 bytes RAM , repartis en plusieurs bank.



paulfjujo@free.fr