• version 0.0 ... 23/01/2020
    rev 30 Mai 2020.



    Le Projet Horloges 2020 (Global) Janvier 2020
      
    Synoptique
      
    Afficheurs Geants
      
    Led RGB WS2812 / SK6812


    Partie #2 :
    Horloge Esclave 4 Afficheurs 7seg Géants + Ruban 60 leds RGB (18F26K22 #2)
      
    Schema part#2 ( 28/05/2020)
      
    Bilan des tensions partie segment Afficheur
      
    Circuit Imprime Part#2
      
    Explications Programme Part #2 ( 27/05/2020)
      Sofwtare Part #2 ( 30/05/2020)

    HORLOGE 6 Afficheurs 7 seg Version autonome avec RTC
      
    Schema part#3 ( 24/05/2020)
      
    Circuit Imprime Part#3 ( 20/05/2020)
      
    Sofwtare Part #3


    Annexes :


      Tests #1 et #2 PWM pour Luminosité (Alim) Afficheurs 7seg
      Test avec Ruban 32 Leds RGB Cde sur 2fils
       Ruban 60 Leds RGB Cde sur 1 seul fil
       programme simple de test Ruban
       Mode TEST des afficheurs Geants 7 seg , en STATIQUE
       Partie Leds separation (schema et C.I.)


    lien sur Partie #1



    Projet Horloge Afficheur Geants 8 " et ruban de 60 leds RGB

    Usage d'un PIC 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,
    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..


    images/t_Afficheurs_Geant_10inch_and_datas.gif
    Dimensions et datas assemblé exemple de circuit


    * compter ~80€ pour 4 afficheurs 8 "


    par SEGMENT :
    Forward voltage =1,8 à 2V pour une diode led rouge
    une branche de 10 leds en serie => => 18 à 20V aux bornes
    => il faut 24V minimum d'alim ( avec les pertes aux bornes des ULN et Mosfet évaluées à 3 ou 4V)
    I moyen=18mA par branche de 10leds ou pour l'ensemble des 4 branches du segmen ?
    valeur typique Inconnue ,pas d'info sur datasheet

    Par afficheur :
    1 afficheur = 7 segm => 7x18mA => 126mA
    Pour 4 afficheurs geant => 504mA
    mais avec le multiplexage, on affiche 1 afficheur à la fois (soit 25% du temps)
    donc une Alim 24V 1A serait suffisante

    pour la commande de l’afficheur
    coté 7segments :
    1 ULN NPN driver ULN2803A TTL, 5.0 V CMOS 50 V/500 mA

    coté Anode commune
    driver UDN2981 PNP 50V 500mA 65°C par watt
    Usat=2V at 350mA
    350mA at 40% dutycycle pour 8 sorties actives en meme temps
    on aura qu’une sortie active sur 8 , à la fois , + multiplexage soit à 25% du temps..
    devrait etre OK


    Phase de test intensive à prevoir, avant conception du circuit imprimé definitif.

    images/t_Afficheur_7seg_Geants_Bilan_des_tensions.gif



    sinon il faut un MOSFET canal P individuel par afficheur
    ex: AO3401_MOSFET_CanalP_Low_VGS.pdf en CMS .. TRES PETIT,jamais testé ?
    + 1 transistror 2N2222 et 3 Resitances pour inverser le sens de la pulse sortie PIC
    IRF9Z24 TO_220 AB , VGS direct un peu juste 4,5V mais OK avec cde reverse via 2N2222
    voir Cde_Anode_Afficheur_via_Mosfet_Canal_N.jpg

    images/t_Cde_Anode_Afficheur_via_Mosfet_Canal_N.gif

    video : Horloge_2020_4x7seg_8pouces_Geamel_2020_0601.webm




    Ensemble ruban de 60 leds RGB

    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.

    Dimensions et connectique :



    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

    voir 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 !

    le timing doit etre respecté ..( precision du NOP =62.5nS avec réglage 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




    Partie # 2 :
    Horloge 7 segment + Ruban 60 Leds RGB (MCU #2)

    la meme base que L'horloge 7seg ULN,UDN avec 60 leds version 2019
    mais avec un ruban leds RGB au lieu de 60 leds individuelles, et des plus gros afficheurs de 8 pouces
    SANS RTC
    SANS la partie HARDWARE 8 x CD4015 !
    SANS Mesures de temperatures OWS
    AVEC commande ruban 60 leds, en SPI software
    AVEC reception d'infos du MCU#1 via RX UART , pour synchro HEUR
    ou traitement autre commande Telle que PLM



    Schema Part # 2:

    rev3 : 28/05/2020
    SANS RTC !

    images/t_Horloge_2020_Schema_4digits_Geants_18F26K22_ruban_60ledsRGB_M948_2020_05_28_wh5.gif

    schema en version pdf : Horloge_2020_Esclave_4digits_Geants_18F26K22_ruban_60ledsRGB_M948_2020_05_28.pdf
    schema crée avec WinSchem : Horloge_2020_Esclave_4digits_Geants_18F26K22_ruban_60ledsRGB_M948_2020_05_28.wh5



    Circuit Imprimé Part # 2:

    Fichier Layout6 : NOUVELLE HORLOGE PIC GEANTE_Geamel_200403_rev1.lay6
    version Horloge esclave !

    images/Horloge_2020_Part2_7segm_CI_rev1_200403.jpg images/t_Horloge_2020_Part2_7segm_CI_rev1_200403_photo.gif
    circuit imprimé avec Sprintlayout 6 version 03/04/2020 vue Photo sprintLayout Part#2




    Test #1 modulation PWM avec Alim 12V

    En entree Alim = bloc alim 230V/ 12V DC 0,75A
    Usage de MSSP1 Hardware avec sortie sur RC2 => PWM1_Init(7000);
    en mode 8 bits , reglage de 000 à 255 pour 0 à100%
    Le schema de cette partie :


    en sortie de l'interface MOSFET canal P IRF9Z24 (boitier TO220)
    un transistror NPN 2N2222 sert à faire une commande HIGH SIDE du MOSFET situé sur le + Alim 12V
    il reçoit sur sa base la sortie PWM RC2 du PIC
    la commande VGS du MOSFET est suffisament élévée pour assurer une conduction optimale
    mais la consommation partie Afficheurs Anodes communes (afficheurs de 18mm de haut seulement ) est insuffisante
    ce qui oblige à rajouter 110 ohms de charge ( 2x220 0,5W en parralele)

    Essais prealables fait avec une charge de 15 ohms 2W + 15 Ohms 2W + Ampoule 3,6V 0,3A
    ... because,je n'avais pas d'ampoule 12V 5W sous la main
    permettant de BIEN VOIR VISUELLEMENT la commande progressive possible en PWM de 0 à100%

    Partie Software :

    CPrint(" Test PWM1 output on RC2\r\n");
    PWM1_Init(7000);
    Delay_ms(100);
    PWM1_Start();
    Delay_ms(100);
    //
    PretTest avec ampoule et R serie 30 ohms
    for (i=1;i<255;i++)
    {
    PWM1_Set_Duty(i);
    Delay_ms(50);
    WordToStr(i,CRam1);
    Print(CRam1);
    CRLF1();
    }

    Test de la fonction PLM
    PLM=21:06
    => Plage Luminosité Reduite entre 21H00 et 06H du matin

    Mesures Tension moyenne DC et courant moyen , sur Alim Anodes afficheurs ,
    (Avec les 110 ohms en charge supplementaire non inclus dans la mesure de courant) :
    * En DEHORS de la PLM :

    Synchro Time : HEUR=17:00:00
    MaxH=: 21 MinH=: 6 Mn= 0 Sec= 0 Time is : 17:00:00;
    Lum.Maxi;Melod.ON ;

    11,54V.. consommation uniquement des 6 afficheurs 90 à 110mA

    *Dans la PLM

    Synchro Time : HEUR=22:59:00
    MaxH=: 21 MinH=: 6 Mn= 59 Sec= 0 Time is : 22:59:00;Melod.OFF;
    Lum.Mini;

    4.45V consommation uniquement des6 afficheurs = < 8mA

    Nota:
    je ne constate pas d'interference avec les 7000Hz du PWM et les 1000/4=250Hz du multiplexage des afficheurs
    La Melodie est aussi Inhibée à l'interieur de la PLM



    26/05/2020
    2em TEST avec Alim 18V
    il s'avere que le rajout de C6=1000µF fait que la progressivité sortie MOSFET f (PWM) n'est pas lineaire
    et reste prêt du Maxi 100%, car le condo n'a pas le temps de se dégongler .. à 4KHz !
    Sans C6 ! ..test OK
    . seul le 100nF arrondi un peu les angles ..



    PIC18F26K22 avec liaison ICSP, liaison UART1 , Liaison PWM sortie RC2 -> base 2N2222
    Le Pickit3 alimente le montage via VDD ( 2,7 à 5V)
    Une alim 18V DC 2,5A alimente l'entrée MOSFET --> 2 Lampes de 12V 5W en serie sur la sortie
    0V alim 18V relié au 0V alim PIC
    images/t_Test2_PWM_Mosfet.gif

    Deroulement programme:

    Test avec 18F26k22_UART1_RX_IT_ADC0_PWM_8bits_2020_0526.hex
    Test valeurs 25,128,255 ...OK
    Test Rampe montee et descente OK
    le MOSFET ne chauffe pas trop (35°C), SANS C6 !

    Etapes de Tests:
    MCU : 18F26K22
    Power supply: 2.7 à 5V
    Directory : C:\_MikroC\_MesProjets_MikroC\_18F26K22_PWM_8b_10b_2020
    Projet : 18F26k22_UART1_RX_IT_ADC0_PWM_8bits_2020_05.mcppi
    Source : _18F26K22_16Mhz_Uart1_ADC_PWM_8b_2020_0526.c
    FOSC : 16MHzx4(PLL) => 64MHz
    ABCTest Reglage OSCTUNE, avec Freq meter sur RA6
    Clock initiale in Khz = 64000

    Int PWM1 8bits at 4000Hz on RC2
    PWM1=25=10%
    Attente appui touche clavier S
    s
    PWM1=128=50%
    Attente appui touche clavier S
    s
    PWM1=255=100%
    Attente appui touche clavier S
    s
    PWM1 rampe montée Lente
    Attente appui touche clavier S
    s
    PWM1 rampe Descente Lente
    s
    Attente appui touche clavier S
    s
    PWM1 rampe montée Rapide
    Attente appui touche clavier S
    s
    PWM1 rampe Descente Rapide
    Attente appui touche clavier S

    .. en boucle

    Test suivant avec l'appli HORLOGE 7seg
    chargée dans le PIC (toujour sur breadboard)
    Execution du Test Rampe PWM en debut du programme => OK
    Test en modifiant l'Heure HEU=22:00:00 pour un PLM de 21:06
    La valeur de PWM commute bien de 255 à 25 .. constaté sur niveau éclairage ampoules => OK


    MaxH= 21;MinH= 6;Time= 20: 20: 0: 5;
    PWM=255 Lum.Maxi; Melod.OFF; <- lampe allumée 100%
    MaxH= 21;MinH= 6;Time= 20: 20: 0: 6; PWM=255 Lum.Maxi; Melod.OFF;
    HEUR=22:00:00
    Synchro Time : HEUR=22:00:00

    RAZ anneau 60 leds
    MaxH= 21;MinH= 6;Time= 22: 22: 0: 0; PWM=255; Melod.OFF; Lum.Mini;
    RAZ anneau 60 leds
    MaxH= 21;MinH= 6;Time= 22: 22: 0: 0;
    PWM= 25; Melod.OFF; Lum.Mini; <- lampe allumée 10%
    MaxH= 21;MinH= 6;Time= 22: 22: 0: 1; PWM= 25; Melod.OFF; Lum.Mini;



    Programme pour ce test :
    projet : _18F26K22_PWM_8b_10b_2020.zip
    source mikroC : _18F26K22_16Mhz_Uart1_ADC_PWM_8b_2020_0526.c
    chargeur : 18F26k22_UART1_RX_IT_ADC0_PWM_8bits_2020_0526.hex

    Test PMW (distant) sur Horloge Geamel et alim 24V
    PWM=0 => 0V
    PWM=25 => soit 10% => 8.3V sur les lampes en sortie MOSFET (2 lampes de 12V 5W en serie)
    PWM=255 => soit 100% => 22.5V sur les lampes en sortie MOSFET
    Test avec Afficheurs Geants 7seg et R=330 ohms en parallele sur la sortie
    Memes mesures !
    Nota:
    Avec R serie =100 ohms sur les sortie ULN Segments, le courant par segment est tres bas : 0.6mA seulement
    soit reduire notablement Rserie, soit augmenter la tension d'alim de 1 à 2V..
    R serie segment passée de 100 à 56 Ohms .

    Test Melodie :
    Aucune action , reaction ..pas de sortie Melodie (accoustique) suite commande PIN RA6
    Test avec PIC enlevé du support, strap Pin10 et 0V => inoperant => PB Hardware
    il s'avere que R=100 et R=10K sont inversées au niveau d ela ciommande Gate du MOSFET canal N IRLZ14
    le niveau logique de commande est alors ECRABOUILLE par la 100 ohms ..=> à Modifier et retester
    Nota:
    Test sur breadboard PIC

    Alim +3,3V pin 4 M948-2
    -> pin pin 3 M948-2
    Pin 10= RA6 pin1 du M948-2
    220K entre pin 5 et 6
    Buzzer piezo entre pin 9 et 10

    Melodie=RING=0
    Melodie=STOP=64
    test OK apres retablissement du niveau logic correct


    Video :
    Test2_PWM_Mosfet.webm




    Rajout Test sur Ruban 32 leds RGB WS2801 (je n'ai pas (encore) de ruban 60 leds !)

    déja testé ICI :
    rappel :

    WS2801 RGB Wiring
    -gros Fil Rouge +5V
    -gros Fil Noir 0V
    - connector fil Noir ------+5V
    - connector fil vert <------ SPI RC0 Clock
    - connector fil Rouge<---- SPI RC5 Dout (config provisoire en attendant le Circuit imprimé final)
    - connector fil Bleu ------0V MCU

    nota:
    pour le Ruban Flexible RGB de 1m , avec 60 leds adressables 2529 (Gotronics)
    Leds SK6812 (compatible avec WS2812B).
    les gros fils : noir et rouge = alim 5V
    Petits fils : Noir= Gnd , Vert= entree SPI sur sortie RC0 MOSI (SPI software)
    *sortie RC1 inutilisée.

    Rajout d'un mode BAVARD via Cde BAV=1 ou BAV=0
    ( BAV=1 par défaut , au lancement programme.)
    en mode Bavard (BAV=1) envoi sur terminal MCU#2 de la sequence complete chaque seconde ,
    sinon minima (BAV=0) toute les minutes pleines:

    Presentation :
    Directory :C:\_MikroC\_MesProjets_MikroC\_Horloge_2020_Aff_Geant_Matrices8x8_RGB_leds
    MikroC pro 7.6.0 Beta
    Projet :Horloge_2020_6x7seg_Geants_ruban_60leds_RGB_18F26K22_2020_04.mcppi
    Special Bluetooth *.apk
    Horloge 6 Afficheurs 7seg Geants avec ruban 60 Leds RGB Leds
    Config bit : P18F26K22_FOSC_interne_8xPLL_32Mhz.cfgsch FOSC:32.0 MHz
    Eeprom: Horloge_2020_6x7seg_Geants_ruban_32leds_RGB_18F26K22_Eeprom_2020_04.ihex
    Source : Horloge_2020_6digits_Geants_18F26K22_ULN_UDN_Melodie_Ruban_RGB_32leds_2020_0405.c
    MCU#2 18F26K22, SPI software,UART1 115200 bds
    Ruban 32 Leds RGB WS2801 RC5=Dout RC0=Clock
    Le MCU#1 genere la synchro avec sa RTC DS3231, via l'UART vers MCU#2

    Duree Melodie en eeprom : 4
    Plage Horaire Luminosite et Melodie en eeprom : 6 21

    PLM <Max H= 21 Min H= 6 >
    Init data pour Ruban 32 LEDs RGB
    Connecteur: Noir=+5V Bleu=0V Vert=Clck Rouge=Din
    Init SPI software : RC0=Clock , RC5=Dout
    Test Ruban 32 leds

    MaxH=: 21 MinH=: 6 Mn= 12 Sec= 12 Time=00:00:10 Lum.Maxi; Melod.OFF;
    MaxH=: 21 MinH=: 6 Mn= 12 Sec= 12 Time=12:12:12 Lum.Maxi; Melod.OFF;
    MaxH=: 21 MinH=: 6 Mn= 12 Sec= 13 Time=12:12:13 Lum.Maxi; Melod.OFF;

    BAV=0
    Reception BAVard cde : BAV=0
    Time=12:16:00
    Time=12:17:00
    Time=12:18:00
    BAV=1
    Reception BAVard cde : BAV=1
    MaxH=: 21 MinH=: 6 Mn= 18 Sec= 5 Time=12:18:05 Lum.Maxi; Melod.OFF;
    MaxH=: 21 MinH=: 6 Mn= 18 Sec= 6 Time=12:18:06 Lum.Maxi; Melod.OFF;
    MaxH=: 21 MinH=: 6 Mn= 18 Sec= 7 Time=12:18:07 Lum.Maxi; Melod.OFF;


    Pre_test du Ruban 32 leds , en debut de programme

    void Send_RBG(unsigned char R, unsigned char B, unsigned char V)
    {
    Soft_SPI_Write(R);
    Soft_SPI_Write(B);
    Soft_SPI_Write(V);
    }
    ...........etc ..

    Rouge=255;
    Vert=255;
    Bleu=255;
    Mode=0;
    LEDs=32; // ENTER Total LEDs
    CPrint(" Init SPI software : RC0=Clock , RC5=Dout\r\n");
    Soft_SPI_Init();

    // parcours des 32 leds ruban en mode POINT
    CPrint(" Test Ruban 32 leds\r\n");
    Delay_ms(100);
    Raz_Ruban();

    for (k=0;k<32;k++)
    {
    StartTransfer();
    for (i=0;i<k;i++)
    {
    for(j=0;j<k;j++) Send_RBG(0,0,0);
    if (j==k) Send_RBG(Rouge,Bleu,0);
    for(j=k+1;j<32;j++) Send_RBG(0,0,0);
    Delay_ms(50);
    }
    EndTransfer();
    Delay_ms(50);
    }

    Tests permanents liés à la ZONE PLM :
    concernant la validation de la Melodie jouée à chaque Heure pleine, à la luminosité Afficheurs (PWM)
    et à la luminosité du Ruban Leds RGB

    if ( ((Hour < MinHour) || (Hour >MaxHour)))
    {
    Melodie=STOP;
    if(Bavard==1)
    {
    CPrint("; Melod.OFF;");
    CPrint(" Lum.Mini;");
    }
    Rouge=10;
    Bleu=10;
    Vert=10;
    PWM1_Set_Duty(25);
    }
    else
    {
    if(Bavard==1) CPrint(" Lum.Maxi;");
    Rouge=255;
    Bleu=255;
    Vert=255;
    PWM1_Set_Duty(255);
    if( ( ((Mn==0) && (Sec < Duree_Melodie))) )
    {
    Melodie=RING;
    if(Bavard==1)CPrint(" Melod.ON ;");
    }
    else
    {
    Melodie=STOP;
    if(Bavard==1) CPrint(" Melod.OFF;");
    }
    }


    Le programme HORLOGE 2020 , application #2

    Cette horloge , avec MCU #2 (18F26K22), peut tourner en mode Roue Libre (autonome),
    puisque l'heure est élaborée via Timer4 sur 4mS => 250 interrupt par sec.
    Nota : pourquoi 4mS et non pas 1sec ( possible avec Timer0 !) ?
    Because usage du multiplexage des 6 afficheurs.. en 6x4=24mS
    MAIS , du fait de l'usage de FOSC Interne 64MHz , pour ce MCU #2 et qu'il n'y a pas de RTC DS3231,
    j'ai pu constaté une dérive de l'ordre de 22sec en 3Heures , soit -0,2%

    * avec le terminal YAT et option "Time Stamp" , envoi sur terminal de l'Heure PIC#2 modulo 1minute.

    Depart du test
    (14:56:03.482) Time=14:56:00 -3
    (15:25:07.212) Time=15:25:00 -7
    (15:50:10.019) Time=15:50:00 -10
    (17:31:21.910) Time=17:31:00 -21
    (17:56:25.189) Time=17:56:00 -25
    Fin du Test


    Decalage : -25 - -3 => -22 secondes en 3 Heures
    - 22/ (3600*3) => soit 0.2%
    avec OSCTUNE=0 et Alim VCC=3,9V
    nota : l'action de OSCTUNE peut aller de -3 à +3 % du nominal

    Ce qui est en soi INACCEPTABLE !
    MAIS, en usage final, elle sera synchronisée par l'application MCU #1
    qui est dotée d'une RTC DS3231 , via une laison UART MCU#1 -> MCU#2
    Synchro toute les minutes pleines, par l'envoi de HEUR=HH:MM:SS.
    pris en charge quasi-immediate par le MCU#2 ( UART1 à 115200 bds) qui reactualisera les registres: Sec,Min,Hour





    Ruban 60leds prévu :
    pour la suite ( en remplacement du 32 leds pour les pré-test)
    https://www.gotronic.fr/art-ruban-rgb-1m-60-leds-adressables-2529-31152.htm

    Ruban RGB 1m 60 leds adressables 2529
    Ruban flexible à LED RGB d'un mètre équipé de 60 leds SK6812 (compatible avec WS2812B).
    Ces 60 leds sont raccordées en série et communiquent avec un microcontrôleur type Arduino ou
    compatible via une sortie série 1 broche.



    Caractéristiques:
    Alimentation: 5 Vcc
    Consommation: 40 mA par led (3 couleurs au maxi)
    Nombre de leds: 60
    Led + CI: SK6812
    Longueur: 1 mètres
    Largeur: 12 mm
    Couleur du ruban : noire
    Livré avec 5 attaches de fixation
    Norme IP: IP65
    Poids: 45 g

    Pilotage du Ruban, comme sur mon horloge "Anneaux 60 leds" (Ws2812):
    en mode RUBAN .
    2 modes de fonctionnement via commande M=1 ou M=2
    .Mode=1 => Couleur de base alternée chaque seconde : ex Bleu,Vert,Blanc,Jaune,Violet avec LED ROUGE modulo 5 sec.
    Mode=2 => Couleur change chaque minute

    voir l'horoge ANNEAU 60 Leds avec WS2812
    Le timming differe legerment avec les SK6812
    generation des "simili bits" ZERO et UN en ASM

    Test avec Anneau_60_leds_RGB_Bit_bang_Hardw_Test_190408.c
    et Analyser Logique Ikalogic SQA50

    do
    {
    LD1=0;
    UART1_Write_CText(" Phase de Test avec SQA analyser \r\n" );
    SQA=1;
    ZEROS(); ZEROS(); ZEROS(); ZEROS(); ZEROS(); ZEROS(); ZEROS(); ZEROS();
    SQA=0;
    ONES(); ONES();ONES();ONES();ONES();ONES();ONES();ONES();
    SQA=1;
    _asm NOP
    SQA=0;
    LD1=1;
    Delay_1sec();
    Delay_1sec();
    Delay_1sec();
    }
    while(1);


    images/t_WS2812_Versus_SK6812_led_RGB.gif images/t_Zeros_Ones_Timings_for_SK6812_RGB_led.gif images/t_Zeros_Ones_Timings_Test_for_SK6812_RGB_led.gif
    la Theorie La pratique (detail Zoom in ) La pratique Zoom Out

    Software : _Ruban_60_leds_RGB_Bit_bang_Hardw_Test_2020_0516.zip
    source mikroC : Ruban_60_leds_RGB_Bit_bang_Hardw_Test_2020_0516.c




    Programme de test ruban en Mikrobasic
    Test_ASM_into_Basic_cde_Led_RGB_via_RC0.mbas
    Test_ASM_into_Basic_to_drive_RGB_WS81212b_via_RC0.hex




    Leds de Séparation

    images/t_Leds_separations_Schema.gif images/t_Leds separation_G_200520_CI_lay6.gif
    images/t_Leds separation_G_200520_photo_lay6.gif
    schema Circuit imprimé

    Ensemble de leds piloté via la sortie RB0 du PIC , via un ULN2083
    Sortie 1Hz








    Programme HORLOGE (Esclave) 2020 part#2


    Codage Afficheurs 7 segments

    Codage_Afficheur_Geants_Horloge2020.xls

    images/t_HORLOGE_GEANTE_codage_7segments_200521.gif

    ATTENTION : codage segments Horloge 2020 différent de Horloge 2019 sur PORTA

    Nouveau codage :
    0 126 =sA+sB+sC+sD+sE+sF
    1 12 =sB+sC
    2 182 =sA+sB+sG+sE+sD
    3 158 =sA+sB+sC+sD+sG
    4 204 =sB+sC+sF+sG
    5 218 =sA+sF+sG+sC+sD
    6 250 =sA+sD+sE+sF+sG+sC
    7 14 =sA+sB+sC
    8 254 =sA+sB+sC+sD+sE+sF+sG
    9 222 =sA+sB+sC+sD+sG+sF

    const code unsigned char Segments[]={126,12,182,158,204,218,250,14,254,222,0};

    pour memoire :
    ex codage pour horloge 2019
    const code unsigned char Segments[]={63,6,91,79,102,109,125,7,127,111,0};


    Déroulement programme sur terminal :


    Presentation :
    Directory :C:\_MikroC\_MesProjets_MikroC\_Horloge_2020_Aff_Geant_Ruban_RGB_SK6812_60_leds
    MikroC pro 7.6.0 Beta
    Projet Part#2 :Horloge_2020_6x7seg_Geants_ruban_60leds_SK6812_RGB_18F26K22_2020_05.mcppi
    Special Bluetooth *.apk
    Horloge 2020 6 Afficheurs 7seg Geants avec ruban 60 Leds RGB Leds
    Config bit : P18F26K22_FOSC_interne_16xPLL_64Mhz.cfgsch FOSC:16MHz x 4 (PLL) MHz
    Eeprom: Horloge_2020_6x7seg_Geants_ruban_32leds_RGB_18F26K22_Eeprom_2020_05.ihex
    Source : Horloge_2020_6digits_Geants_18F26K22_ULN_UDN_Melodie_Ruban_60leds_RGB_SK6812_2020_0521.c
    MCU#2 18F26K22, SPI Bit Bang,UART1 115200 bds
    RC0=MOSI Dout -> DIN Ruban 60 Leds RGB SK6812
    ce MCU#2 recoit sa synchro du MCU#1 incluant une RTC, via l'UART et cde HEUR=HH:MM:SS

    Duree Melodie en eeprom : 4
    Plage Horaire Luminosite et Melodie en eeprom : 21 6

    PLM <Max H= 21 Min H= 6 >
    Test Led RC5 output ......
    Test RA6 cde melodie .
    Init data pour Ruban 60 LEDs RGB
    Connecteur: Noir=+5V Bleu=0V Vert=Din
    Test Ruban 60 leds
    Pre_Test Parcours des 60 leds
    Position Led : 0
    Position Led : 1
    Position Led : 2
    ..etc..
    Position Led : 58
    Position Led : 59
    Init cde PWM1 lum.Afficheur geants on RC2
    Test PWM1 output on RC2
    1
    2
    3
    4
    5
    ... etc ...
    253
    254

    MaxH= 21;MinH= 6;Time= 12: 12: 12: 12; PWM=128 Lum.Maxi; Melod.OFF;
    MaxH= 21;MinH= 6;Time= 12: 12: 12: 12; PWM=255 Lum.Maxi; Melod.OFF;






    Mode TEST partie HARDWARE connections afficheurs 7 seg
    Entrée dans ce mode Test via la commande clavier : T=1



    fichier config terminal : Terminal_Horloge2020_Tests_Afficheurs.yat

    exemples :
    Digit1 passe la commande A=4 => digit des Minutes
    Digit2 passe la commande A=8=> digit des Minutes*10
    etc..
    Seg A passe la commande B=2 => segment A du digit précédement selectionné
    Seg B passe la commande B=4 => segment B ....
    etc ..
    Leds separation passe la commande B=1
    B=0 => Aucun segment selectionné
    A=0 Aucun digit selectionné

    Sortie du mode test via commande : T=0


    Mesures réelles sur afficheur Geant KDS-80011-7

    en mode Test Afficheurs 7seg T=1
    avec A=0 => 4 afficheurs allumés en meme Temps si Seg A allumé => Problemo
    avec B=0 => aucun allumés (normal => ULN segment OK!)
    Mesure de la consommation via tension sur R100 = 1,5V => 1500/100 => 15mA ..pour 4 segments allumés!
    conclusion : UDN 2091 HS => remplacement de L'UDN 2981=> tests OK
    * Attention :
    à revoir car version 4 digits Geants seulement, pas de digits secondes installés

    Mesure sur le digit Heur , segment A :
    cde A=4 et B=2
    Usegment = 20.3V
    Mesure sur R=100=> 0.06V => 60/100 => 0.6mA pour 1 seul segment .. c'est PEU , meme insuffisant !
    car chute de tension 20,3V sur le segment ...c'est BEAUCOUP pour des leds rouges
    il faudra : soir diminuer R100 , soit augmenter U alim de 1 ou 2V pour plus de luminosité
    Luminosité qui sera encore plus faible en mode DYNAMIQUE !
    à suivre..
    R100 => passée à 56 Ohms

    Melodie Horaire :
    Via circuit Specifique M948-2 piloté par Pin 10 =RA6
    Inversion du niveau logique de commande pour avoir un ZERO => Melodie et UN=ARRET
    Variable RING=64 et STOP=0
    La pin PORTA RA6 doit etre commandée à part , les autres Pins du PORTA commandes les DIGITS des 4 (ou 6) Afficheurs
    A chaque commande de DIGIT , la commande Melodie doit etre Mixée
    Exemple:
    switch (Index_Digit)
    {
    case 2:
    LATA.B5=0;
    Temp = Mn %10 ;
    LATB=E878_Segments[Temp] |
    Clignote_Sec;
    *(Time+4)=Temp+48;
    LATA=0x04
    | Melodie;
    break;

    A noter que la Melodie est INACTIVEE à l'interieur de la zone PLM=21:06 par defaut.

    il en est de meme pour l'etat des LEDS SEPARATRICES sur le PORTB RB0
    correspondant à Clignote_Sec



    SOFTWARE:
    rev 30/05/2020
    Projet complet : Horloge_2020_4digits_Geants_18F26K22_ULN_UDN_Melodie_Ruban_60leds_RGB_SK6812_2020_0530.zip
    Source MikroC :Horloge_2020_4digits_Geants_18F26K22_ULN_UDN_Melodie_Ruban_60leds_RGB_SK6812_2020_0530.c
    PIC Eeprom : Horloge_2020_4x7seg_Geants_ruban_60leds_RGB_18F26K22_Eeprom_2020_05.ihex
    Chargeur : Horloge_2020_4x7seg_Geants_ruban_60leds_SK6812_RGB_18F26K22_2020_0530.hex

    Video :
    Horlog_7seg_Geants_et_cordon_leds_RGB_Geamel_2020_0530.webm


    lien sur Partie #1





    Version HORLOGE 6x 7seg AUTONOME avec RTC
    11/04/2020
    La meme Horloge que PART#2 , mais cette fois AUTONOME, car avec sa propre RTC
    donc tres Precise , s'affranchit des decalages temporels .
    Se differe uniquement par le rajout de cette RTC DS31231 , reliée sur le BUS I2C1 RC3,RC4
    La sortie 1Hz RTC rentre sur l'entrée RB0 pour assurer la synchro et
    et va aussi sur la separation des DP digits, clignote à 1Hz



    Schema Part # 3: (Horloge Autonome avec RTC)

    rev 24/05/2020
    AVEC RTC

    images/t_Horloge_2020_Schema_6digits_18F26K22_ruban_60ledsRGB_M948_RTC_2020_05_24_wh5.gif

    schema en pdf : Horloge_2020_Autonome_6digits_18F26K22_ruban_60ledsRGB_M948_RTC_2020_05_24.pdf
    schema crée avec WinSchem : Horloge_2020_Autonome_6digits_18F26K22_ruban_60ledsRGB_M948_RTC_2020_05_24.wh5



    Ciruit Imprimé :
    Horloge avec RTC

    images/t_HORLOGE_GEANTE_avec_RTC_rev_PF_200520_CI_lay6.gif images/t_HORLOGE_GEANTE_avec_RTC_rev_PF_200520_Photo_lay6.gif images/t_HORLOGE_GEANTE_avec_RTC_rev_PF_200520_Face_Cuivre_lay6.gif
    C.I vue coté composant version : 200520 vue Photo LAY6 version1 200520 Face Cuivre

    fichier Sprintlayout 6.0 : HORLOGE GEANTE avec RTC_rev_PF_200520.lay6
    fichier Cuivre : HORLOGE GEANTE avec RTC_rev_PF_200520_CI_Lay6.pdf

    Software :

    Differences avec l'horloge Esclave :
    RB0 qui etait une sortie 1Hz , devient maintenant , une entree recevant l'info 1Hz de la RTC
    info servant à synchroniser les variables HH,MM,SS issues de la RTC , et aussi de l'envoi du 1Hz aux leds de separation via l'ULN..
    Rajout du traitement des commandes MAJ RTC , PLM , (etait assuré préalablementg par l'Horloge Maitre défilante 12 matrices.)
    Plus besoin de la liaision UART Horloge Defilante Maitre, L'UART est maintenat reliée soit directement à un Terminal, soit via BlueTooth .









    paulfjujo@free.fr


    Retour à l'index general