Version PIC18F26K22 COMPTEUR autonome avec LCD 4x20 cars, BlueTooth, Eeprom 32K

Hardware :

PIC18F26K22 avec FOsc interne=32Mhz
La partie capture de l'info tour de pedale reste la meme.(Utilise un capteur de proximité + aimant)
L'alim de l'ensemble sera donc de 9V .Le +3,3V crée via un module DC/DC made in RPC.
nota: BT HC06 J alimenté en 3,3V

HARDWARE :





Prototype :

images/t_Velo_171106_Proto.gifimages/t_Connection_Capteur_Schem.gif
lien sur le capteur telemeca
*SCHNEIDER TELEMECANIQUE XS1-N08-PA340 abandonné..remplacé par SCHXS108B3PAM8.
Mais solution onereuse ..hormis une recup..
se rabattre sur la solution ILS + Mise en forme
ou via Capteur effet hall ..


Schema et C.I. :

Isis : Velo_18F26K22_171028.DSN
Bill of Material
Ares: Velo_171107.LYT

Schema :

images/t_Velo_18F26K22_171028.gif images/t_Velo_2017_CI_face_composants.gif images/t_Velo_2017_CI_face_cuivre.gif
schema ISIS ARES coté composant vue coté cuivre

circuit imprimé simple face !

L'EEPROM 24FC1026 :



Particularité: L'Adresse A0 , est un bit INTERNE B0 , correspondant à la bank de 64K bytes (512K bits) adressée.
L'adresse d'ecriture 0xA0 de base est donc modifiable par les Adresses Hardware A1 et A2 , et aussi par le bit B0
L'adresse de lecture étant toujours Adresse de base +1 .
Il y a déja une Eeprom 24C32 sur mon module RTC DS1307 à cette adresse 0xA0 !
.. j'ai donc utilisé l'adressage hardware : A2=1 et A1=0
L'adressage de base en écriture devient donc 0xA8 (ou 0xAA 2em bank)
L'adressage individuel de byte , se fait par page de 128 bytes .. et un offset dans la page selectionnee.
Ecriture de k= 75 bytes dans NumPage= xx
il y a de la perte de place..(128-75= 53 bytes libres) mais on s'en fout ici ..
on pourrait aussi rajouter d'autres infos .. temperature ambiante, echauffement de la selle !
Une optimisation aurait pu se faire en limitant le Nb de bytes à 64 => 2 entrainements par page..mais plus compliqué
ou alors permettrait l'usage d'une 24LC256 64K bytes et page de 64 bytes.

Affichages LCD


Affichage sur Appli Android
BT_Simplex_Link.apk
Commande STOP envoyée depuis le Mobile
=> Sauvegarde Horodaté des datas
sur EEprom 24FC1026


L'application :
Alimentation par pile 9V (because capteur de proximité) .
Peut rester autonome, le terminal et la liaison BlueTooth ne sont pas indispensable.
Un BP (Re)Start et un BP Stop + le LCD 4x20 chars constituent l'interface minimaliste operateur

Un strap non permanent (J1), permet d'initialiser l'horloge RTC DS1307 pour la premiere fois
ou sur remplacement de la pile CR2032.
La sortie terminal UART1 permet :
*de voir tous les details de deroulement du programme.
*de remettre à l'heure la RTC, format : U;19;12;17;02;12;51#
*d'envoyer des commandes au PIC.(STOP,RESTART)

Apres les inits hardwares classiques et UART1, UART2, I2C
le module HC06 est initialisé ( vitesse préalablement definie par defaut : 19200 bauds ! via la commande AT+BAUD5 )
L'init en 4 step, peut ne pas etre OK, si le module est DEJA APPAIRE en bluetooth avec un Phone Android .

