Dac r2r, ADC et pic 16F887
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 ;
    Nom : 10964805_973685255992557_102026421_o.jpg
Affichages : 162
Taille : 87,9 Ko

    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. #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

  3. #3
    freepicbasic

    Re : aide ADC pic 16f788

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

  4. #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

  5. A voir en vidéo sur Futura
  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. #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

  8. #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

  9. #8
    yassine2255

    Re : aide ADC pic 16f788

    merci bien

  10. #9
    yassine2255

    Dac r2r

    Nom : mtg2.png
Affichages : 153
Taille : 33,6 Ko
    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 !

  11. #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 !

  12. #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.

  13. #12
    Antoane
    Responsable technique

    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.

  14. #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.

  15. #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 !

  16. #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);
    }
    Nom : schema.png
Affichages : 133
Taille : 44,2 Ko

  17. #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+

  18. #17
    JPL
    Responsable des forums

    Re : Dac r2r

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

  19. #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

    Nom : isis.png
Affichages : 133
Taille : 45,6 Ko

  20. #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 ..

  21. #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

  22. #21
    yassine2255

    Re : ADC 8 bits PIC16f887

    que proposer vous comme solution ?

  23. #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

  24. #23
    yassine2255

    Re : ADC 8 bits PIC16f887

    et je trouve pas comment faire la configuration de registres adc

  25. #24
    Antoane
    Responsable technique

    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.

  26. #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

  27. #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

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 invitee507dba1 dans le forum Électronique
    Réponses: 11
    Dernier message: 26/03/2010, 11h05
  5. 16f887 a 16f636
    Par inviteb12aee8d dans le forum Électronique
    Réponses: 7
    Dernier message: 09/06/2009, 07h07
Découvrez nos comparatifs produits sur l'informatique et les technologies.