version 0.0 ... 23/01/2020
rev 19/05/2022.


Projet Horloges 2020 (Global) Janvier 2020
  
  Synoptique

Partie #1 :
  Affichage défilant sur 12 matrices 8x8 (18F26K22 #1) MikroC Pro 7.60
  
  Schema part#1
    
Circuit Imprime Part#1
    
Software Part #1 ..30 Avril 2020
    
Mise en Boitier ..18 juin 2020
Revision Software Mai 2022

Application Appinventor2 pour controle d'affichage défilant 12 matrices . 30/04/2020
  
  Schema Blocks
    Vue Designer
    
fichier Projet Aia
    
fichier Executable Application Android *.APK
    
Tests /verifications Echange Android <......> PIC

Partie #2 Hologe ESCLAVE 7 seg. Géants (MikroC Pro)


Annexes:
    
Rappel sur config Terminal YAT
    
Appinventor2, Usage de 13 ou \n pour CR ?




Projet Horloge 2020

Usage d'un PIC18F26K22 et du Pickit3 Microchip pour charger l'executable
Environnemen t: Mikro C V 7.60
MCU : FOSC interne 16x4=64MHz

Synoptique Rev 0304
Utilisation de 2 MCU (18F26K22)
Part#1 : Horloge avec Affichage Defilant sur 12 matrices , avec RTC (MCU#1=
Part#2 : Horloge avec 6 Afficheurs 7seg géants 8 " , MC#2, synchronisée par MCU#1


images/t_Horloge_2020_Synoptique_Rev0304.gif

Plusieurs type de liaison à mettre en oeuvre :
Liaison serie SPI 1 specifique pour les 2 affichage temperatures constitués chacun de 3 modules MAX7219 + Mtrice8x8 type H
Liaison Serie SPI 2 specifique pour les 60 leds RGB WS218B
Laison I2C pour la RTC DS3231..sur laquelle on recupere le 1HZ = Synchro de tout l'ensemble
Liaison UART1 -> module BlueTooth HC05
Liaison OWS : 1 entree OWS commune aux 2 mesures DS18B20 ( ou 2 entrees OWS si possible)

8 Sorties MCU pour piloter les 7 seg+DP des afficheurs (en multiplexage) via un ULN (canal N)
4 sorties MCU pour piloter les ANODES des afficheurs via un UDN canal P , en 24V
L'oscillateur interne sera utilisé pour liberer RA6 et RA7 si le MCU est en PDIP28
Une entree 1Hz sur RB0 en mode interrupt pour la synchro du programme.
MCLR entree RESET avec un Bouton Poussoir.
1 sortie led de signalisation sur RA4
Apres avoir étudié le cas d'usage d'un seul PIC 18F46K22 en DIP40 pour tout gérer,
il s'avere que les timings necessaire au defilement des 12 matrices
du ruban 60 leds , et de l'affichage dynamique des 6 afficheurs 7 segments
et la possibiliter de dialoguer en RS232 , allait devenir trop comlexe à gerer
d'où l'usage de 2 MCU pour repartir les taches et avec un timming bien plus souple à gérer..



Partie #1 :
Affichage defilant sur 12 matrices H 8x8 (MCU #1)


HARDWARE :

Usage du circuit imprimé : BASE 18F26K22 pour la partie Test et debugging ..




Schema Partie #1 :
Horloge / Temperatures/Message Défilant 12 matrices 8x8 H

rev 10/03/2020
fichier ISIS : BASE_18F26K22_HORLOGE_Defil_12_Matrice_200310.DSN

images/t_BASE_18F26K22_HORLOGE_Defil_12_Matrice_200310.gif

Il faut faire cohabiter plusieurs liaisons (Soft):
* SPI bit bang (MAX7219)
* bus I2C1 (Hardware) pour l'horloge RTC
* UART1 (dialogue et tracage)
* OWS pour capteur de temperature
* analogique ? : capteur de luminosité ( LDDR ) ou via un TL275 (frequence)


Rajout capteur de temperature OWS DS18B20

Un bit de commutation dans l'affichage Matrice, permet de basculer Affichage Time ou Affichage Temperature
Time et Temperature sont acquis à chaque cycle (seconde)
Une fenetre temporelle de 4 secondes permet l'affichage alterné Time ou Temperature sonde DS18B20
Il suffit d'intervertir 2 valeurs pour recadrer le separateur ou le point decimal,
le 1/100em de degré est sacrifié pour afficher le suffixe °C
La Date complete + Time (HH:MM:SS) + Temperature (DD.DD°C" sont envoyés sur un terminal ,chaque seconde.
via la sortie UART1
Le terminal permet la remise à l'heure RTC .



Probleme rencontrés :

Test de l'ensemble de 3 blocs de 4 modules Matrice8x8 H et Max7219 ( soit pour message defilant de 12 caracteres)
Luminosité Anormale sur le 2em et le 3 em module ( si 100% le premier, 50% le 2me , 25% le 3em )
Des mesures à l'ohmetre montre que la distribution de la ligne GND , de matrice en matrice, est coupée au niveau du 8em bloc
Ce qui n'empeche pas le défilement des 12 caracteres !
Apres correction , la ligne GND ..mesure ~0,3 ohms, et la luminosité est uniforme et maximale sur les 3 modules .... OK


consommation moyenne sous 3,5V
avec pointe à 300mA au déemarrage

100 mA avec luminosité minimale =00
200mA moyen avec lum=04
250mA moyen avec lum=08 et tension alim chute de 3,5 à 3,4V
300mA moyen avec Lum=12

à noter que sur ce modele de bloc matrice, l'Entree est à droite !
voir les flecches sur circuit imprimé


images/t_Problemo_matrices_2020.gif

images/t_Problemo_12_afficheurs_Matrices_H_2020_03_08.gif

Probleme sur Reception UART
Pour la MAJ RTC , l'envoi de la sequence depuis clavier terminal , se passe bien ,
mais, ensuite aucune autre commande n'est prise en compte .. Plus d'interruptuion RX UART ?
Vieux probleme, pourtant déja rencontré ,mais perdu de vue !
Il Faut mettre le flag IPEN_bit à 0 (au lieu de 1) si on ne gere pas la distingtion High Priority and Low Priority
Ce qui est bizarre et déroutant , c'est que ça fonctionne Tombe en Marche !) au moins 1 fois


Explication SOFTWARE :
Partie#1 : Defilement 12 Matrices :
13/03/2020 Modif: 2em sonde DS18B20 au lieu de la Temper Interne RTC DS3231
  sonde #1 sur RA0 BUS OWS#1 , sonde #2 sur RA2 BUS OWS#2
  Usage de 2 Bus OWS pour permettre un echange de sonde sans probleme d' identification (ID number).
18/03/2020 Modif : Remplacement des 2 caracteres ° C par un seul caractere groupant °C
codage de Degre C = ° 176
.***....
.*.*....
.***.***
.....*..
.....*..
.....*..
.....*..
.....***



19/03/2020 Modif :
  gestion Msg, Repetition Msg,
 Luminosité du Jour (sinon Miminum durant PLM)
  Fonte_8x8_H passée en zone Flash ROM au lieu de RAM => gain important de place RAM
    Used RAM (bytes): 1587 (41%) Free RAM (bytes): 2288 (59%)
   au lieu de
    Used RAM (bytes): 3635 (94%) Free RAM (bytes): 240 (6%)
   car debut d'aléas d'affichage sur matrices


Rappel des commandes possibles ( Help), via terminal ou bluetooth

Help : Help<CR>
RTC Update: U;14;05;18;15;36;01#<CR>
exemple pour :14 Mai 2018 01(Lundi) 15H36
Plage Luminosité Minimale PLM=18:06<CR>
Aff=1=Affiche Trame en binaire sur terminal sinon, Aff=0 sur Matrices <CR>
Seepd=xx vitesse de defilement xx de 02 à 99 <CR>
Msg=x...x de 0 à 63 caracteres , si >0 , Affiche le message x...x pendant x Rep <CR>
et affichage Time reduit, pas d'info temperatures pendant le Msg Affiché <CR>
Rep=xx de 04 à 99 :Repetition du Msg pendant xx Cycles <CR>
Lum=xx de 00 à 15 :Reglage Luminosité en mode JOUR <CR

Nota :
à la vitesse maxi de défilement, il faut insister sur l'envoi de commande terminal
car la fenetre temporelle de capture reception UART, est reduite au minimum .

Correctif du 25/03:
In Fine, j'ai supprimé toutes les inhibtions d'interruptions (GIE_bit=0) dans toutes les fonctions connexes sensibles
pour obtenir une réponse quasi INSTANTANNEE sur les commandes émises par clavier ou Bluetooth

avec envoi d'un message via "Msg=Mon Message", uniquement l'heure est affichée HH:MM:SS suivie de "Mon Message"
prendant le nombre de repetition dependant de la valeur Rep=xx
Apres le nombre de répétitions écoulés, on revient sur l'affichage complet : Date Heure Temperatures.
Le reglage Lum=00 à 15 n' est opérant qu'en dehors de la plage PLM=xx : yy,
à l'interieur de cette plage Lum=00

Modif. pour preparer la synchro entre Appli#1 et Appli#2
La sortie UART Appli #1 dédiée à l'envoi sur (HC05) BlueTooth et reliée AUSSI, à l'entree UART Appli 2
L'envoi de : HEUR=11:28:00 Jeudi 26 Mars 2020 T1= 18.68° T2= 18.43°
permet à la reception UART Appli#2, de detecter l'entete HEUR=
et recuperer HH:MM:SS afin de mettre à jour les registres internes Sec,Min,Heur
Donc toute MAJ RTC sur l'appli #1 , sera repercutée sur l'appli #2
De meme , la Commande PLM=18:06 Plage Luminosité Minimale
est répercutée sur l'Appli #2 pour diminuer la Luminosité des Afficheurs 7seg ET aussi interdire la MELODIE horaire




Circuit Imprimé Part#1 (SprintLayout 6.0 )
rev 14/04/2020

images/t_HORLOGE defilante_G_rev_200414_CI_lay6.gif images/t_HORLOGE defilante_G_rev_200414_Photo_lay6.gif images/t_HORLOGE defilante_G_rev_200414_Face_Cuivre_lay6.gif
vue coté composant PIC sur support ZIF photo circuit Part #1 rev 09/04/2020 masque soudures

HORLOGE defilante_G_rev_200414.lay6
HORLOGE defilante_G_rev_200414_Face_Cuivre_lay6.pdf

images/t_HORLOGE defilante_G_rev_200430_CI_lay6.gif images/t_HORLOGE defilante_G_rev_200430_Photo_lay6.gif
autre version Rev 200430 RTC à droite HORLOGE defilante_G_200430.lay


Fichier Spintlayout 5 : HORLOGE defilante_G_200430.LAY


Terminal:

Modification LUMinosité :
Valeur minimale=00 , maximale=15
11:51:43 Mercredi 25 Mars 2020 T1= 18.93° T2= 19.18°
Lum=04
Cde=Lum=04
Old Lum= 0
New = Lum=04

11:51:44 Mercredi 25 Mars 2020 T1= 18.93° T2= 19.18°
11:51:45 Mercredi 25 Mars 2020 T1= 18.93° T2= 19.18°

REPétitions d'affichage du Message
avec Rep=06 => affichage sur 17 sec
11:49:25 Mercredi 25 Mars 2020 T1= 18.93° T2= 19.18°
11:49:26 Mercredi 25 Mars 2020 T1= 18.93° T2= 19.18°
Rep=06
Cde=Rep=06
Old Rep = 8
New Rep = 8
11:49:27 Mercredi 25 Mars 2020 T1= 18.87° T2= 19.18°

avec REP=08 => affichage sur 34 sec

Commande de Mise à Jour RTC DS3231
format de cde : U;JJ;MM;AA;HH;MM;JS;#
JS=Jour de la semaine 01 à 07 ,
les secondes sont forcées à 00

15:49:11 Samedi 14 Mars 2020 T1= 19.00° T2= 19.25°
15:49:12 Samedi 14 Mars 2020 T1= 19.00° T2= 19.25°
U;25;03;20;12;02;03;#
Cde RTC Update : U;25;03;20;12;02;03;#
Ecriture dans DS3231... OK

12:02:00 Mercredi 25 Mars 2020 T1= 19.00° T2= 19.25°
12:02:01 Mercredi 25 Mars 2020 T1= 19.00° T2= 19.25°



Exemple d'envoi message

10:26:05.931) HEUR=09:26:58 Samedi 11 Avril 2020 TIn= 20.76° TEx= 20.80°
(10:26:06.923) HEUR=09:26:59 Samedi 11 Avril 2020 TIn= 20.76° TEx= 20.80°
(10:26:07.911) HEUR=09:27:00 Samedi 11 Avril 2020 TIn= 20.76° TEx= 20.80°
(10:26:08.937) HEUR=09:27:01 Samedi 11 Avril 2020 TIn= 20.76° TEx= 20.80°
(10:26:09.851) Msg=Could be OK Right Now
(10:26:09.900) OK for Msg
(10:26:09.943) HEUR=09:27:02 Could be OK Right Now
(10:26:10.932) HEUR=09:27:03 Could be OK Right Now
(10:26:11.920) HEUR=09:27:04 Could be OK Right Now
(10:26:12.908) HEUR=09:27:05 Could be OK Right Now
(10:26:13.934) HEUR=09:27:06 Could be OK Right Now
(10:26:14.920) HEUR=09:27:07 Could be OK Right Now
(10:26:15.944) HEUR=09:27:08 Could be OK Right Now
(10:26:16.932) HEUR=09:27:09 Could be OK Right Now
(10:26:17.920) HEUR=09:27:10 Could be OK Right Now
(10:26:18.908) HEUR=09:27:11 Could be OK Right Now
(10:26:19.932) HEUR=09:27:12 Could be OK Right Now
(10:26:20.921) HEUR=09:27:13 Could be OK Right Now
(10:26:21.943) HEUR=09:27:14 Could be OK Right Now
(10:26:22.932) HEUR=09:27:15 Could be OK Right Now
(10:26:23.920) HEUR=09:27:16 Could be OK Right Now
(10:26:24.946) HEUR=09:27:17 Could be OK Right Now
(10:26:25.931) HEUR=09:27:18 Could be OK Right Now
(10:26:26.920) HEUR=09:27:19 Could be OK Right Now
(10:26:27.943) HEUR=09:27:20 Could be OK Right Now
(10:26:28.932) HEUR=09:27:21 Could be OK Right Now
(10:26:29.922) HEUR=09:27:22 Could be OK Right Now
(10:26:30.945) HEUR=09:27:23 Could be OK Right Now
(10:26:31.931) HEUR=09:27:24 Could be OK Right Now
(10:26:34.953) HEUR=09:27:27 Samedi 11 Avril 2020 TIn= 20.76° TEx= 20.80°
(10:26:35.010) HEUR=09:27:27 Samedi 11 Avril 2020 TIn= 20.76° TEx= 20.80°
(10:26:35.060) HEUR=09:27:27 Samedi 11 Avril 2020 TIn= 20.76° TEx= 20.80°

* La durée d'affichage dépend du nombre de REPétitions..

CORRECTIONS mesures de Temperatures ;

10/04/2020
Rajout de 2 commandes (clavier terminal ou BlueTooth.)
CORRECTEUR de mesures sur les 2 capteurs OWS DS18B20
gamme de correction limitée à +-3°C , introduite en 1/100em de degré
une commande distincte par capteur
COR1=xxx avec -300 < xxx < +300
COR2=xxx avec -300 < xxx < +300
la saisie est verifiée/blindée pour etre acceptée.
exemple :
COR1=+050 , rajoute 0,50°C sur la mesure A
COR2=-075 , retranche 0,75° C sur la mesure B

Modif de la convertion ascii representant la mesure , pour pouvoir ajouter ou retrancher cette correction
Etait auparavant traitée en Flottant .. plus lourd et plus lent !
En entrée :
La valeur de base du capteur étant exprimé en 1/0,0625 em de degré
est contenue dans tempA

tempLA = Ow_Read(OWS_Pin_Sensor_A);
tempA = (Ow_Read(OWS_Pin_Sensor_A) << 8) + tempLA ;
kS= (tempA*100)>>4; // * 0.0625
kS=kS+COR1;
IntToStr(kS,&Temp_DS18B20_A[0]);
*(Temp_DS18B20_A+7)=0;
*(Temp_DS18B20_A+6)=*(Temp_DS18B20_A+5) ;
*(Temp_DS18B20_A+5)=*(Temp_DS18B20_A+4);
*(Temp_DS18B20_A+4)='.' ;

en sortie :
la mesure A corrigée est en ascii dans Temp_DS18B20_A

de meme pour la 2em sonde
en entree : tempB
avec correcteur COR2 !
en sorie : la mesure B corrigée est en ascii dans Temp_DS18B20_B

Accelaration de la vitesse de boucle principale du programme :
en reduisnat le processus de mesure, les 2 mesures sont faites en alternance
soit A, soit B , suivant que le tour de boucle est PAIR ou IMPAIR.
Une mesure traitée prend ~10mS ( les 2 en une seule fois prendrait 20mS !)
Ce n'est pas critique du tout pour une temperature !

La procedure Update _Trame, raffraichit l'affichage en temps quasi reel , au maximum
de vitesse de la boucle principale
les 2 mesures de temperatures y sont intégrées, à la suite des autres infos time/jour/date
avec la particularité du caractere special regroupant °C sur 1 matrice 8x8 au lieu de ° (en ascii)
La traversée des 12 afficheurs se fait en moins de 4sec , Le message de 52caracteres circule en ~17sec
avec Speed=15;

HEUR=17:55:11 Vendredi 10 Avril 2020 TIn= 22.43° TEx= 23.61°
COR2=-050
Cde: COR2=-050
Old = COR2=-001
New CORF:COR2=-050
HEUR=17:55:12 Vendredi 10 Avril 2020 TIn= 22.43°
TEx= 23.61°
HEUR=17:55:13 Vendredi 10 Avril 2020 TIn= 22.43°
TEx= 23.61°
HEUR=17:55:14 Vendredi 10 Avril 2020 TIn= 22.43°
TEx= 23.12°

la mesure est bien corrigée ... 23.61-23.12= 0,.50°C !

Nota : le retard observé est expliqué plus haut, alternance des mesures ..



SOFTWARE Part#1
Derniere MAJ Projet MikroC : 09/05/2020

Projet zipé: Horloge_2020_defil_12matrices_8x8_H_96bits_asm_18F26K22_2xOWS_200509.zip
Chargeur : Horloge_2020_Defil_12_Matrice8x8_H_96bits_18F26K22_200509.hex
Source : Horloge_2020_defil_12_Matrices_8x8_96bits_18F26K22_2xOWS_200509.c
Fonte : THIN_SS_2020.h
Eeprom : Horloge_2020_Defil_12_Matrice8x8_H_96bits_18F26K22_200509_EEPROM.ihex
Lib RTC : Tiny_RTC_DS3231_for_AI2_2020_05.mcl
Header RTC : Tiny_RTC_DS3231_for_AI2_2020_05.h

Used RAM (bytes): 1641 (42%) Free RAM (bytes): 2234 (58%)
Used ROM (bytes): 40824 (62%) Free ROM (bytes): 24712 (38%)


Log séquence de démarrage sur Terminal :




Rappel sur configuration du Terminal YAT

fichier de config Terminal_Horloge_2020.yat

../common/t_YAT_Terminal_Setting_2020.gi

Espionnage de la conversation entre PIC et Appli Android
via 2 terminaux sur l' UART PIC
Le terminal à gauche voi les trames emises par le PIC --> vers l'appli Android
Le terminal à droite : voit les commandes envoyées <--- par l'appli Android

images/t_Espion_dialogue_BT.gif


Videos:

Horlog_defil_12matrices_200411.webm




Application Appinventor2 pour controle d'afichage défilant 12 matrices
18/04/2020

  
  Schema Blocks
rev 27/04/2020
Lien sur Appinventor2


images/t_Blocks_Horlog_Defil_12matr_H_2020_04_27.gif



    Vue Designer & vues Photo (realité)
rev 19/04

images/t_Designer_Horlog_Defil_12matr_H_2020_04_27_Phone.gif images/t_Photo_Horlog_Defil_12matr_H_2020_04_18_Tablette_mode_V.gif images/t_Photo_Horlog_Defil_12matr_H_2020_04_18_Tablette_mode_H.gif
Appinventor2 Designer Capture ecran Tablette V Capture Ecran Tablette en position Horizontale


Utilisation de MITAI2Companion.apk installé sur ma tabllette Lenovo TAB3 7 Essential
taille 7" ecran 600x1024 pixels ,
Android version 5.0.1 , API level 21
Transfert Appli coté PC -> vers Tablette via capture d'un QRCODE affiché coté PC
Modif . possibles en temps reel

Sur Startrail7
avec Android 5.1
Taille écran 480x 854

faire glisser l'ecran pour voir le bas et la zone saisie du message

  images/t_Capture_Stratrail7_200427.gif
   



    
fichier Projet Aia
Horloge_12_Matrices_H_18F26K22_200427.aia

Software PIC :
*modification coté application PIC (en C) pour rajouter un séparateur de champs: ';'
permettant d'isoler FACILEMENT les 2 mesures de temperatures
dans Update trame, mais remplacé ensuite par ' ' pour l'affichage défilant .
voir Mise à jour software partie PIC..
L'envoi de la trame PIC vers l'appli Android a été limitée : envoi modulo 10 sec
HEUR=18:01:20;Dimanche 19 Avril 2020;TIn= 22.57°;TEx= 22.55°;
HEUR=18:01:30;Dimanche 19 Avril 2020;TIn= 22.57°;TEx= 22.61°;

Sinon entre ces envois modulo 10sec ,
j'envoie la valeur d'un compteur de boucle programme : Tour , et du nombre d'erreur RX UART Cpt_Erreurs
ce compteur étant l'image de la qualité des echanges UART à 115200 bauds .

Dans le cas specifique ou on veut afficher un message , la trame HEUR n'est plus envoyée
car ne comporte plus les 2 champs de mesures de temperatures séparées par un ";" ,
ce qui générait une erreur (coté android) à cause du 3em champ ..absent
avec une trame de ce type HEUR=15:01:50; mon message qui s'affiche

Trame envoyée via BlueTooth
pA=pM+k;
*(pA)='2';
*(pA+1)='0';
*(pA+2)=*(date+6);
*(pA+3)=*(date+7);
*(pA+4)=';'; //was 32 , Mise en place separateur de champ
pI=pA+5;
strConstRamCpy(pI,"TIn=");
k=strlen(Temp_DS18B20_A)-1;
pI=pI+4;
strncpy(pI,Temp_DS18B20_A+1,k); // temperature RTC ex: +23.25
pI=pI+k;
*(pI)=176; //'°'; // code 176 = 0x7F °C au centre
*(pI+1)=';';//was 32

pE=pI+2;
strConstRamCpy(pE,"TEx=");
k=strlen(Temp_DS18B20_B)-1; // saute le 1er blanc ou Signe ???
pE=pE+4;
strncpy(pE,Temp_DS18B20_B+1,k); // temperature RTC ex: +23.25
pE=pE+k;
*(pE)=176; //'°'; // code 176 0x7F °C au centre
*(pE+1)=';'; //was 32

Pour l'affichage sur les 12 matrices
void remplis_buffer_with_string(char *pp)
{
int ix,j,k,m;
unsigned char c1,cx;
unsigned char *Dp;
Dp=OFFSET;
j=0;
m=0;
for (j=0;j<12;j++)
{
c1=*(pp+j);
if (c1==';') c1=' '; // remise en place Blanc separateur 17-04-2020
if (c1=='°') // code ° =176 134 ?
{
for (ix=0;ix<8;ix++)
{
cx= Lettre_Degre_C[ix];
m= (j*8 )+ ix;
*(Dp+m)=cx;
}
}
else
{
k=c1*8;
for (ix=0;ix<8;ix++)
{
cx= fonte_8x8_H[k+ix];
m= (j*8 )+ ix;
*(Dp+m)=cx;
}
}
}
}
* MAJ RTC par l'appli android
La RTC dS3231 gere le jour de 1 à 7 (dimanche=7)
L'appli Android gere le jour de semaine de Dimanche=1 à Samedi=7
donc rajout d'une liste de transcodage pour faire correspondre le jour RTC et le jour Appinventor
la chaine de commande U#JJ;MM;AA;HH;MM;DD;#<CR> est reconstituée avec l'heure et date d ela tablette

images/t_New_Block_MAJ_RTC_2020_04_18.gif

nota: en RFO Basic ...Dimanche=0 !!!

Bloc Reception et traitement TRame PIC

petite modif ici :

images/t_Block_Proc_Get_TRame_Block_200419.gif images/t_Block_Proc_Get_TRame_200427.gif
avant apres


la trame envoyée par le PIC via bluetooth est de longueur variable ( because nom du jour et nom du mois !)
Ce qui explique e rajout de séparateur ';', coté appli PIC , uniquement pour la trame envoyée par BlueTooth, ce séparateur permet d'isoler facilement les 2 Champs Mesures de Temperatures ( TIN et TEx)
Le Test sur le debut de TRAME immuable HEUR= , permet de ne pas tenir compte des comptes-rendus
effectuées par le PIC, quand il reçoit des commandes de modification parametres.
*Modif du 27/04 coté application PIC
Pas de message HEUR=.... envoyé pendant la durée d'un envoi en mode "affichage Message"
générait une erreur (Android) sur le comptage d'index ,lié à la detection du ";"


Modif pour l'envoi de CR ou autre caracteres speciaux

Usage de mon anayser IKALOGIC SQ50 pour mettre ceci en evidence .. cause de non réponse à interruption UART
D'autres interruptions pouvant survenir entre le debut de capture et la fin detecté par le caractere CR
Ce probleme ne peut pas etre détecté avec un simple terminal !!

images/t_SQA_Envoi_String_with_CR_delayed.gif images/t_SQA_Envoi_String_with_CR_a.gif
1) methode avec envoy séparé du code CR=13 2) Methode avec preparation envoi incluant \n = code CR