On rentre ensuite dans une boucle d'attente Avec un message d'invite "Pedaler pour debuter"
Il faut detecter 5 tours de pedale pour armer /commencer le comptage et mesurer la vitesse.
La date et heure sont sauvegardée dans l'Eeprom 1Mb. Le Temps ZERO (nb de seconde depuis minuit , est sauvegardé.
Le cas d'un debut d'entrainement Velo à 23H58 .. et debordant minuit , n'est pas traité!, ni pendant le changement d'horaire)
Les donnees sont comptabilisées toutes les 10 secondes.(cadencement via Timer1 =50mS x 200 fois)
Il faut environ 3 tours de volant d'inertie ( 3 pulses) par tour de pedale => La led sur RA4 le montre.
L'impulse Tour de volant entre sur RB0 => traitement par interruption.=> Nb de pulses.
L'horloge DS1307 sert à etablir aussi le temps total qui s'ecoule .. en secondes.
Les calculs se re-actualisent apres 10 seondes de comptage pulses
C'est pourquoi l'affichage de la vitesse est en Metres/sec pendant les 5 premisers cycles de 10sec
puis en KM/H pour la duree modulo 1 minute .
Pour les plus sportif, il y a aussi l'affiche en RPM .. (Froome =>120.RPM !)
En fin de'entrainement :
Sur action BP Stop, les donnes sont sauvegardées dans l'eeprom .. cela represente un maxi de 42 bytes.
La Date et Heures, le Nb de tour de pedales, Le nb de Kms, la vitesse Moyenne en KM/H.
L'EEPROM est organisée en Page de 128 bytes.. on peut mettre 3 entrainement par page ( 3x42=126 < 128 !)
Il y a 1000 pages ..!
L'index de stockage dans L'eeprom 24FC1026 est stocké en fond d'EEPROM PIC (0x3FE,0x3FF).
Cet index est relu à chaque init du programme, ou à chaque Re_Start

Les commandes STOP, RESTART, RELECT peuvent etre emises depuis un terminal (UART1) ou via BlueTooth.(UART2)
sauf pour la remise à l'heure RTC DS1307 via UART1 seulement .
(exemple : U19;12;17;02;16;23;# pour le Mardi 19/12/2017 16H23)
exemple :
Comptage Nb tour de pedale J = 0
Comptage Nb tour de pedale J = 0
U;19;12;17;02;16;23#
Index1 = 20
Ecriture dans DS1307... OK
Comptage Nb tour de pedale J = 0

Une commande STOP n'est effective que modulo Minute..
La relecture se fait depuis l'indice 0 , jusqu'à l'indice en cours.. liste de tous les entrainements.
Rappel: stockage en ascii, delimité par ";" => compatible Excel.


L'Application MikroC :
projet complet :



Projet Zippé : 18F26K22_Velo_LCD4x20_I2C_24FC1026_uses_float_171120.zip
last source update : 18F26K22_Velo_LCD4x20_I2C_24FC1026_uses_float_171120
Log sur terminal : Velo_2017_log_terminal.txt
le resultat de compilation "fenetre Messages" est copié en fin du fichier source C .
la 1ere ligne de message est "decompressée" pour pouvoir lister les librairies utilisés .


exemple d'entrainements stockées dans l' EEPROM, relus via la commande Terminal RELECT.
Relecture 24FC1026 :

02/11;14:51;TTdP= 284;Kms= 2.03;Vmoy= 38.37;Duree=00:03:10;Cumul= 2.0
02/11;14:56;TTdP= 473;Kms= 3.38;Vmoy= 39.20;Duree=00:05:10;Cumul= 5.4
02/11;15:03;TTdP= 1511;Kms= 10.79;Vmoy= 79.29;Duree=00:08:10;Cumul= 16.2
02/11;15:15;TTdP= 1134;Kms= 8.10;Vmoy= 39.93;Duree=00:12:10;Cumul= 24.3
02/11;17:21;TTdP= 3304;Kms= 23.60;Vmoy= 40.30;Duree=00:35:08;Cumul= 47.9
02/11;19:53;TTdP= 2171;Kms= 15.51;Vmoy= 40.23;Duree=00:23:08;Cumul= 63.4
04/11;10:22;TTdP= 9723;Kms= 69.45;Vmoy= 40.42;Duree=01:43:05;Cumul= 132.8
( pedalage simulé avec gené BF TTL!)




Application Appinventor2

Lié à l'application ci-dessus 18F26K22_Velo_LCD4x20_I2C_24FC1026
avec un module BlueTooth HC06 ( repere Jaune )

Designer :

L'interface MCU PIC Velo est sous tension
1°) Activer le blueTooth sur le phone Android et lancer l'application Velo_Appart_171212.apk
2°)selectionner un module BT dans la liste
3°) celui ci doit apparaitre avec son nom, puis connecté dans le champ status.
4°)dans le champ dialogue: on voi ce qui est emis par le PIC
5°)il faut commencer à pedaler pour activer le comptage
6°) La commande STOP, enclenche la memeo des données dans l'EEPROM32K
7° un restart est possible par la commande START

