• 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

    images/t_SQA_test-routine_ZEROS.gif images/t_SQA_test-routine_ONES.gif
    envoi d'un bit à ZERO envoi d'un bit à UN

    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 :

    ../_18FxxKxx/images/t_Base_18F26K22_1903_seule.gif../_18FxxKxx/images/t_Base_18F26K22_pour_divers_test_1903.gif

    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 :



    images/t_Horloge_4_Matrices8x8_Anneau_60_190424_PIC.gif images/t_Horloge_4_Matrices8x8_Anneau_60_190424.gif
    base 18F26K22 assemblage



    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 .

    images/DS18B20_Pinout.jpg

    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)

    images/t_Horloge_Anneau_190523b.gif images/t_Horloge_Anneau_190523.gif






    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

    images/t_Gabarit_Platine_support_Horloge_Anneau.gif
    Gabarit de percçage plaque MDF de 4mm epaisseur

    Le boitier original

    images/t_Horloge_4_Matrices8x8_Anneau_60_190620_Hardware.gif images/t_Horloge_4_Matrices8x8_Anneau_60_190620_Preassemblage.gif images/t_Horloge_4_Matrices8x8_Anneau_60_190620_Implantation.gif
    Hardware Anneau et Matrice en face AVANT Plaque support de l'horloge (vue ARRiere)


    images/t_Horloge_4_Matrices8x8_Anneau_60_190620_H_M1.gif images/t_Horloge_4_Matrices8x8_Anneau_60_190620_Back_View.gif images/t_Horloge_4_Matrices8x8_Anneau_60_190620_Top_View.gif
    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

    images/t_Horloge_4_Matrices8x8_Anneau_60_190620.gif
    Affichage (en mode=2) de Temperature et Heure


    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.

    images/t_SCANA_Test_ONES.gif images/t_SCANA_Test_ZEROS.gif

    Test Pseudo Bit UN

    test pseudo bit ZERO

    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

    images/t_Base_18F2xKx2_populated_191017.gif


    Programmation 18F27K42:

    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é ..!!!

    images/t_BAD_delivered_MAX7219_Displaying_191023.gif images/t_BAD_delivered_MAX7219-4_Matrice_191023.gif
    affichage doublment inversé ! Original utilisé dans a Version 1



    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

    images/t_ANNEAU_60leds_RGB_4_Quart_Back.gif

    images/t_Anneau_4x4_60leds_Back_connections.gif images/t_Gabarit_Platine_support_Horloge_Anneau_191111.gif
    livraison en 4 morceaux anneau assemblé et soudé gabarit de perçage et positionnement


    Matrice 8x8 avec MAX7219
    (inversée!)


    d'où le raccordement à droite ! ( à gauche sur la version 1 Horloge )

    images/t_Horloge_Anneau_60leds_V2_vue_arriere_1.gif images/t_Horloge_Anneau_60leds_V2_Zoom_arriere_1.gif
    Implantion des elements zoom, .. avec le module d'alimentation en place


    images/t_Horloge_Anneau_60leds_V2_vue_Dessus.gif
    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 .

    les 2 versions : 18F26K22 1 seul anneau et 18F27K42 avec 4 branches pour l'anneau alim pour V2



    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



    paulfjujo@free.fr


    Retour à l'index general