Jump to content

pilo

Frequent Writer
  • Posts

    1,093
  • Joined

  • Last visited

  • Days Won

    4

Posts posted by pilo

  1. ben on veux 6 valeurs (ou 7 valeurs), soit codé sur 3 bits :

    5/7 = 0.714V

    soit les valeurs : 000XXXX, 001XXXX, 010XXXX, 011XXXX, 100XXXXX, 101XXXXX, 110XXXXX et 111XXXXX.

    000XXXX pour une tension < 0.714

    001XXXX 0.174 < tension < 1.42

    etc...

    ca laisse une grosse marge a chaque fois :)

    on prends 10k comme résistance total, soit 1.25k pour chaque résistance du pont diviseur, on tombe en plein milieu de chaque plage, après au niveau du code il suffit de rajouter un & avec le masque 1110000000 sur la valeur 10bits.

    Meme avec une tolérance de 5% sur les résistance, on devrait rester dans les plages.

  2. Actually the row number seems to be increment before the notify togle event is called.

    So I tried this (I know I shouldn't call anything in SR_Service_Finish).

    /////////////////////////////////////////////////////////////////////////////
    // This function is called by MIOS when an button has been toggled
    // pin_value is 1 when button released, and 0 when button pressed
    /////////////////////////////////////////////////////////////////////////////
    void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam
    {
    
      if(pin == 128) {
        unsigned char i;
    
        for(i = 0; i < 8; i++) {
          MIOS_MF_FaderMove(i, 800);
        }
      }
    
      if(pin == 129) {
        unsigned char i;
    
        for(i = 0; i < 8; i++) {
          MIOS_MF_FaderMove(i, 400);
        }
      }
      if(pin == 130) {
        unsigned char i;
    
        for(i = 0; i < 8; i++) {
          MIOS_MF_FaderMove(i, 000);
        }
      }
    
    
      else if(pin > 8) {
        MIOS_LCD_CursorSet(0x00); 
        MIOS_LCD_PrintBCD5(pin); 
      }
      
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // This function is called by MIOS after the shift register have been loaded
    /////////////////////////////////////////////////////////////////////////////
    void SR_Service_Finish(void) __wparam
    {
      unsigned char i;
      unsigned char row_tmp = row;
      for(i = 0; i < 8; i++) {
        if(MIOS_DIN_PinGet(i) == 0) {
          DIN_NotifyToggle(128+row_tmp*8 + i, 1);
        }
      }
      MIOS_DOUT_PinSet1(row); 
      row++;
      if(row > 7) row = 0;
      MIOS_DOUT_PinSet0(row);
    }

    But i still haven't got the right rown number... and I'm still trying to find where I am wrong. Maybe another solution is to update the row number and DOUT state, if DIN notify toggle has got a higher "priority" than USER_tick?

  3. Hi!

    here's my source code for handling a switching matrix with the C apps, using DIN and DOUT :

    int row
    
    ...
    void Init(void) __wparam
    {
      int i;
    
      /* Matrix Init */
      for(i = 0; i < 8;i++) {
        MIOS_DOUT_PinSet1(i);
      }
    
      row = 0;
      MIOS_DOUT_PinSet0(0);
    }
    
    ...
    
    void SR_Service_Prepare(void) __wparam
    {
      MIOS_DOUT_PinSet1(row); 
      row++;
      if(row > 7) row = 0;
      MIOS_DOUT_PinSet0(row);
    }
    
    void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam
    {
      MIOS_LCD_CursorSet(0x00); 
      MIOS_LCD_PrintBCD5(pin); 
      MIOS_LCD_CursorSet(0x40); 
      MIOS_LCD_PrintBCD5(row); 
    }
    

    Works well. Maybe need too add some bouncing handling stuff too. And there's a small shift in the switch row number  ;D

  4. ok ;)

    now I read again your first message and understand what you meant :) I also make a big siwtch/led pcb before, but I don't plan to use it anymore... and I switch to breadbpard for that (easier to place components, and a lot of wire cna be solder on those.

    For the emulator stuff  : I can't compile mios with gpasm (macro problems) and so it's very hard to see why it doesn't works... only with the hex file, I get no message on the screen, but it works for old pic16f877 apps, so I guess it's possible to run mios.

  5. Ok thanks ;)

    I try to merge both bootstrap and mios hex file, without luck  >:(

    pic16f firmware works (with LCD).

    However, you only need to add two NOPs at 0x0000, and the program should start without the bootstrap loader

    You mean a nop at 0x0000 and (replace the goto 0x0...) and another one at 0x0004 ? (replace the sam kind of goto) as there's already a nop at 0x0002.

    I think I've spent almost as much time soldering and piecing together a test circuit with lights and buttons as I will on the final box. It's sad doing all that stuff and knowing you'll just have to tear it all to pieces if it works.

    I think you mean if it doesn't work? The aim of an emulator is just for "fun" and debugging apps :)

  6. Hi!

    I'm looking for the bootstrap loader source code.

    I want it to be able tu use .cod file for running it with gpsim pic emulator, in order to make a real hardware emulator for midibox.

    I can work with hex file only (and compile bootstrap mios and apps hex file into one big hex file), but I will not have the symbol stuff in the emu... which is not very easy to do.

    Thanks

    Pilo

  7. mmm le problmème c'est que si tu met un 12V non réguler pour le potard, ca va faire osciller les valeurs, il faut impérativement mettre une zener ou un regulateur.

    Pour l'alim :

    oui en effet la question n'est pas très claire,  mais on a tous été novice ;)

    Alors, l'alimentation, ca dépend ce que tu prends :

    si tu prends un transformateur (un abaisseur de tension ALTERNATIVE), alors tu peuxla brancher directement sur le module core (qui dispose du pont de diode et des condos pour redresser et filtrer la tension). Si tu utilise une alimentation CONTINUE, alors la tu peux aussi la brancher directement sur le module core,comme dans le cas du transfo (la tensionne sera pas redresser), et le régulateur du module core s'occupera de réguler a 5v.

    En revanche, la tension nécéssaire pour les pot, qui doit aussi être régulé, il faudra faire quelque chose. Donc soit un regulateur, soir une régulation a base de zener. A partir de 12V, comme tu le dis tu arrivera seulement à 4.8V (c'est pourquoi je trouve la solution soft plus simple pour gerer le problème, elle est "tout terrain").

    Donc pour le 0V (la masse), que tu va utiliser pour tes potentiomètre, "c'est celui" du module core (il y a 2 pin pour le connecteurs de potards avec le 5V et le 0V). Si tu utiliser une tension de reference externe pour l'histoire des 40%, le 0V, commun a tout le circuit, sera le meme. Donc tu peux le prendre "n'importe ou" (module core, AIN).

    voila j'èspère que j'ai été claire ::)  (j'en suis aps sur alors n'hésite pas a demander plus d'info)

  8. en fait sur un regulateur de 78xx il fait que la tension d'entrée soit supérieur de 3V à la tension de sortit, mais pas plus de 7V de plus (donc pour 5V, il te faut au minimum 8V, et un maximum de 12V).

    Meme si en pratique ca peut marcher dans une plage un peu plus large :)

    Pour les zener, c'est différent, mais en général c'est fait pour des petites puissance.

    Une diode zener laisse passer le courant en sens inverse la diode quand la tension dépasse la tension de zener. L'avantage c'est que cette tension de seuil zener est la tension présente ensuite au borne de la diode. il suffit de la mettre en série avec une résistance (dont la valeur dépend de la puissance consomer) et tu as une tension de référence :)

  9. ah oui, imbatable la solution d'un tension plus élevé :)

    attention toute fois, 9V c'est peut etre un peu sjute? car si les potards ne couvre que 40% de la course, meme avec 9V on derait pas encore faire du 0-5V.

    Donc je pensais carément faire 12V, avec une zener pour éviter la tension de chutte necessaire (la ca consome pas bcp).

    Pour le core oui il est alimenter en 5V, et le régulateur est sur le module core ;)

  10. En fait faire un boitier avec un plan incliné n'est pas facile.. Mais ne y pensant cette semaine j'ai trouvé une astuce qui peut rendre pas mal (je sais pas avec quoi faire des plans....)

    Deja, éviter les découpe autre qu'avec des angles droits, trop dur a faire a la main, et trop couteuse, pareil pour le pliage...

    je suis entrain de tester la faisabilité de boitier rack 19" avec seulement de l'alu acheter a la decoupe et des équèrres en alu, prix de reviens très faible...

    Ce que j'appelle equerre c'est en fait un profilé ALU en L (acheter par barre de 2m).

    j'essais de faire un dessin....

  11. Ce genre de boitier semble facile a trouver non? je regarde ce soir dans mes catalogue.

    Sinon, tu peux le faire en entier... avec des equerre d'alu (genre 1.5x1.5cm) et tu fait découper des plaques d'alu (ca coute pas très cher).

    Je me demandais si j'allais pas faire pareil pour la mienne.....

  12. Mmm je crois que je vois ce que tu veux dire : comme le controleur envoie l'info de sa valeur sur 10 bits, il couvre largement plus que le tiers des 127 valeurs que l'on veut encoder sur ce type de controleur donc il suffit d'écrire la routine qui va tromper en quelque sorte le système en divisant la valeur réelle du controleur par un ratio qui permette d'aboutir à une plage réelle numérique de 0 à 127.

    Je pense que tu as compris ;) c'est tout a fait ca!

    Sinon la solution matérielle me semblerait la mieux pour être plus cohérent, malheureusement je suis meilleur en soft qu'en hard  (où à part quelques soudures vites fait je suis novice

    Va pour la solution soft alors, car j'ai deja vu ce genre de question trainer sur le forum, si on a un controlleur qui peut pas donner de valeur dans la plage 0/5V, une petite routine de convertion et hop :) Et puis étant donné la puissance du PIC, ce genre de solution est tout a fait approprié je pense (alors que rajouter du hardware, c'est plus lourd et plus difficile a mettre au point).

×
×
  • Create New...