• Contact
  • Mini LED dobbelsteen



    Inleiding
    Kolonisten van catan, risk, yahtzee en cluedo. Het zijn allemaal spelletjes waarvoor je één of meerdere dobbelstenen nodig hebt. Natuurlijk kun je hiervoor een gewone ouderwetse houten dobbelsteen gebruiken maar voor iemand die geïnteresseerd is in elektronica, is een LED dobbelsteen natuurlijk veel leuker om te gebruiken. En er zitten ook een paar voordelen aan een LED dobbelsteen. Deze kan bijvoorbeeld niet van de tafel afrollen en het getal is ook nog zichtbaar als het spel in een donkere ruimte wordt gespeeld. Een jaar geleden is al een keer een LED dobbelsteen project geweest. Deze nieuwe mini LED dobbelsteen is gebasseerd op de vorige LED dobbelsteen project maar heeft enkele aanpassingen ondergaan. Zoals de naam doet vermoeden is de nieuwe LED dobbelsteen een stuk kleiner zodat deze een stuk goedkoper geproduceerd kan worden. Ook is er in de software een aanpassing gemaakt zodat de LED-dobbelsteen in slaapstand gaat als deze een tijdje niet gebruikt wordt. Dit zorgt voor energiebesparing waardoor de batterij langer mee kan gaan.

    Benodigdheden

    Schakeling
    Hieronder staat het schema en de print-layout van de mini LED dobbelsteen


    Schema van de mini LED dobbelsteen


    print-layout van de mini LED dobbelsteen

    Onderdelen

    Code voor PIC

    /**************************************************************
    * Auteur: K.J. Kok                                            *
    * Copyright: (c) Digibytez, 2007-2011.                        *
    * Datum: 22-07-2011                                           *
    * Chip: PIC12F629                                             *
    * Omschrijving: Code voor de PIC van de mini LED dobbelsteen  *
    * project.                                                    *
    * Zie http://www.digibytez.nl                                 *
    **************************************************************/
    
    // Declaraties
    int aantal_ogen;                                 // Variabele voor huidige aantal ogen
    int aantal_ogen_vorige = 0;                      // Variabele voor vorige aantal ogen
    int teller;                                      // Variabele voor de teller
    int s_ingedrukt = 0;                             // Variabele voor de stand van de schakelaar
    unsigned int sleep_timer = 0;                    // Variabele voor het bijhouden van de tijd voor slaapstand
    void refresh_display();                          // Functie voor het updaten van de dobbelsteen
    
    // Hoofdprogramma
    void main() 
    {
       TRISIO = 0b00001000;                          // Poort GP3 als ingang instellen
       GPIO = 0b00010111;                            // Alle LEDs van de dobbelsteen aanzetten
       CMCON = 0x07;                                 // Comparators uitzetten
       OPTION_REG = 0x87;                            // Geen pull-ups, instellen prescaler 1:256
       INTCON = 0xA0;                                // Timer0 interrupt aanzetten
    
       Delay_ms(100);                                // Kleine delay voor stabilisatie voeding
       // Start programma
       while(1) 
       {
          if(GPIO.B3==1)                             // Als de drukschakelaar wordt ingedrukt
          {
             delay_ms(25);                           // 25ms wachten -> ter voorkoming van contactdender
             s_ingedrukt = 1;                        // Drukschakelaar is ingedrukt
             while(s_ingedrukt==1)                   // Zolang schakelaar ingedrukt is
             {
                refresh_display();                   // Updaten van de dobbelsteen
                s_ingedrukt = GPIO.B3;               // Controleren stand drukschakelaar.
                delay_ms(50);                        // 50ms wachten
             }
             for(teller=0;teller<20;teller++)        // 20 keer de loop doorlopen
             {
                   refresh_display();                // Updaten van de dobbelsteen
                   delay_ms(60);                     // 60ms wachten
             }
          }
          else                                       // Drukschakelaar wordt niet ingedrukt
          {
          }
       }
    }
    
    // Functie voor het updaten van de dobbelsteen
    void refresh_display()
    {
       aantal_ogen = rand()%6+1;                     // Random getal tussen 1 en 6 genereren
       while(aantal_ogen_vorige==aantal_ogen)        // Als de huidige aantal ogen gelijk is aan
       {                                             // de vorige aantal ogen
    
          aantal_ogen = rand()%6+1;                  // Random getal tussen 1 en 6 genereren
       }
       switch (aantal_ogen)                          // Juiste aantal LEDs aanzetten
       {
          case 1: GPIO = 0b00000001;  break;         // Cijfer 1 tonen op dobbelsteen
          case 2: GPIO = 0b00000100;  break;         // Cijfer 2 tonen op dobbelsteen
          case 3: GPIO = 0b00000101;  break;         // Cijfer 3 tonen op dobbelsteen
          case 4: GPIO = 0b00010100;  break;         // Cijfer 4 tonen op dobbelsteen
          case 5: GPIO = 0b00010101;  break;         // Cijfer 5 tonen op dobbelsteen
          case 6: GPIO = 0b00010110;  break;         // Cijfer 6 tonen op dobbelsteen
       }
       aantal_ogen_vorige = aantal_ogen;             // Huidige aantal ogen opslaan
       sleep_timer = 0;                              // sleep_timer voor slaapstand op 0 zetten
    }
    
    // Interrupt functie
    void interrupt() 
    {
       if(INTCON.T0IF)                               // Als Timer0 interrupt optreedt
       {
          sleep_timer++;                             // sleep_timer verhogen met 1
          if(sleep_timer==320)                       // Als dobbelsteen 20 seconden inactief is
          {
             GPIO = 0b00000000;                      // Alle LEDs uitzetten
             INTCON = 0x08;                          // Timer0 interrupt uitzetten en IOC interrupt aanzetten
             IOC = 0x08;                             // IOC alleen voor GPIO.B3
             asm SLEEP;                              // PIC in slaapstand brengen
             delay_ms(25);                           // 25ms wachten -> ter voorkoming van contactdender
             IOC = 0x00;                             // IOC register leegmaken
             sleep_timer = 0;                        // sleep_timer op 0 zetten
             INTCON = 0xA0;                          // IOC interrupt uitzetten en Timer0 interrupt aanzetten
             GPIO = 0b00010111;                      // Alle LEDs van de dobbelsteen aanzetten
             while(GPIO.B3)                          // Zolang de druk schakelaar nog is ingedrukt in loop blijven
             {
                sleep_timer = 0;                     // sleep_timer op 0 zetten
             }
             delay_ms(25);                           // 25ms wachten -> ter voorkoming van contactdender
          }
          else                                       // Geen Timer0 interrupt -> niks doen
          {
          }
          INTCON.T0IF = 0;                           // TOIF bit voor Timer0 interrupt op 0 zetten
       }
       else 
       {
       }
    }
    

    Werking
    De 7 LEDs geven aan welk getal is gegooid net zoals dat op een echte dobbelsteen wordt aangegeven. Als de drukschakelaar ingedrukt wordt dan begint de PIC met random getallen te kiezen die worden weergeven. Als vervolgens de drukschakelaar losgelaten wordt dan stopt de dobbelsteen bij een bepaald getal. De PIC is zo geprogrammeerd dat je als gebebruiker van de dobbelsteen geen invloed hebt op het getal wat gegooid wordt.
    Deze schakeling werkt op een 9V batterij

    Downloads


    In het download pakket zit een schema en een printlayout die je met behulp van Eagle kunt openen. Verder bevat het download pakket een hex-bestand met het programma voor de PIC die je direct met een PIC programmer in de PIC kunt laden.

    Film

    Hieronder staat een film van de mini LED dobbelsteen.

    Bestellen
    De volgende producten kun je bestellen:

    Advertentie

    © 2007-2011 Digibytez. Bekijk de disclaimer