on peut remarquer un delay variable de 11 à 17mS entre l'envoi de la chaine de caractere et l'envoi du CR
La 2me methode est donc nettement plus préférable .. ce delai supplementaire (Methode 1) pouvant etre prohibitoire


Verification des commandes Appli Android

au 27/04

Reception Trame Ok * avec séparateur ";" et test sur debut HEUR=
Slider LUM Ok le minima est 0 , maxima limité à 10 ( au lieu de 15)
Slide SPEED Ok minima 5 , maxima 50
Slider REP Ok minima 5, maxima 30
double slider pour PLM Ok reglage Plage Luminosité Minimale
touche MAJ RTC Ok envoi la date /heure Tablette à la RTC du PIC
touche HELP Ok liste les commandes possible
Envoi d'un Message Ok ecrire le message dans le champ texte en bas, pusi appi sur touche envoi MSG
Affichage des 2 temperatures Ok lié au traitement reception trame


pour cela, je ne connecte que la liaison TX HC05 ---> RX UART PIC pour que le PIC recoive les commandes
la Liaison UART TX est envoyé sur RX HC05 ET sur le terminal YAT ( pour pouvoir capturer facilement le resultat)
Resultat terminal :





    fichier Exécutable Application Android *.APK
Compilée/Testée sur Android version 5.1