Design * capture ecran reel avec signal= 4,83 Hz

*capture d'ecran sur tablette LENOVO TAB3 710F


Blocs AI2

images/t_blocks_Velo_171212.gif


le fichier compilé :
Velo_Appart_171212.apk




Version PIC18F258 COMPTEUR autonome avec affichage sur LCD 4x20 cars

Hardware :

PIC18F258 avec Q=20Mhz
La partie capture de l'info tour de pedale reste la meme.(Utilise un capteur de proximité + aimant)
L'alim de l'ensemble sera donc de 9V .Le +5V via un regulateur genre LF50CV.
nota: BT HC06 alimenté en 3,3V

Prototype de test :

images/Velo_2014_Proto.jpg

Test en injectant un signal carré TTL de 5Hz sur l'entree RB0 du PIC.

images/Signal_5Hz.jpg

Liaison RS232 vers Terminal VBRAY
Liaison BlueTooth HC06 (alimenté en 3,3V) niveau TX ramené à 3,3V via diviseur 1K/2,7K
Une sequence d'init du HC06 est appliquée en debut de programme.
Si les 4 phases d'init sont OK, c'est à dire que le HC06 a bien repondu aux commandes AT
voir details dans int Init_BT_With_feeback()

Cde Reponse
AT OK
AT+PIN1234 OKsetPIN
AT+NAMEHC06-7D69B OKsetname
AT+VERSION OKlinvorV1.8

la liaison est declaré OK .. si non appairé !
La led du HC06 clignote à quelques Hz
Si on appaire ce module avec soit un PC + BlueSoleil , soit une tablette android
La led clignotante du module HC06 devient fixe .
le module BT est vu comme HC06-7D69B
On peut alors utiliser la liaison serie SSP ( COM virtuel avec Bluesoleil) ou appli Android.
pour visualiser ou exploiter les datas .

Schema :

images/Velo_18F258_140822.jpg

Le Bus I2C hardware est utilisé ici pour gerer l'afficheur LCD 4x20 cars et la memoire Eeprom 32K 24LC256 + Horloge RTC DS1307.
Le tout est auttonome , mais l'UART1 est utilisé soit pour le debugging, soit pour le tracage sur Ecran PC, et en liaison avec
un module BlueTooth HC06 , permet aussi la mise à l'heure de la RTC ou la consultation du contenu Eeprom 24LC256.
Une application Android est prevue ....
La memoire 24LC256 est utilisée ici , en mode PAGE de 64 octets chacune. Il y a donc 512 pages possibles..512 trajets!
L'index de l'Eeprom 24LC256 est stockee dans les 2 derniers bytes d el'Eeprom du PIC.
Au demarrage on recupere cet index ..utilisé à la fin du parcours.
Le top depart est donné par les premiers 5 tours de pedales...
Le numero de page Eeeprom est recupéré depuis les 2 derniers bytes de l'Eeprom PIC ( 254em et 255em)
On effectue une lecture Date et Heure de la RTC DS1307.
et cette date et heure sont stockées à ce moment au format MM/JJ;HH:MM ( L'annee n'est pas sotockee, ni les secondes !)
au debut de la page Eeprom 24LC256 designee.
On declenche le TOP_depart = Time HH:MM:SS exprimé en secondes
Vu la grande taille de l'Eeprom, tout est stockée en Ascii, car faiclement relisible (plutot qu'en binaire)!
L'index dans l'eeprom est positioné apres les 11 premiers caracteres , donc à 12 ..Ce qui laisse 64-12=52 bytes dispo
L'info tour de pedale arrive sur RB0, qui genere une interruption

Rappel des donnees de base :
B0 entree capteur de Tour : ~ 3 impuls par tour de pedale
761 tour de pedale pour 1km avec roue de diam 700
PI.D= 2,199114858 metre
rapport 52/16 =3,250
developpé=7,147 M soit 139,9 tours de pedales par KM
pour velo d'appart
si 3,1 tour volant d'inertie par tour de pedale
=> developpé=2.30M par tour de volant
soit 434 impulses pour 1Km
ou 43 impuls=100M
Maxima possible en Kms = 199kms

