eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 45 sur 45

eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire



  1. #31
    Forhorse

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire


    ------

    tu as lu ce que j'ai écris plus haut ?
    Pourquoi chercher quelque chose de compliqué alors que je t'ai donné une solution simple ?

    et ta fonction pause ne donnera pas satisfaction car les deux boucles ne sont pas imbriquées...

    -----
    Dernière modification par Forhorse ; 24/12/2012 à 18h26.
    Tout projet flou conduit à une connerie précise !

  2. #32
    alainav1

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    bonjout,
    pour ecrire en memoire si cela peut t'aider ?
    http://claude.dreschel.free.fr/comme.../RW_EEPROM.htm
    cordialement
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  3. #33
    Forhorse

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    pas besoin de lire/écrire un eeprom pour une telle application. Sur quelque chose qui donne une fonction aléatoire, quel intérêt de mémoriser le dernier état des sorties ?
    Tout projet flou conduit à une connerie précise !

  4. #34
    chouchou76250

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    salut a tous

    Dans lordre des post
    1 Si j'ai bien compris , le fait de declarer une variable, crée un emplacement memoire en ram pour cette variable. de ce fait on a qu'a la lire??
    2 j'ai bien lu ton post Forhorse mais je l'ai mal réecrit pour la fonction pause
    3 merci alainav1 pour le lien
    4 Le fait de mettre en eeprom l'etat des 1 led avant extinction, permet de reprendre le cycle la ou il etait au lieu de remettre les led a 0 ou 1 (initialisation) et de repartir avec l'aleatoire. l'effet est que 2 maisons cote a cote par exemple sont sures a la mise sous tension de n'avoir toutes les led allumées ou etteintes avant de passer sur le cycle aleatoire. pour faire court on initialise l'etat de chaque bit des 2 ports par leur ancien etat au lieu de tous les initialiser a 0 ou a 1.

    La suite demain aujourd'hui c'est repos!!!!!

    christophe

  5. #35
    Forhorse

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    Citation Envoyé par chouchou76250 Voir le message
    4 Le fait de mettre en eeprom l'etat des 1 led avant extinction, permet de reprendre le cycle la ou il etait au lieu de remettre les led a 0 ou 1 (initialisation) et de repartir avec l'aleatoire. l'effet est que 2 maisons cote a cote par exemple sont sures a la mise sous tension de n'avoir toutes les led allumées ou etteintes avant de passer sur le cycle aleatoire. pour faire court on initialise l'etat de chaque bit des 2 ports par leur ancien etat au lieu de tous les initialiser a 0 ou a 1.
    Ouais c'est bien ce que je dis, ça sert à rien !
    a la mise sous tension ton programme génère un nombre aléatoire afin d'allumer une led aléatoirement parmi un certain nombre. A ton avis combien de temps va t-il se passer entre l'initialisation et l'allumage de la première led ? donc pendant combien de temps les led vont restée éteinte ?
    Tu cherches vraiment les complications là où il n'y en a pas du tout besoin.

    J'ai pas franchement l'impression que tu test les programmes que tu écris...
    Dernière modification par Forhorse ; 25/12/2012 à 19h21.
    Tout projet flou conduit à une connerie précise !

  6. #36
    chouchou76250

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    salut a tous

    Forhorse, j'ai ecrit plus haut que je n'avais pas encore de quoi pour faire le debugg. c'a arrive demain

    ci joint la nouvelle version du soft
    j'ai ajouter une routine interuption qui fige toute mes led a 1 mais apresa voir lu la doc du pic il est conseiller de sauvgarder les registre au debut de l'interuption et de les restaurer a la fin . pouvez vous me dire comment on ecrit cela. je n'ai rien trouver dans la doc du compilateur. sur le net j'ai vu int_save_regiters et int_restore_regiters mais le compilateur ne reconnait pas

    merci d'avance christophe

    /*
    * File: ecl_12_pieces.c
    * Author: christophe
    *
    * Created on 26 décembre 2012, 21:00
    */

    #include <stdio.h>
    #include <stdlib.h>
    #include <pic.h>

    /*
    *
    */

    #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))

    static bit LED0 @ PORTBIT(PORTC, 0);
    static bit LED1 @ PORTBIT(PORTC, 1);
    static bit LED2 @ PORTBIT(PORTC, 2);
    static bit LED3 @ PORTBIT(PORTC, 3);
    static bit LED4 @ PORTBIT(PORTC, 4);
    static bit LED5 @ PORTBIT(PORTC, 5);
    static bit LED6 @ PORTBIT(PORTC, 6);
    static bit LED7 @ PORTBIT(PORTC, 7);
    static bit LED8 @ PORTBIT(PORTA, 4);
    static bit LED9 @ PORTBIT(PORTA, 5);
    static bit LED10 @ PORTBIT(PORTA, 6);
    static bit LED11 @ PORTBIT(PORTA, 7);
    static bit couloir @ PORTBIT(PORTA, 0);

    unsigned int i; //Pour la boucle de pause
    unsigned int j; //Pour la 2eme boucle de pause
    unsigned int NA = 0; //nonbre aleatoire correspondant a une led
    unsigned int NA2 = 0; //nonbre aleatoire correspondant a tempo aleatoire

    int NARAM; //nombre aleatoire lu en RAM


    //pause functions et interruptions
    void pause_1();
    void interupt();


    //main function
    void main(void)
    {
    OSCCON = 0b01100001; //oscillateur intern utilisé a 4 mhz
    ANSEL = 0b00000000; //met tous les ports en numérique
    INTCON = 0b10000100; //autorise les interruption sur pin RB0 A 7 sur un niveau


    TRISA = 0b00000100; //bit0,1,2,4,5,6,7 en sortie, bit 3 en entrée (force par config du Pic)
    TRISB = 0b00000001; //bit0 en entrée (ext Interrup) et bit 1 a 7 en sortie
    TRISC = 0b00000000; //bit0 a 7 en sortie

    PORTA = 0b00000000; //Bit 0 ,1, 4 a 7 port A a 0
    PORTB = 0b00000000; //Bit 1 a 7 port B a 0 (reserve de led a piloter en plus)
    PORTC = 0b00000000; //Bit 0 a 7 port C a 0

    while(OSCCON,HTS= 0) // attente stabilisation oscillateur
    {

    }
    srand(NARAM); // initialisation de rand
    NA = (rand()%12);

    switch(NA)
    {
    case 0: LED0 = !LED0;
    pause_1();
    break;
    case 1: LED1 = !LED1;
    pause_1();
    break;
    case 2: LED2 = !LED2;
    pause_1();
    break;
    case 3: LED3 = !LED3;
    pause_1();
    break;
    case 4: LED4 = !LED4;
    pause_1();
    break;
    case 5: LED5 = !LED5;
    pause_1();
    break;
    case 6: LED6 = !LED6;
    pause_1();
    break;
    case 7: LED7 = !LED7;
    pause_1();
    break;
    case 8: LED8 = !LED8;
    pause_1();
    break;
    case 9: LED9 = !LED9;
    pause_1();
    break;
    case 10: LED10 = !LED10;
    pause_1();
    break;
    case 11: LED11 = !LED11;
    pause_1();
    break;
    }
    }
    void pause_1()

    {
    srand(NARAM);
    NA2 = (rand()%60); //génération du nombre de boucle à faire (par exemple entre 0 et 60)

    for(j=0;j<NA2;j++); // on va compter entre 0 et 60 tempo aléatoire
    {
    for(i=0; i<4000; i++); // 2emem tempo fixe a ajuster

    }
    }

    void interupt()

    {
    //sauvegarde registtres??? a ecrire

    if(RBIF=1); // flag detection interuption sur port B
    LED0 = 1;
    LED1 = 1;
    LED2 = 1;
    LED3 = 1;
    LED4 = 1;
    LED5 = 1;
    LED6 = 1;
    LED7 = 1;
    LED8 = 1;
    LED9 = 1;
    LED10 = 1;
    LED11 = 1;
    couloir = 1;
    RBIF=0; // remise du flag a 0 pour nouvelle interuption

    //restauration des registres????? a ecrire
    }

  7. #37
    Forhorse

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    Avant d'ajouter des complications inutiles tu ferrais mieux de tester déjà quelque chose de simple.
    Et il faut aussi que tu te renseignes sur ce qu'est une interruption, parce que là tu pars dans un délire qui n'a ni queue ni tête !
    Tout projet flou conduit à une connerie précise !

  8. #38
    alainav1

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    Bonjour,
    A quoi ça sert de faire simple quand on peut faire compliqué !
    cordialement
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  9. #39
    chouchou76250

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    bonjour a tous

    SI j'essaye d'ecrire une routine d'interuption c'est que j'ai besoin dans mon application de figer toute les led a 1 quand je le veux et sans a voir a ettendre la fin de la boucle principale du programme. (2 mn maximun de la tempo). j'essaye de faire avance mon projet et si vous avez autre chose a proposer dite le mais sans envoyer des post qui ne servent a rien sauf a faire monter la mayonnaise et a casser la personne entre autre moi.

    christophe

  10. #40
    Forhorse

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    La "bonne" méthode (ce qui se fait habituellement) c'est de gerer les tempo avec une interruption, et de surveiller l'entrée dans la scrutation du programme principal. Ainsi le processeur n'est pas "englué" dans une boucle de temporisation qui ne "fait rien" et peux ainsi réagir rapidement (instantanément du point de vue humain)

    Une autre méthode, vu ton application, serait d'inclure la scrutation de l'entrée dans la boucle de temporisation. On évite de se casser la tête avec une interruption et le résultat est identique.

    Code:
    void pause_1()
    
    {
      srand(NARAM);
      NA2 = (rand()%60); //génération du nombre de boucle à faire (par exemple entre 0 et 60)
    
      for(j=0;j<NA2;j++); // on va compter entre 0 et 60 tempo aléatoire
      {
        for(i=0; i<4000; i++) // 2emem tempo fixe a ajuster
        {
        if (PORTBIT(PORTB,0) == 1)
          {
             hold()
          }
        }
      }
    }
    
    void hold()
    
    {
    
    
    while ((PORTBIT(PORTB,0) == 1)
    {
    LED0 = 1;
    LED1 = 1;
    LED2 = 1;
    LED3 = 1;
    LED4 = 1;
    LED5 = 1;
    LED6 = 1;
    LED7 = 1;
    LED8 = 1;
    LED9 = 1;
    LED10 = 1;
    LED11 = 1;
    couloir = 1;
    }
    }
    Par exemple (sans doute des trucs à corriger, je ne connais pas le C)
    enfin bref, en programmation, quand on est face à un problème on cherche ce qui bloque, pourquoi ça bloque, et comment débloquer. Il faut réfléchir, chercher, optimiser plutôt que d'essayer de bricoler des solutions qui alourdissent encore les choses.

    Moi je suis loin d'être un bon programmeur. Quand je bosse sur un projet, il m'arrive de compiler et de tester 75 ou 80 fois un bout de programme pour trouver une solution.
    Alors si tu crois que tu vas t'en sortir en codant virtuellement sur un forum tu te fourre le doigt dans l’œil.
    coder->compiler->tester->observer->coder->compiler->tester->observer->coder->compiler->tester->observer->coder->compiler->tester->observer->...

    Perso ce sujet commence à me fatiguer, quand on veut aider on se prend des remarques ingrates ! C'était ma dernière intervention.
    Tout projet flou conduit à une connerie précise !

  11. #41
    mag1

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    Bonjour,

    Je reviens avec mon programme basic picaxe.
    Pas pour te forcer à faire du basic ni du picaxe, mais parce que je pense que ce programme répond au besoin exprimé.
    Et à en garder le principe. Refait une simulation (accéléré x 10) et regarde.

    Il y a une génération de 2 nombres aléatoires, un pour la sortie (b0) et un pour la tempo (b1)

    12 sorties et 20 tempo = 240 combinaisons
    tempo max 20 secondes > temps statistique moyen =10s
    Pour des paliers de 1 seconde > temps moyen de 12 cycles = 120 secondes
    temps minimum d'allumage d'une led =1 s
    temps maximun = ? (plusieurs minutes)

    Modif: ajout d'une interruption.
    Sur la fenêtre simulation, tu cliques sur C.1 et toutes les leds s'allument. Tu recliques et elles s'éteignent de façon aléatoire.
    IL est certainement possible de faire la même chose en C. J'ai vu un "delay_ms(x)", avec un x=aléatoire de 1000 à 20000



    Code:
    #picaxe 20M2
    
    setint %00000010,%00000010
    dirsB =%11111111
    dirsC =%10111000
    
    Do
    random W0
    b0=b0//12
    w1= b1//20*100
    
    select case b0
    
    case 0
    pause w1
    toggle C.3
    
    case 1
    pause w1
    toggle C.4
    
    case 2
    pause w1
    toggle C.5
    
    case 3
    pause w1
    toggle C.7
    
    case 4
    pause w1
    toggle B.0
    
    case 5
    pause w1
    toggle B.1
    
    case 6
    pause w1
    toggle B.2
    
    case 7
    pause w1
    toggle B.3
    
    case 8
    pause w1
    toggle B.4
    
    case 9
    pause w1
    toggle B.5
    
    case 10
    pause w1
    toggle B.6
    
    case 11
    pause w1
    toggle B.7
    
    end select
    
    loop
    
    interrupt:
    outpinsB =%11111111
    outpinsC =%10111000
    pause 1000
    setint %00000010,%00000010
    
    return
    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  12. #42
    alainav1

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    bonjour,
    pour revenir au sujet de depart "simulation d'une maison de modelisme "le realisme c'est de compresser le temps .

    c'est a dire de creer un environnement du reseau avec un extinction progressive de l'environement du reseau et d'allumer une à une les maison en fonction de la luminosité ambiante .
    donc quelques LDR sur le reseau une simulation de l'evolution de la luminosite en 30minutes si tu es en 1/87 par exemple avec l'horloge de la gare en accceleré par exemple .
    (un allumage aléatoire n'est pas le reflet de la réalité ).
    mais ce n'est que mon avis !
    cordialement
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  13. #43
    chouchou76250

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    Salut a tous


    J'ai recu mon kit de debugg jeudi soir et depuis je travail dessus

    resultat.(par rapport au programme ci joint)

    la boucle principale fonctionne bien, reste a initialiser le Srand avec autre chose que le registre osccon ou status (il ya bien une difference de scenario entre les 2 registres, mais il faut que je trouve le moyen d'voir une "graine (srand) totalement aleatoire. avec quoi. Forhorse tu a proposer de lire la tension sur une patte en l'air mais comme tout bon electronicien, je 'naime pas les patte en l'air. si on utilise un pont diviseur il faut lire en analogique sur une patte du convertisseur A/N ?

    ForHorse, j'ai fait comme tu me l'a dit de tester> observer> coder (mais je le sais depuis longtemps et comme je n'avais pas le debugger...........

    Mag 1 en effet c'est ce que je recherche et je vais y arrive mais cela doit etre transposable dans n'inporte quel pic 16F886 /887 pour pouvoir minituriser et utiliser a d'autre fin.

    Alainav1, ce que je recherche n'ai pas l'allumage aleatoire des maisons mais l'alummage aleatoir des pieces d'une maison, dans un groupe de 5 maisons, qui peuvent en effet s'allumées en fonction des heures ou de la luminositée ambiante

    ci joint le soft
    . Pour une photo ou video, me la demande en direct par mail car je n'ai pas la permission d'en inserer
    Nom : P1030157.JPG
Affichages : 66
Taille : 71,7 Ko
    a plus christophe

    /*
    * File: ecl_12_pieces.c
    * Author: christophe
    *
    * Created on 29 décembre 2012, 11:05
    */

    #include <stdio.h>
    #include <stdlib.h>
    #include <pic.h>
    #include <conio.h>

    #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))

    static bit LED0 @ PORTBIT(PORTC, 0);
    static bit LED1 @ PORTBIT(PORTC, 1);
    static bit LED2 @ PORTBIT(PORTC, 2);
    static bit LED3 @ PORTBIT(PORTC, 3);
    static bit LED4 @ PORTBIT(PORTC, 4);
    static bit LED5 @ PORTBIT(PORTC, 5);
    static bit LED6 @ PORTBIT(PORTC, 6);
    static bit LED7 @ PORTBIT(PORTC, 7);
    static bit LED8 @ PORTBIT(PORTA, 0);
    static bit LED9 @ PORTBIT(PORTA, 1);
    static bit LED10 @ PORTBIT(PORTA, 2);
    static bit LED11 @ PORTBIT(PORTA, 3);
    static bit couloir @ PORTBIT(PORTA, 5);


    //#define )

    // ANSEL = 0b00000000; //met tous les ports en numérique
    // INTCON = 0b10000100; autorise les interruption sur pin RB0 A 7 sur un niveau


    unsigned int i; //Pour la boucle de pause
    unsigned int j; //Pour la 2eme boucle de pause
    unsigned int NA2; //nonbre aleatoire correspondant a tempo aleatoire
    unsigned int NA; //nonbre aleatoire correspondant a tempo aleatoire

    int alea (int iMin, int iMax) // generation mot aleatoire borné
    {
    return (iMin + (rand () % (iMax-iMin+1)));
    }


    //pause functions et interruptions
    void pause_1();







    void main(void)
    {
    OSCCON = 0b01100001; //oscillateur intern utilisé a 4 mhz

    PORTA = 0b00000000; //Bit 0 ,1, 4 a 7 port A a 0
    PORTB = 0b00000000; //Bit 1 a 7 port B a 0 (reserve de led a piloter en plus)
    PORTC = 0b00000000; //Bit 0 a 7 port C a 0

    TRISA = 0b00000100; //bit0,1,2,4,5,6,7 en sortie, bit 3 en entrée (force par config du Pic)
    TRISB = 0b00000001; //bit0 en entrée (ext Interrup) et bit 1 a 7 en sortie
    TRISC = 0b00000000; //bit0 a 7 en sortie

    srand(STATUS);

    while(1)
    {

    NA = alea (1,12);

    if(NA==1)
    LED0 = !LED0;
    pause_1();
    if(NA==2)
    LED1 = !LED1;
    pause_1();
    if(NA==3)
    LED2 = !LED2;
    pause_1();
    if(NA==4)
    LED3 = !LED3;
    pause_1();
    if(NA==5)
    LED4 = !LED4;
    pause_1();
    if(NA==6)
    LED5 = !LED5;
    pause_1();
    if(NA==7)
    LED6 = !LED6;
    pause_1();
    if(NA==8)
    LED7 = !LED7;
    pause_1();
    if(NA==9)
    LED8 = !LED8;
    pause_1();
    if(NA==10)
    LED9 = !LED9;
    pause_1();
    if(NA==11)
    LED10 = !LED10;
    pause_1();
    if(NA==12)
    LED11 = !LED11;
    pause_1();


    }
    }

    void pause_1()

    {
    NA2 = alea(1,12);
    for(j=0;j<NA2;j++); // on va compter entre 0 et 60 tempo aléatoire
    {
    for(i=0; i<40000; i++); // 2emem tempo fixe a ajuster
    }
    }

  14. #44
    alainav1

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    bonjour,
    pour le realisme tu allume donc les pieces dans l'ordre
    couloir puis cuisine salon , le soir chambretc
    c'est plus aleatoire c'est organisé mais plus realiste
    cordialement
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  15. #45
    chouchou76250

    Re : eclairage aleatoire par led de plusieures pieces d'une maison pour modelisme ferroviaire

    bonsoir a tous

    Mon programme est fini avec 2 interuptions pour le controle l'eclairage aleatoire et l'eclairage fixe. Interuptions necessaires pour passer d'un mode a l'autre sans avoir a attendre la fin de la double tempo pour l'allumage des led(jusqu'a 3mn au max de tempo). En effet meme en intercallant dans la boucle de la double tempo une scrutation des 2 commandes celles ci etaient activées au bout de quelques secondes ce qui ne me convenait pas alors qu'avec les 2 interuptions c'est instantané

    merci a tous christophe
    dernier message

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Réponses: 20
    Dernier message: 24/03/2012, 18h01
  2. Detecteur de courant pour modélisme ferroviaire DCC
    Par invite0b03454f dans le forum Électronique
    Réponses: 25
    Dernier message: 30/12/2011, 14h23
  3. alimentation pour reseau ferroviaire modelisme
    Par invite63a68407 dans le forum Électronique
    Réponses: 10
    Dernier message: 27/11/2008, 08h00
  4. Circuit de commande pour alimentation (Modelisme ferroviaire)
    Par invitee354b208 dans le forum Électronique
    Réponses: 15
    Dernier message: 05/01/2008, 13h15
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...