Horloge_12_Matrices_H_18F26K22_200427.apk

nota: il semblerait préférable de telecharger l'application sur le phone Android , via capture camera du QRCODE généré par Appinventor2 .
Le téléchargement alors est semi-automatique, sans passer par un gestionnaire de fichier .

Application testée OK sur :

StarAdict2 vieux mobile Android version 4.0.4 API level 15
Startrail 7 un peu moins vieux Android version 5.1 API level 22
Tablette Lenovo TAB37 Android version 5.1 API level 21
Phone Geamel Anfdroid version 10 ?


    
Mise en boitier Horloge défilante 12 matrices


Mise en Boite , Horloge défilante 12 matrices


Préparation en Image de synthese (MORAY + POVray)

Virtuelle en 3D

images/t_mise_en_boite_journal_lumineux_12_matrices_191218.gif

Lien vers Raytracing fichiers Moray et MDL


en attente du Plexiglass Gris fumé devant les afficheurs
Photo Réelle (en vrai bois !)

images/t_Montage_Boitier_Horloge_Msg_defil_12matrices_191217b.gif
l'affichage n'est pas encore fixé. Le MCU sera monté sur ma "Base 18F26K22"

Remarque : les afficheurs 8x8 matrices leds sont (heureusement) Montés sur SUPPORT !
ATTENTION : en 2023 j'ai acheté 3 modules de 4 max7129 avec les Afficheurs SOUDES directement sur le circut imprimé !
Comment mettre des vis de fixations dans ce cas de figure, pas d'access aux trous de fixation par le dessus !
dessouder les afficheurs ?

