Version PIC18F26K22
COMPTEUR autonome avec LCD 4x20 cars, BlueTooth, Eeprom 32K
HARDWARE :
PIC18F26K22 en PDIP28 pins , utilisé avec FOsc interne=32Mhz
La partie capture de l'info tour de pedale reste la meme.(Utilise
un capteur de proximité Telemecanique 3 fils + aimant)
autre option : Capteur effet HALL ..
mais un peu plus compliqué
L'alim de l'ensemble sera donc de 9V .Le +3,3V crée via un
module DC/DC made in RPC. ou LM317
nota: BT HC06 J alimenté en 3,3V
Prototype :
lien sur le capteur telemeca
*SCHNEIDER TELEMECANIQUE XS1-N08-PA340 .....abandonné..à
remplacer par SCHXS108B3PAM8.
Mais solution onereuse ..hormis une recup..
se rabattre sur la solution ILS + Mise
en forme
ou via Capteur effet hall + AOP ..
Hardware
Pin 28 RB7 -----------------ICSP Data
Pin 27 RB6 -----------------ICSP Clock
Pin 26 RB5
Pin 25 RB4
Pin 24 RB3 <--------- Stop
Pin 23 RB2 <--------- Start
Pin 22 RB1 <----R=4.7K --<+VCC Forcage à zero pour init
RTC par defaut
Pin 21 RB0 <-------- Pulse comptage
Pin 20 VDD --------+5V
Pin 19 Vss ---------Gnd
Pin 18 RC7 RX UART 1 <-- Keyboard
Pin 17 RC6 TX UART 1 --> Display * mettre une pull up de 10K
si RX non utilisée
Pin 16 RC5
Pin 15 RC4 SDA ------> 3 LCD 4x20 ---- 3 DS3231
1 DS3231 --- GND
2 DS3231 --- +VCC
Pin 14 RC3 SCL ------> 3 LCD 4x20 ---- 4 DS3231
Pin 13 RC2 <------- input en mode Capture signal via CCP1 et
tilmer1
Pin 12 RC1 <----- Reset Compteur
Pin 11 RC0
Pin 10 RA6
Pin 9 RA7
Pin 8 VSS --------- Gnd
Pin 7 RA5
Pin 6 RA4 Output -- Led -- 2,7K --+Vcc
Pin 5 RA3
Pin 4 RA2 (DAC)
Pin 3 RA1 Analog input EA1
Pin 2 RA0 Analog Input EA0
Pin 1 RE3 MCLR Reset --------ICSP PGRM
Schema et C.I. :
Isis : Velo_18F26K22_190203_variante_opto.DSN
Bill
of Material
Ares: Velo_171107.LYT
Schema :
circuit imprimé simple face (universel! ) NON à JOUR
Les liaisons au MCU se font sur des Pins Males coté MCU
Les modules RTC et modules HC06 sont enfichés sur des pins
FEMELLE coté circuit imprimé
La sortie LCD I2C se fait sur des pins Males coté circuit
imprimé.
Le Pickit2 s'enfiche sur les pins males du circuit imprimé, et
necessite une certaine surface libre autour des pins de
connection, because encombrement du boitier.
car le circuit imprimé n'est pas destiné uniquement à
cette application Velo
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 |
![]() |
|
![]() |
|
![]() |
|
![]() |
Affichage TERMINAL :
Mikroc pro 7.30 Beta
18F26K22 DS3231 24FC1026 UART1 HC06
Source : _18F26K22_Velo_LCD4x20_I2C_24FC1026_uses_float_190205.c
calcul kms en flottant
Presentation :
Appli. Velo App artement
464 pulses/Km 199Kms Maxi
Init I2C 400K
Test presence du LCD (PCF8754) : Device at adresse : 78 found OK
Test IT Timer1 delay=2sec
Test presence RTC DS3231
Device at adresse : 208 found OK
Re-Lecture RTC DS3231
NumPage 24FC1026 recupérée de L'EEPROM du PIC en 0x03FE et 0x3FF=
0
Last Cumul Kms recupérée de L'EEPROM du PIC en 0x03FA..0x03FD=
0.0
Commencer à pedaler ..
Comptage Nb tour de pedale J = 0
Comptage Nb tour de pedale J = 1
Comptage Nb tour de pedale J = 2
Comptage Nb tour de pedale J = 3
Comptage Nb tour de pedale J = 3
Comptage Nb tour de pedale J = 4
Comptage Nb tour de pedale J = 5
Stockage horodatage
DateTime= 05/02;11:27; next Idx Page_Eeprom = 12
Armement Interrupts RB0
Init Timer1 à 20x50mS => boucle en 1 sec
Indice ; Nb_Pulses ; Nb_TdP ; Nb_Kms ; Speed ; NbTdpPerMn
00060; 299;94.8;0.68;40.66 Km/H;94.8;
00061; 303;96.5;0.69;40.66 Km/H;94.8;
00062; 308;98.1;0.70;40.66 Km/H;94.8;
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.
sur reception de commande STOP
00407; 1992;641.0;4.58;40.39 Km/H;95.1;
STOP OK
Start= 41256 sec;Stop= 41665 sec;Ecart= 409 sec;Vitesse= 40.30;
TTdP= 641;Kms= 4.58;Vmoy= 40.30;Duree=00:06:49;
Data to save to 24FC1026 :
05/02;11:27;TTdP= 641;Kms= 4.58;Vmoy= 40.30;Duree=00:06:49;Cumul=
4.6
Ecriture de k= 74 bytes -> NumPage= 000 24FC1026
Sauve Numpage 001 dans EEPROM du PIC , at 0x03FE =MSB et 0x03FF=LSB
Sauve Cumul_Kms 4.6 -> EEPROM du PIC , en 0x03FA,B,C,D
Une commande STOP n'est effective que modulo Minute..
Commande HELP:
HELP :
..... 5 Tours de pedale= START r
STOP ..fin et sauvegarde parcours
ABORT ..Arret d'urgence et fin
RELECT ..Liste le contenu 24FC1026
ERASE ..Decr. Index 24FC,annule dernier parcours
U;24;08;17;04;17;36# Update RTC
Commande RELECTURE : (Relecture 24FC1026 )
Relecture 24FC1026 :
03/02;10:51;TTdP= 334;Kms= 2.39;Vmoy= 40.35 00:03:33;Cumul= 2.4
03/02;10:56;TTdP= 117;Kms= 0.84;Vmoy= 40.15 00:01:15;Cumul= 3.2
03/02;10:59;TTdP= 236;Kms= 1.69;Vmoy= 40.27 00:02:31;Cumul= 4.9
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.
pour la remise à l'heure RTC DS1307.
(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
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 (2017):
projet complet :
_18F26K22_Velo_LCD4x20_I2C_24FC1026_uses_float_171120.zip
Derniere MAJ :
Projet Zippé : 18F26K22_Velo_190208.zip
last source update :18F26K22_Velo_LCD4x20_I2C_24FC1026_uses_float_190205.c
Log sur terminal : Velo_2017_log_terminal.txt
video : Velo_18F26K22_190211.webm
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 .
* Pour les tests : pedalage simulé avec gené BF TTL à 4.8Hz!)
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
le fichier compilé :
Velo_Appart_171212.apk
Réactualisation
2019 avec appli Android ( blueTooth)
schema:
Usage d'une RTC DS3231 au lieu de DS1307
Choix Cordon prolific USB ou HC06 blueTooth
Amelioration coté Appli MikroC version 7.30
Version 2014
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 :
![]() |
Test en injectant un signal carré TTL
de 5Hz sur l'entree RB0 du PIC.
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 :
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 UGN3503
UGN3503 sensor datasheet
version PIC16F84
source MPLAB ASM : Velo_3.asm
Version de test avec simulateur de PIC et LCD2x16 :
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 Là
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.
Schemas :
Schema isis Velo_2011.DSN
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
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 :
|
Mode d'emploi :
APPART' S
VELO S(t)imulation
un aire de repos d'autoroute
atypique
ou se trouve un drole de circuit
Version avec capteur ampoule I.L.S (
Inter Lames Souples)
sur port parrallèle P.C.
docu technique sur ILS .
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
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)