Répondre à la discussion
Affichage des résultats 1 à 26 sur 26

Dac r2r, ADC et pic 16F887



  1. #1
    yassine2255

    Dac r2r, ADC et pic 16F887

    bonjour , une petite aide sur le montage suivant ;
    10964805_973685255992557_102026421_o.jpg

    el le code mikroC suivant ; si le voltage depasse 2.5 volts la diode s'allume .. mais rien se passe

    Code:
    int adc_value;
    void main() {
    
    
         TRISB0_bit = 1;                                
         TRISC = 0x00;                                 
         PORTC = 0xAA;
    
           adc_value = ADC_Read(2) ;                        
         do {
    
            if(adc_value =128){
                             
                RC0_bit = 1;                              
               
                                     }
                   else
                            
               RC0_bit = 0; 
           }

    -----

    Dernière modification par JPL ; 03/02/2015 à 16h18. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. Publicité
  3. #2
    freepicbasic

    Re : aide ADC pic 16f788

    if(adc_value >128){
    Plus mieux comme ça !

    Dans le cas ou adc_value est un char ça va .
    Si c est un int la valeur est sur 10 bits donc ça serait 512 et pas 128
    A+, pat

  4. #3
    freepicbasic

    Re : aide ADC pic 16f788

    t'as pas oublié un loop ou un while(1) aussi ?
    A+, pat

  5. #4
    yassine2255

    Re : aide ADC pic 16f788

    Code:
    int adc_value;
    void main() {
    
    
    TRISB0_bit = 1; 
    TRISC = 0x00; 
    PORTC = 0xAA;
    
    adc_value = ADC_Read(2) ; 
    do {
    
         if(adc_value =512){
    
          RC0_bit = 1; 
    
                                   }
         else
    
        RC0_bit = 0; 
      
      } while(1);
    }
    ça marche pas la diode reste maintenant allumé quelque soit le voltage
    Dernière modification par JPL ; 03/02/2015 à 16h18. Motif: Ajout de la balise Code (#) pour garder l'indentation

  6. #5
    freepicbasic

    Re : aide ADC pic 16f788

    Le > il est ou ?

    Le while il est ou ?
    Met le ADC dans le while !
    A+, pat

  7. A voir en vidéo sur Futura
  8. #6
    yassine2255

    Re : aide ADC pic 16f788

    freepicbasic
    merci beaucoup ça marche correctement .. maintenant si je veux enregistrer la valeur max dans la memoire pic par un bouton comment je dois faire ?? et merci

  9. Publicité
  10. #7
    freepicbasic

    Re : aide ADC pic 16f788

    tu gère un second bouton de la même façon
    et tu utilise la macro pour écrire en EEPROM (l'icône en haut)

    faudra peut être prévoir une autre fonction pour le lire (la même macro) sinon ça sert pas à grand chose ...
    A+, pat

  11. #8
    yassine2255

    Re : aide ADC pic 16f788

    merci bien

  12. #9
    yassine2255

    Dac r2r

    mtg2.png
    bonjour,
    ceci est le montage
    la valeur de sortie est toujours égale au valeur d'entrée .donc le DAC ne marche pas .. je sais pas pourquoi !

  13. #10
    Yoruk

    Re : Dac r2r

    Les sorties fonctionnent ?

    As-tu testé de placer des leds (avec résistances) au lieu de ton réseau ?

    PS : Le schéma est un poil petit...
    La robotique, c'est fantastique !

  14. #11
    yassine2255

    Re : Dac r2r

    Citation Envoyé par Yoruk Voir le message
    Les sorties fonctionnent ?

    As-tu testé de placer des leds (avec résistances) au lieu de ton réseau ?

    PS : Le schéma est un poil petit...
    oui les sorties sont fonctionnent .. mais par exemple ji la tension est 3.5 volts .. j'obtient en sortie 3.5 volts et ça c'est pas correct
    Code:
    int adc_value;
    
    void main() {
      ANSEL  = 0x04;              // Configure AN2 pin as analog
      ANSELH = 0;                 // Configure other AN pins as digital I/O
      C1ON_bit = 0;               // Disable comparators
      C2ON_bit = 0;
    
    
    TRISB = 0x00;   //output
    TRISC = 0x00;
    TRISD = 0x00;
    PORTA = 0xFF;
    
    do {
    adc_value = ADC_Read(2)>>2 ;
    PORTD = adc_value;
    
    
    
    } while(1);
    }
    Dernière modification par yassine2255 ; 05/02/2015 à 16h02.

  15. #12
    Antoane

    Re : Dac r2r

    Bonjour,

    C'est donc ton programme qui pose problème ?
    Sur combien de bits fais-tu la conversion analogique numérique ?
    " >>2 " signifie bien un décalage de deux bits à droite (i.e. perte de deux bits de poids faible) ?
    Quel est le fonctionnement global recherché ?

    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  16. Publicité
  17. #13
    paulfjujo

    Re : Dac r2r

    bonsoir,


    mais par exemple ji la tension est 3.5 volts .. j'obtient en sortie 3.5 volts et ça c'est pas correct
    et en quoi c'est pas correct ?

    en entree valeur ADC >>2 => value sur 8 bits
    en sortie valeur sur 8 bits .. idem => normal !

    ton schema est vraiment trop petit..meme avec mes lunettes.

  18. #14
    Yoruk

    Re : Dac r2r

    Citation Envoyé par yassine2255 Voir le message
    oui les sorties sont fonctionnent ..
    Testées comment ?

    Sinon pour le reste, tes explications sont un poil vagues...
    La robotique, c'est fantastique !

  19. #15
    yassine2255

    Dac pic 16f877 r2r

    bonjour tout le monde ,
    j'ai besoin d'aide concernant le DAC 8 bits en utilisant le LADDER R2R
    min=2 volts ça doit correspondre à 0 et le max est 4 volts et ça doit correspondre à 255
    donc en 0 volts a l'entrée on doit avoir 0 volts au sortie mais j'obtient 1.99
    ceci mon programme mikroC et le schéma

    Code:
    void main() {
    ANSEL = 0x04; // Configure AN2 pin as analog
    ANSELH = 0; // Configure other AN pins as digital I/O
    C1ON_bit = 0; // Disable comparators
    C2ON_bit = 0;
    
    
    TRISB = 0x00; //output
    TRISC = 0x00;
    TRISD = 0x00;
    PORTA = 0xFF;
    
    do {
    adc_value = ADC_Read(2)>>2 ;
    
    PORTD=adc_value;
    
    } while(1);
    }
    schema.png

  20. #16
    RISC

    Re : Dac pic 16f877 r2r

    Salut,
    C'est vraiment s'embeter pour rien ;=)
    Il existe plein dePIC16 avec des DACs (jusqu'à 10 bits). Regarde ce tableau.
    Pourquoi utiliser un vieux nanard ?
    a+
    Ma marotte ? les microcontrôleurs ;=)

  21. #17
    JPL

    Re : Dac r2r

    Fusion de deux discussions en quasi doublon.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  22. #18
    yassine2255

    ADC 8 bits PIC16f887

    Bonjour ,
    j'ai fait le montage ci joint
    fonctionnement simple d'un ADC puis un DAC
    mais ceci marche correctement que lorsque la valeur max=5 et min = 0
    mais lorsque je veux tester des autres valeurs ex : max=3.5 et min = 1 ..
    3.5 doit correspondre à 255 et 1 doit correspondre à 0 . mais ça marche pas sur ISIS
    lorsque on remplace ces valeurs sur papier dans la fonction linéaire PORTD =(5*adc_value)/(maxi-mini)+ ((5*mini)/(mini-maxi));
    pour la valeur 1 ça suppose de donner 0 en sortie mais j'obtient 2.44
    ceci le code
    Code:
     int adc_value;
     int maxi;
      int mini;
      int val ;
    
    void main() {
      ANSEL  = 0x04;              // Configure AN2 pin as analog
      ANSELH = 0;                 // Configure other AN pins as digital I/O
      C1ON_bit = 0;               // Disable comparators
      C2ON_bit = 0;
    
      TRISA  = 0xFF;              // PORTA is input
       TRISD  = 0; 
        TRISB0_bit=0;
        TRISB1_bit=0;               // PORTB is intput
    
      do {
      val= ADC_Read(2);
      adc_value=val/4 ;  // resolution souhaitée 8 bits seulement
        maxi=3.5; // valeur d'entrée maximale
        mini=1;  // valeur d'entrée maximale
        PORTD =(5*adc_value)/(maxi-mini)+ ((5*mini)/(mini-maxi)); // fonction linaire
    
    
      } while(1);
    }
    s'il vous plait quelqu'un peut m'aider ?? et merci

    isis.png

  23. Publicité
  24. #19
    paulfjujo

    Re : ADC 8 bits PIC16f887

    bonsoir,

    Code:
        maxi=3.5; // valeur d'entrée maximale
        mini=1;  // valeur d'entrée maximale
        PORTD =(5*adc_value)/(maxi-mini)+ ((5*mini)/(mini-maxi)); // fonction linaire
    revoir la relation Entier (int) et Flottant !
    Maxi=3.5 ?? pas possible
    PORTD est un entier 8 bits !
    faire tous les calculs en flottant et au dernier moment l'affecter au PORTB via un cast unsigned char...
    N'importe comment tu ne pourras JAMAIS diviser un bit en sous multiples ..

  25. #20
    carcan

    Re : ADC 8 bits PIC16f887

    Et j'ajouterais : configurer l'ADC en 8 bits directement plutôt que de diviser chaque lecture par 4 (ou faire un décalage vers la droite de 2 bits).

    A+
    Laurent

  26. #21
    yassine2255

    Re : ADC 8 bits PIC16f887

    que proposer vous comme solution ?

  27. #22
    yassine2255

    Re : ADC 8 bits PIC16f887

    float adc_value,maxi,mini ;
    et concernant la configuration ADC 8 bits sous mikroC j'ai trouvé que la seule solution est la division par 4

  28. #23
    yassine2255

    Re : ADC 8 bits PIC16f887

    et je trouve pas comment faire la configuration de registres adc

  29. #24
    Antoane

    Re : ADC 8 bits PIC16f887

    Bonjour,

    Les doublons étant interdis par la charte, tes discussions ont été fusionnées.
    Merci de ne plus en ouvrir de nouvelle portant sur le même problème.
    Dernière modification par Antoane ; 19/02/2015 à 19h02.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  30. Publicité
  31. #25
    paulfjujo

    Re : ADC 8 bits PIC16f887

    Citation Envoyé par yassine2255 Voir le message
    et je trouve pas comment faire la configuration de registres adc

    et le ADC_Init , il est ou ?

    sur reset ADFM=0 => left justified
    il suffit de faire Val=ADRESH;
    pour avoir 0 à 5V => 0 à 255

  32. #26
    yassine2255

    Re : ADC 8 bits PIC16f887

    Code:
    #include <adc.h>
    float value;
    float max,min;
    int32 val ;
    
    void main()
    {
    SET_TRIS_D(0x00);
    
       setup_adc_ports(sAN0);
       setup_adc(ADC_CLOCK_INTERNAL);
       setup_spi(SPI_SS_DISABLED);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
       setup_ccp1(CCP_OFF);
       setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
    
       //TODO: User Code
       max=5;
       min=0;
       while(true)
       {
       SET_ADC_CHANNEL(0);
       value=READ_ADC();
       
       val=(5*value/(max-min))-(5*min/(max-min));
       val=(unsigned char)val;
       
       OUTPUT_D(val);
       }
    }
    je essayé avec pic c compiler je fait le cast mais . pour min =0 et peut n'importe la valeur max c'est correct .. mais lorsque je change min par 2 par exemple ça marche pas

Sur le même thème :

Discussions similaires

  1. Pic 16f887 [timr2]!!
    Par yazeero dans le forum Électronique
    Réponses: 4
    Dernier message: 15/02/2013, 00h06
  2. Les interruptions PIC 16F887.
    Par yazeero dans le forum Électronique
    Réponses: 6
    Dernier message: 30/12/2012, 14h35
  3. Pic 16f887 recalcitrant....!?
    Par DENIS16 dans le forum Électronique
    Réponses: 16
    Dernier message: 06/09/2012, 21h54
  4. PIC 16f887 et MCP3208
    Par lexu dans le forum Électronique
    Réponses: 11
    Dernier message: 26/03/2010, 11h05
  5. 16f887 a 16f636
    Par joloco dans le forum Électronique
    Réponses: 7
    Dernier message: 09/06/2009, 07h07