L'ensemble des 12 matrices est incliné à environ 60°.
N'ayant pas trouver de Plexiglass Fumé , j'ai utilisé un "classeur de document " en plastique , pour faire un filtre "fumé"
que j'ai inséré entre le plexiglass transparent de protection (de 4mm) et la face de l'ensemble des 3 Modules de 4Matrices
Un bout de tuyau souple translucide assure la jointure Plexiglass et dessous en bois,
et surtout permet le maintien du filtre plastique fumé entre les matrices et le plexiglass.
....il manque le bout de tuyau superieur pour la finition ..
La base est en MDF , ainsi que l'arriere et le dessus.
Nota: j'aurais du utiliser une epaisseur de 5mm mini pour la rigidité globale ..
La platine "Base 18F26K22" est coléee au fond, de meme que le module RTC DS3231 et le module BlueTooth HC06
La liaison SPI a été laissée avec une grande longueur de fil à cause de la phase de test avec MCU à l'exterieur
L'alimentation est faite par un bloc secteur externe delivrant 3,3V DC (up to 1,6A)
La sonde DS18B20 est à l'exterieur du boitier.
La mesure Temp.Exterieure ( à l'habitacle) provient d'un montage PIC12F18B20 + DS18B20+ module BT MAITRE
envoyant cette mesure à l'horloge defilante
Nota : La liaison ICSP reste disponible sur 5 Picots de la carte.

images/t_Horlog_defil_12matrice_Mise_en_boite_2020_0618a.gif images/t_Horlog_defil_12matrice_Mise_en_boite_2020_0618.gif
Interieur hotloge defilante detail de montage


Video :
Horlog_Defil_12_Matrices_H_18F26K22_20200618.webm




Révision Software Mai 2022


but :
Reduire le temps d'attente entre 2 affichages de l'heure ...
*reduction de la longueur d'affichage des libéllés Jours de la semaine, et des mois
*supression de l'année .. on supposera qu'on sait déja en quelle année on vit ...
faut-il rajouter un flag Alzeihmer ? pour l'afficher
*réduction des libéllés Températures : Ti= et Te=message
*reduction du message si Te n'est pas connectée via BlueTooth Te=.Na au lieu de TEx= Nolink
On attend ainsi moins longtemps devant l'horloge si on raté le passage de l'affichage de l'heure.
nota : vitesse de defilement





   



SOFTWARE :

// Pointeurs sur les differentes zones de Data dans la TRame
unsigned char * pT=0;
unsigned char * pJ=0;
unsigned char * pM=0;
unsigned char * pA=0;
unsigned char * pI=0;
unsigned char * pE=0;
unsigned char * pS=0;
unsigned char * pD=0;

de nombreux pointeurs sont utilisés ici, pour positionner les variables dans le message / Trame complet à afficher
puis le tout est chainé ..
Ce qui permet plus de facilités pour d'eventuelles modifications.
Attention donc à leur affectation et calculs effectués pour cela
voir : void UpDate_Trame(void)

Un message Quelconque (<63 chars de long) peut etre répété Rep=xx fois ..Je n'ai pas prevu de le laisser permanent
..mais ce serait possible en faisant un test sur la valeur xx ex: si xx>50 = Permanent


Projet zipé
:
_Horloge_12matrices_H_8x8_defilt_96bits_asm_18F26K22_2022-05.zip
Horloge_2020_defil_12_Matrices_8x8_96bits_18F26K22_1xOWS_HC05_RN41_2022_0518.c
Horloge_2020_Defil_12_Matrice8x8_H_96bits_DS3231_DS18B20_HC05_18F26K22_RN41_2022-05.hex
rappel:
La temperature externe est donnéee par une sonde DS18B20 connectée à un PIC12F1840, info en ascii,
envoyée ensuite via un module RN41 Maitre Bluetooth
la mesure doit etre au format TEx=+19.85<CR> (10 chars ) dont 4 digits numeriques
ou si Tex<10°C un blanc + 3 digit num ex: TEx=- 2.78 ou TEx= -02.78

Video :
Horloge_12matrices_H_2022-05.webm
dans cette video j'ai utilisé le terminal YAT + cle USB/bluetooth pour envoyer
une simulation de temperature Externe TE et aussi le message à afficher .






lien sur Partie #2

Lien sur Horloge 1 2matrice 2023 ( 18F27K42 MPLABX XC8)


paulfjujo@free.fr


Retour à l'index general