version 0.0
... 27/04/2019
rev ..18/11/2019
Test Anneau
de 60 leds WS2812 , commande via protocole specifique 1
fil !
Horloge
4 Matrice 8x8 pour HH:MM et Anneau 60 leds pour secondes
(18F26K22)
Symetrisation
Affichage Horloge
Schéma
Montage
Mecanique V1 (20/06/2019)
Version
2 : pour 18F27K42 (31/10/2019)
Montage
Mecanique V2 (17/112019)
annexes:
Mesure
de la durée d' Execution d'une Fonction ou sous
programme
Test
Anneau 60 Leds WS2812 avec PIC 18F26K22
Usage d'un PIC18F26K22 PDIP 28 pins et du Pickit3
Microchip pour charger l'executable
*un PIC12F1840 DIP 8 serait suffisant ...
Environnemen t: Mikro C V 7.30
MCU : FOSC interne 16x4=64MHz
ANNEAU 60 leds
exemple de fournisseur : modele 60leds : 12,07
Brand Name : XUNATA
LED Chip Brand : Epistar
Model Number:WS2812 LED Chip
LED Chip Model:SMD5050
Voltage : 5V
Interface: VCC,GND,DIN,DOUT
Diametre externe 170mm ( 155mm interne)
datasheet WS2812
Intelligent control LED integrated light source
La lecture de cette datasheet est INDISPENSABLE pour
comprendre le fonctionnement ASYNCHRONE de
la liaison pour commander ce composant.
( Traduction partielle)
le circuit de controle RGB (Rouge Vert Bleu) est
intégré dansle boitier et formme un controle comple de
pixell.
Un circuit interne de remise en forme apres chaque
element permet de ne pas accumuler les erreurs.
Un circuit interne de RESET et perte d'alimentation est
inclus .
Chaque pixel des 3 couleurs elementaires RGB peunet avoir
256 niveaux d'amplitude , pouvant ainsi definir 6777216
couleurs
La frequence de rafraichissement doit etre > 400KHz.
Une sortie permet de monter les elements (aneaux) en
cascade , pour une transmission unifilaire ... jusqu'à L=5M
On peut avoir un rafraichissement jusqu'à 30Frame/sec
jusqu'à 512 leds en cascade.
Les data sont envoyée à 800 Kbps.
Caracteristique LED :
nM |
mCd |
mA |
volt |
|
Rouge |
620-630 |
550-700 |
20 |
1.8-2.2 |
Vert |
515-530 |
1100-1400 |
20 |
3.0-3.2 |
Bleu |
465-475 |
200-400 |
20 |
3.0-3.4 |
WS2812
Operation frequency Fosc2 800
KHz
transmission data rate mini 400Kbps
Data transfer time( TH+TL=1.25µs±600ns)
T0H 0 code ,high voltage time 0.35us ±150ns
T1H 1 code ,high voltage time 0.7us ±150ns
T0L 0 code , low voltage time 0.8us ±150ns
T1L 1 code ,low voltage time 0.6us ±150ns
RES low voltage time Above 50µs
1 bit de commande => necessite 1 byte
3 bytes pour GRB valeur
donc 3 x 8 = 24 bits de commande
60 leds * 3 bytes couleur GRB => 180 bytes
180 x 8 bits de commandes => 1440 bytes pour
piloter 60 leds RGB
MCU à 64 MHz ==> 62.5nS par cycle = 1 NOP
un bit de commande doit avoir une periode comprise entre
1,2µS +- 600nS
soit de 600nS à 1800 ns ( en therorie)
recommandé 1,2 à 1,4µS maxi
avec ajustage du nombre de NOP dans ZEROS et ONES
Zero = 380ns ON + 860nS OFF soit T= 1260 nS
UN= 620ns ON + 640nS OFF soit T= 1260 nS
Anneau_60_leds_RGB_SPI_Hardw_Test_190408.c
sequence de test :
SQA=1;
ZEROS();ZEROS();ZEROS();ZEROS();ONES();ONES();ONES();ONES();
// VERT
SQA=0;
ZEROS();ZEROS(); ZEROS();ZEROS();ZEROS();ZEROS();ZEROS();ZEROS()
; // ROUGE
SQA=1;
ZEROS();ZEROS(); ZEROS();ZEROS();ZEROS();ZEROS();ZEROS();ZEROS()
; // BLEU
SQA=0;
allume la 1ere led en VERT !
Partie ASM pour generatioon d'un bit de commande
unsigned char LATCx absolute 0x0F8B;
void ONES ()
{
_asm {
BSF _LATCx,5;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
BCF _LATCx,5;
NOP;
NOP;
NOP;
NOP;
NOP;
}
}
Analyse signal avec IKAlogig SQA50 analyser
le timing est respecté ..(
precision du NOP =62.5nS avec reglage fin de +-3%
possible avec valeur du registre OSCTUNE )
L'extinction de l'anneau se fait en envoyant 1440 bytes
à ZERO
L'index pointeur de led est remis à zero si Dout à
zéro pendant > 50µS
la boucle principale :
// index led = 0
DOut=0;
Delay_us(100);
for (j=0;j<NB_LEDS;j++)
{
DOut=0;
Delay_us(100);
for (k=0;k<j;k++)
{ SQA=1;
ZEROS();ZEROS(); ZEROS();ZEROS();ZEROS();ZEROS();ZEROS();ZEROS();
ONES(); ONES(); ONES(); ONES(); ONES(); ONES(); ONES(); ONES(); // ROUGE
ZEROS();ZEROS(); ZEROS();ZEROS();ZEROS();ZEROS();ZEROS();ZEROS();
SQA=0;
}
//Delay_1sec();
Delay_ms(100);
UART1_Write_CText(" time is ");
WordToStr(j,CRam1);
UART1_Write_Text(CRam1);
CRLF1();
}
Delay_1sec(); Delay_1sec(); Delay_1sec(); Delay_1sec();
UART1_Write_CText(" RAZ anneau \r\n" );
for (j=0;j<1440;j++)
{
ZEROS();
}
UART1_Write_CText(" fin \r\n");
Schema de test :
Usage de la platine BASE TEST 18F26K22
DOut RC5 est relié à DIN anneau Leds ( et bien sur le +5V et Le Gnd 0V)
Liaison UART<-> Terminal PC via cordon Prolific USB/TTL
Liaison RC0 pour synchro analyser SQA
SOFTWARE :
projet mikroC : TEST_Anneau_60leds_RGB_18F26K22.zip
exec : Anneau_60leds_cde_bit_bang_18F26K22.hex
main source : Anneau_60_leds_RGB_Bit_bang_Hardw_Test_190408.c
Video :
Anneau_60leds_Test_190408.webm
Horloge 4 xMatrice 8x8 et Anneau 60 leds
Cette horloge est commandée suelement par 4 fils ( hors alimentation !)
3 fils en SPI pour les 4 MAX7219 pilotant les 4 matrices de leds 8x8
1 fil protocole seriel WS2812 pour l'anneau circulaire de 60 leds RGB
HARDWARE :
Base 18F26K22 , MCU et annexes, description ICI
Horloge RTC DS3231 delivrant Sec,Min,Heures et synchro 1HZ pour l'avance des leds anneau RGB
le bloc de 4 matrice 8x8 avec MAX7219
L'Anneau equipé de ses 60 leds RGB WS2812 , montées sur un circuit imprimé avec liaison 3 fils
le report de bus (DOUT) WS2812 n'est pas utilisé ici .
une alim 5V USB 2A + regulateur à decoupage pour reglage de l'Alim. entre 3,3V et 4,3V
Schéma de base :
Nota :
vu le nombre de connections actives utilisées :
1 pour l'anneau 60 leds et 4 pour les matrices, ce schema n'est pas personalisé
HARDWARE :
Il faut faire cohabiter plusieurs liaisons (Soft):
* SPI bit bang (MAX7219)
* SPI (bit bang) pour WS2812
* 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)
Modif. de la font 8x8 :
usage de PixelFontEdit-2.7.zip
pour ajuster les caracteres 0 à 9 , resultat dans My_8X8_FONT_190422.h
séparateur special pour HH:MM, point special pour decimal temperature t rajout caractere special °C,
// separateur HH et MM
static unsigned char Lettre_Sep[8]={
0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, // Char 221 (.)
};
static unsigned char Lettre_Point[8]={
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, // Char 251 (.)
};
static unsigned char Lettre_Degre_C[8]={
0xE0, 0xA0, 0xEF, 0x08, 0x08, 0x08, 0x08, 0x0F, // Char 127 (.)
};
le logicilel Pixel font edit : https://www.min.at/prinz/o/software/pixelfont/
La moitié de la font est conservée (1024 bytes au lieu de 2048 !) caracteres de 0 à 127
et les 3 caracateres specifiques sont definis à part (3x8=24 bytes), donc 1000 bytes gagnés ..
note 1 : la fonte aurait pu etre stockée en Eeprom ou Flash , mais acces plus lent .
note 2: De meme On ne pourrait utiliser que les chiffres de 0 à 9 + les 3 caracteres speciaux .
.mais reserve pour affichage Date ,jour,mois en clair ..plus tard ... De plus on a beaucoup de RAM dans ce PIC
Software :
Reprise des elements software déja utilisés pour Test Matrice et test Anneau
L'Avancement des leds secondes se fait en effacant tout et retracant le nb de led jusqu'à la seconde en cours.
Le signal 1HZ emis par la RTC DS3231 rentre sur RB0 entree interruption du MCU
L'interruption 1Hz , soit 1 sec , leve un drapeau , permettant de bloquer le deroulement du programme
en fin d'execution de la boucle principale, pour assurer le synchronisme d'allumage Anneau secondes
Un caractere "separateur" de 4 leds est mixé avec le digit des Heures, toutes les 2 secondes, pour justement
séparer les infos HH: MM.
La detection Seconde=0 , active la RAZ complete de l'Anneau et reinitialise le compteur d'avancement secondes (js)
A chaque tour de boucle principale (à chaque seconde!) on change le mode d'affichage RGB choix 1parmi 5 modes pre-établis.
Dans le cas present on alterne les couleurs.
Nota: la luminosité des leds est TRES IMPORTANTE
le reglage actuel est au minima 1/8em
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 .
SOFTWARE
Projet MikroC : Horloge_Anneau_60leds_190427.zip
Chargeur : Horloge_4_Matrice8x8_Anneau_60leds_RGB_190427.hex
Source : Horloge_4_Matrice8x8_Anneau_60leds_RGB_190428.c
Fonte : CP112_degre.h
lib RTC :
Tiny_RTC_DS3231_for_AI2_1904.h
Tiny_RTC_DS3231_for_AI2_1904.mcl
Videos:
Anneau_60leds_Test_190408.webm
Horloge_Matrice_Anneau_190427.webm
rev 01/05/2019
Suite à une remarque concernant la dissymetrie d'affichage, modif du programme :
usage de 2 ensemble de caracteres pour chifres centré à gauche et chiffres centrés à droite ,en matrice de 5x8 au lieu de 6x8
idem pour le separateur entre HH et MM , et le point decimal temperature
qui sont répartis à gauche et à droite de l'axe median
MAJ software
Horloge_4_Matrices_Anneau_60leds_1905.zip
Horloge_4_Matrice8x8_Anneau_60leds_RGB_190501.c
Video
Horloge_4_Matrice_et_Anneau_60leds_190501.webm
Mise en Boite :
Image de synthese (en Raytracing : Moray+PovRay)
Montage Mecanique
Usage d'un cadre photo ( Action ) avec vitre pour contenir l'anneau et la matrice ,
Une contre plaque vissée sur le cadre photo
et un vieux support de cadre photo , servant aussi de protection du montage , qui est fixé
sur la contre plaque, via des entretoises .
Rajout d'un film translucide juste derriere la vitre , pour diffuser la lumiere (trop percutante) des leds RGB, ceci, meme au mini de puissance.
20/06/2019
connection 4 matrices 8x8leds
Pin 13 RC2 -- Violet-> SPI Clock -> 5 Matrices 4xMAX7219
Pin 12 RC1 -- Vert --> SPI Dout --> 3 Matrices 4xMAX7219
Pin 11 RC0 -- Bleu---> CS ------> 4 Matrices 4xMAX7219
GND -------------------------------> 2 Matrices 4xMAX7219
VCC -------------------------------> 1 Matrices 4xMAX7219
Liaisons au module BlueTooth HC06
Pin 18 RC7 RX UART ---> TX HC06 or <-- Keyboard fil Vert cable prolific
Pin 17 RC6 TX UART ---> RX HC06 or --> Display fil Blanc cable prolific
VCC ------------------------> HC06
Gnd -------------------------> HC06
Liaisons capteur OWS DS18B20
Pin 2 RA0 <---- OWS input pour DS18B20
VCC ------------------------>DS18B20
Gnd ------------------------->DS18B20
Liaisons RTC DS3231
Gnd ---------------------Noir ----- 1 RTC
VCC --------------------Orange--- 2 RTC
Pin 15 RC4 SDA I2C ---- Jaune --- 3 RTC
Pin 14 RC3 SCL I2C ---- Bleu ---- 4 RTC
Pin 21 RB0 <----- ------- Jaune --- 5 RTC // top 1Hz
Connecteur ICSP ..à disposition
mode 1 (par defaut) couleur change chaque seconde vue ARRiere avec bequille de maintien vue de dessus : hardware en sandwich Bequille Arriere recupérée sur un autre support cadre photo ( un peu juste en largeur ,pour les fixation,mais OK avec des rondelles)
Celle ci est fixée par un rajout d'entretoise , vissées sur les 4 fixations de la carte electronique
Via blueTooth ,
possibilité de remettre à l'heure la RTC , ou changer le mode 1 ou mode 2 pour les leds
remise à l'heure, exemple pour 20 juin 2019 18H33 jour N° 4 (Jeudi) : U;20;06;19;18;33;04;# <CR>
Mode 1 : M=1<CR> La couleur change à chaque seconde , 5 couleurs , Led Violet vif pour les valeurs 5,10,15 ... 55
Mode 2 : M=2<CR> la couleur des leds change à chauque minute
SOFTWARE :
Cette appli n'utilise pas de quartz pour stabiliser la frequence , mais l'oscillateur interne du MCU est quand meme assez stable,
vu que je n'ai rencontré AUCUN probleme avec le terminal à 19200 bds (est meme OK à 115200 bds)
Encore une fois, l'analyser logique a été tres utile pour arriver à faire fonctionner cet anneau led qui ne comporte pas de Synchro !
Reglage OK par pas de 62,5nS = 1 NOP = 1cycle avec FOSC=64 MHz ( 16Mhz de base x PLL 4 fois)
Fonctionne OK pour toute la plage de reglage de OSCTUNE , soit +-3% de FOSC nominal .
Usage d'une sortie annexe du MCU pour assurer la synchro de capture du signal DOut ( qui va sur DIN de l'anneau leds).
Utilisation de matrice caractere de 8x8, mais caractere re-defini en 5x8 .pour pouvoir etre décalé à Gauche ou à Droite
les 2 tables de caracteres 0 à 9 GAUCHE et DROITE sont conservées, pour symetriser l'affichage.
Le deroulement de la boucle principale du programme se fait sur la synchro de la sortie SQWE 1HZ de la RTC.Config. Analyser : SCANA_Test_ZEROS.scana
Une RAZ anneau necessite l'envoi de 1440 bytes ! ou pseudo bits.
Remarque :
j'ai perdu beaucoup de temps sur cette version n à cause d'une bevue
en commençant la sequence du pseudo bit ZERO , en mettant BCF .. mise à zero du bit , au lieu de le mettre à 1 !
mauvais reflexe !
le pseudo bit ZERO et UN, commencent tous les 2 , par une mise à 1 de la sortie DOut.
Version 2 , avec PIC18F27K42
En Résumé:Flash Program Memory Size (KB) 128Ko
CPU Speed (MIPS/DMIPS) 16
SRAM Bytes 8,192
Data EEPROM/HEF (bytes) 1024
Digital Communication Peripherals 2-UART, 1-SPI, 2-I2C
Capture/Compare/PWM Peripherals 4 CCP,
Timers 3 x 8-bit, 4 x 16-bit
ADC Input 24 ch, 12-bit
Number of Comparators 2
Temperature Range (C) -40 to 125
Operating Voltage Range (V) 1.8 to 5.5
Pin Count 28
config Bits
Projet zippé : _Horloge_Anneau_60leds_18F27K42_190620.zip
Executable : Horloge_PIC18F27K42_Anneau_60leds_4_Matrices_Max7219_190620.hex
Attention : Necessite Pickit 4 et MPLABX IPE V1.5
Presentation :
Directory :C:\_MikroC\_MesProjets_MikroC\Horloge_Anneau_60leds_18F27K42
MikroC pro 7.30 Beta
Projet :Horloge_PIC18F27K42_Anneau_60leds_4_Matrices_Max7219_1906.mcppi
Test PIC18F27K42 I2C1 HW
Config bit : P18F27K42_Fosc_Interne_64Mhz.cfgsch FOSC:64.0 MHz
Source : Horloge_PIC18F27K42_Anneau_60leds_4_Matrices_Max7219_190619.c
Test Sonde OWS DS18B20
Family Code : 28 ID1= AA0F05411401 CRC= 70
Mesure DS18B20= 26.37°C
Init I2C1 HW RC3=SCL RC4=SDA
Init RTC DS3231
Active sortie SQW=1Hz:
RTC_Forcée= 1
Re-Lecture RTC
18 06 19 03 19 45 06
18 06 19 03 19 45 07
18 06 19 03 19 45 08
18 06 19 03 19 45 09
Temperature interne DS3231 = 28.00°C
Bit Bang Soft SPI RC2=Clk ,RC1=Dout RC0=CS -> MAx7219:
Test interrupt Timer1 20 x 100 msec soit 2sec
Test Wait_Keyb -> Timeout or char received
#
... Waiting Keyboard Touch for <100 x 25mS >
?
Init Interrupt RB0, synchro 1Hz RTC
Init Interrupt UART RX
19-06-18 19:45:14 Temp DS3231= 28.00°C ;26.25°C
19-06-18 19:45:14 Temp DS3231= 28.00°C ;26.25°C
19-06-18 19:45:15 Temp DS3231= 28.00°C ;26.25°C
19-06-18 19:45:16 Temp DS3231= 28.00°C ;26.25°C
Modification :
Nouvelles matrices NON conformes aux premieres reçues !
Le sens de commande est inversé ..!!!
Contre Mesure pour adapter la nouvelle vesion de matrice :
// 2em horloge
// avec nouveaux modules
// 4 x MAX7219+Matrice_8x8 à connections HORIZONTALES MAIS Reverse Matrice !!!
// ligne ci dessous en commentaire , donc => matrice INVERSE
// #define Direct_Matrice // matrice H de la precedente commande
void SPI_Write_To_4x7219(Byte adr, Byte d1, Byte d2,Byte d3, Byte d4)
{ SPI_CS = 0;
Delay_us(15);
#ifdef Direct_Matrice
SPI_WRITE_Byte(adr); SPI_WRITE_Byte(d1);
SPI_WRITE_Byte(adr); SPI_WRITE_Byte(d2);
SPI_WRITE_Byte(adr); SPI_WRITE_Byte(d3);
SPI_WRITE_Byte(adr); SPI_WRITE_Byte(d4);
#else
SPI_WRITE_Byte(adr); SPI_WRITE_Byte(d4);
SPI_WRITE_Byte(adr); SPI_WRITE_Byte(d3);
SPI_WRITE_Byte(adr); SPI_WRITE_Byte(d2);
SPI_WRITE_Byte(adr); SPI_WRITE_Byte(d1);
#endif
Delay_us(10);
SPI_CS = 1;
}
Remet l'affichage dans le bon sens !..OK
Ajout Plage Horaire où la Luminosité affichage Matrices 8x8 est réduite au minimum possible
La tension d'alim. est déja réduite à 3,6V
Via la liaison UART (ou via BlueTooth) la commande Plage Luminosité Minimale ,
PLM=Heure Debut de plage: Heure Fin de plage
2 digits pour former l'heure , Debut doit etre > 17 et FIN doit etre inferieur à 9
exemple de commande : PLM=18:05
Luminosité normale entre 06H00...17H00 puis reduite de 18H00 à 05H00
Code pour verifier le contenu de la commande reçue:
et la commutation du niveau de luminosité f ( Heure)
* Nota: Le reglage de la plage horaire (si OK !) est sauvegardé en EEPROM
Bug MikroC concernant 'EEPROM du PIC18F27K42
dans le fichier *.iHex, crée sous mikroC, remplacer MANUELLEMENT la 1ere ligne par :::
NEW adresse :020000040031C9
Ajout commande Help
liste les commandes dispo:
Help
Mode=1 couleur à chaque Minute
Mode=2 couleur alterné chaque seconde
RTC mise à jour :
U;30;10;19;21;32;03;#<CR>
Plage Lumisosite Minimum des Matrices :
PLM=18:06 entre 18H00 et 06H00
Software :
avec MikroC 7.70
Projet : Horloge_V2_18F27K42_Anneau_60leds_4_Reverse_Matrices_Max7219_191117.zip
Horloge_V2_18F27K42_Anneau_60leds_4_Reverse_Matrices_Max7219_191116.hex
Tiny_RTC_DS3231_HARDW_I2C1_for_K42_1910.mcl
EEPROM : Horloge_PIC18F27K42_Anneau_60leds_4_Reverse_Matrices_Max7219_191031.ihex
caracteres : font_8x8_H8.h
RTC : Tiny_RTC_DS3231_HARDW_I2C1_for_K42_1910.h
source : Horloge_V2_18F27K42_8_Reverse_Matrices_Max7219_Horiz_191116.c
MONTAGE MECANIQUE, et Assemblage
L'Anneau (4/4) 4x15 leds RGB
Matrice 8x8 avec MAX7219
(inversée!)
d'où le raccordement à droite ! ( à gauche sur la version 1 Horloge )
vue arriere avec plastron de protection / support vue de Dessus, plastron monté sur les 4 entretoises OK, c'est pas en IP54 ! mais on a que du 5V DC maxi qui traine , de plus ça respire sans probleme.
Quasiment pas d'auto echauffement du capteur de temperature air ambiant .
Résultat :
On observe un ecart de 0,2°C entre les 2 capteurs DS18B20 .. c'est pas si mal que ça!
Clik sur l'image => agrandie, et vue en mode Horloge
J'ai mis une protection arriere , qui sert aussi à maintenir l'horloge , debout , sur table.
L'alimentation de la V2, se fait via un bloc secteur/5V USB --> cable --module regulateur LM2596
Celle de la V1, en 5V direct => trop de luminosité !
=> je vais intercaler un regulateur de tension pour abaisser la tension d'alim. à 3,3V
Video :
Horloge_Anneau_60leds_V2_191117.webm
A suivre :
rajout affichage Date , avec affichage glissant ?
Ce serait mieux avec 6 Matrices ( 6 digits) minimum
mais ,Toujours bloqué avec mon affichage glissant sur 8 à 12 matrices à connections Horizontales....
Mesure de la durée d' Execution d'une Fonction ou sous programme
Exemple : l'operation RAZ anneau 60 leds :
la fonction :
L'outil : Le Timer3 , est utilié simplement comme compteur HARDWARE
declenché juste AVANT l'appel de la fonction ....et arreté juste APRES
la lecture , écart de comptage , renseigne sur la duree écoulé, en nombre de cycles .
void Init_Timer3()
{
// Fosc=64Mhz
//Prescaler 1:8; TMR3 Preload = 5536; Actual Interrupt Time : 30 ms
T3CON = 0x31;
TMR3ON_bit=0; // STOP
TMR3IF_bit = 0;
TMR3H = 0x00;
TMR3L = 0x00;
TMR3IE_bit = 0; // no interrupt
}
On peut aussi , mesurer uniquement la partie effective de la RAZ
sans la partie RESET pointeur led , qui prend 900µS en amont et 1000µS en aval
en mettant le depart et l'arret timer3 , dans la partie RAZ , envoi des 1440 bytes
La methode d'utilisation :
Arreter ,si necessaire, toute source d'interruption pouvant modifier la mesure de durée..
unsigned long val3;
.......
void main()
....
CRLF1();
//UART1_Write_CText("mesure Delay_ms(59); r\n");
// UART1_Write_CText("mesure RAZ_Anneau_60_Leds\r\n");
UART1_Write_CText("Mesure Delay_ms(5);\r\n");
Init_Timer3(); // 0.5µS / count at 64MHz
val1=(TMR3H<<8)|TMR1L;
Etat=INTCON; // sauve etat GIE bit ..etc
GIE_bit=0;
TMR3ON_bit=1;
Delay_ms(5); // Duree mesuree = 4992µS +-1µ5
// Delay_ms(59); //Duree mesuree= 59008µS +-1µ5
//UART1_Write_CText("Duree mesurée RAZ_Anneau_60_Leds\r\n);
TMR3ON_bit=0;
val3=(TMR3H<<8)|TMR1L;
if (TMR3IF_bit==1) val3=val3+65536;
val3=val3>>1;
LongWordToStr(val3,CRam1);
UART1_Write_Text(CRam1);UART1_Write_CText("µS\r\n");
CRLF1();
INTCON=Etat;
Résultats:
// Duree globale fonction RAZ anneau= 4480µS
// Duree seulement de la partie RAZ= 2688µS ( envoi de 1440 bytes en simili ASM)
// autre moyen de mesure : avec MikroC Debugger + chrono : 41993 cycles * 0.0625=> 2624µS