Pendant l'IT RB0 on test aussi le bouton d'arret : BP_STOP (RB3)
Le timer1 est utilisé pour elaborer une base de temps elementaire de 10 secondes, periode de rafraichissement du LCD et des calculs
Au bout de 6 temps elementaires , donc 6 x10 sec = 1 minute, les calculs de
Nombre de tour de pedale par minute
Nb de kms parcourus (resolution 100M)
vitesse instantatnée Km/H (resolution 0.1Km/H)
info affichees sur le LCD
Toute les 464 impulsions , les calculs sont reajusté ,pour la correspondance du KM, afin de ne pas cumuler les erreurs d'arrondi
(apres,la precision globale depend de la pression des pneus !)

2 Hz sur RB0 correspond à : 16.60 Km/H et 38.71 Tr de pedale / minute
5 Hz sur RB0 correspond à : 41.63 Km/h et 96.77 Trdp/Mn
7 Hz sur RB0 correspond à : 58.23 Km/h et 135.81 Trdp/Mn
1000Hz sur RB0 correspond à 8293 Km/H !!!

Resultat sur terminal VBRAY




Resultat sur afficheur LCD

Afficheur 4x20 piloté par un PCF8754 ,port 8 bits en I2C.. donc commande sur 3 fils SDA,SCL et 0V
Bibliotheque specifique LCD_PCF_I2C crée à cette occasion, vu que la librairie LCD MikroC
ne marche plus dans ce cas de figure

  new functions

Creating New Library
voir Help de MikroC

Source :
__LIB_LCD_I2C.cp
bibliotheque:
__LIB_LCD_I2C.mcl
Pour l'inserer dans le fichier P18F258.mlk
rajouter dans la partie LIB

..



En fin de parcours ou duree d'entrainement, via Appui su BP STOP
On declenche le TOP_Fin pour calculer l'ECART de temps total en secondes
On refait alors les calculs sur la duree totale pour calculer la moyenne horaire : Nb de Kms / 3600
Le nb total de tour de pedale est aussi recupéré
Ces donnees sont stocké dans l'espace reservé pour la page Eeprom en cours ( 52 bytes)
et le numero de page est incrementé puis stocké dans l'Eeprom du PIC ( pour la prochaine fois!)
L'EEprom peut stocker 511 parcours.

14/08;20:06;TTdP= 955;Kms= 7.05;Vmoy= 41.63;Duree=00H10M10S

A ce moment ,on est dans une boucle d'attente qui permet, via le terminal RS232 ( ou via Bluetooth)
le remise à l'heure RTC si besoin est..via la commande :U;14;08;14;05;18;52#035#013
pour le 14 aout 2014 Jeudi 18H52
La consulation de tous les trajets stockes dans l'eeprom depuis l'index 000 à l'index -1 en cours.
via la commande REL<CR> pour RELecture
exemple :
Relecture 24LC256 :
14/08;19:48;TTdP= 130;Kms= 1.04;Vmoy= 41.32;Duree=00H01M31S
14/08;19:50;TTdP= 178;Kms= 1.51;Vmoy= 41.69;Duree=00H02M10S
14/08;20:06;TTdP= 955;Kms= 7.05;Vmoy= 41.63;Duree=00H10M10S


Software:
Usage de MickroC Pro V6.40
Source :18F258_Velo_140808.c
Chargeur ::18F258_Velo_2014.hex
Eeprom: 18F258_Velo_2014_EEPROM.ihex
Config: 18F258_20Mhz.cfgsch

A suivre:
affichage sur Tablette Android (lien BlueTooh) avec appli RFObasic.
generation trajet via simul GPS sur Google Maps

 

 



Version COMPTEUR autonome avec affichage sur LCD2x16

Interface capteur à effet Hall

Velo_interface_02.jpg InterfaceCapteurVelo.jpg

avec MPLAB ASM version PIC16F84
source : Velo_3.asm




Version de test avec simulateur de PIC et LCD2x16 :

images/Usage_misimDE.jpg

misimDE version 1.77
avec JAVA environnement: j2re-1_3_1_11-windows-i586.exe
...voir Site: http://www.feertech.com/misim et
https://jsecom15k.sun.com/
ou ici
et en version 1.7.9

Descriptif: Velo_compteur_misimDE.pdf
Source : Velo_10z.asm
Ordinogramme: VELOPIC_chart.pdf

attention à la declaration des variables : differente sous MPLAB!



Version PIC18F252 COMPTEUR autonome avec afficheur LCD Nokia 3310

Hardware :
Un capteur de proximité Telemecanique XS1-NO8 est installé face au volant d'inerie sur lequel est collé un mini aimant.
L'aimant permet de renforcer la detection sans cela le capteur ne pourrait pas detecter, d'autant plus qu'il est utilisé
en deça de sa spécification 12V-24V
dans ces conditions il detecte tres bien à partir de 8V .. mais decroche en dessous => il ne peut pas etre alimenté via le +5V
L'alim de l'ensemble sera donc de 9V et le +5V via un regulateur genre LF50CV.

images/velo_appart_Capteur_c.JPG images/velo_appart_Capteur_prox.JPG

vue generale

entrainement

detail capteur + aimant


Prototype de developpement:

images/Velo_proto_2011.jpg


Schema :


Schema isis Velo_2011.DSN

schema Velo 2011
Bill of material

2 BP interrupteurs : BP START parcours , BP STOP parcours
1 switch Debug ; permet ou pas, la sortie simultanée sur ecran terminal RS232
1 afficheur Nokia LCD 3410 8 lignes de 16 car .. attention differents modeles :formats 6 lignes de 14 car avec 3310
1 Pic18F252 + quartz 10Mhz encardre de 2x27pF
1 led sur info Timer1 seconde
1 led sur info Tour de Pedale : toutes les 3 impulses.
2 transistors: 1 PNP BC478 et 1 NPN BC107 pour l'interface RS232
resistances, condenstateurs ...


Test avec generateur à Quartz TTL 48Hz

Velo_3pulses_pour_1Ttdp.jpg

fichier source C18 : 18F258_Velo_Nokia_110901.c
fichier *.hex : Velo_18F258_110901_ok.hex
fichier resultat : velo_110901.log avec generateur de frequence sur 48Hz
le programme a été eprouvé à plus de 400Km/H et plus de 100 Km par parcours ..
donc aucune chance de bloquer le programme par depassement de capacité !
Apres modif du generateur à quartz,(rajout diviseur par 10), tests à 4.8Hz..

Le nokia (3410) de 8 lignes de 16 cars , permet d'afficher :
  1. la version du prg
  2. le numero de parcours
  3. le Nombre de pulses volant d'inertie NbPulse
  4. Le nombre de tour de pedale par minute Tdp.Mn
  5. La distance parcourue en Kms et hectometres XXX.X kms
  6. La duree du parcours en secondes
  7. La moyenne de vitesse reactuasiee chaque Mn et en fin de parcours < affiche wait> pendant les 59 premieres secondes.
  8. ligne de status : < attente du start>
    < etat running> <etat wait clignotant : attente de 60 secondes pour 1er calcul>
    <etat Stop>
affichage nokia
test à 4.8Hz


Mode d'emploi :




 

APPART' S VELO S(t)imulation

un aire de repos d'autoroute atypique
ou se trouve un drole de circuit

images/t_Lasse_25.jpg

Version avec capteur ampoule I.L.S ( Inter Lames Souples)
sur port parrallèle P.C.

docu technique sur ILS .



images/Velo99_presentation.jpg

images/Velo99_test_ack.jpg

images/Velo99_circuit_a.jpg

nota:
Pour plus de commodité pour faire les captures d'ecran
le tour de pedale a été simulé avec un generateur de signaux carrés
à 48Hz !!! ce qui depasse largement les possibilité de comptage maxi
on observe neanmoins des vitesses de > 1000Kmh
Essayer donc de pédaler à 48 tours de pépale par seconde..
.
ou meme de suivre le rytme de Lance Armstrong .. Oups, dopé celui là !
disons Froome à 90 TdP / minute

images/Velo99_graphic.jpg

Le circuit en vert, devient violet au fur et à mesure de l'avancement(en Kms).
On peut donc se situer à tout moment sur le parcours..
Il serait possible de faire intervenir l'altitude, avec un mode de freinage serait plus
perfectionné : par exemple frein à poudre (jaegger) ou moteur DC frein ou alternateur
à la place d'un reglage (pas tres fiable) de machoire variant beaucoup entre à chaud et à froid.
En generant une consigne de frein dependant de la pente .



Application DOS,Win98 (not XP ou superieur!)
source : programme en C (turboC2.0)
circuit des Antennes
Executable
resultat: VELO.DAT



retour à l'index (home page)