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

Dac 16F877 Basic



  1. #1
    ledinblue

    Question Dac 16F877 Basic


    ------

    Bonjour à tous,
    Je suis débutant dans la programmation des pic et je me suis tourné vers le Basic. Mon premier montage est assez simple, afficher une tension sur un lcd. La partie afficheur fonctionne mais par contre la partie DAC elle ne fonctionne pas. Peux-etre un problème au niveau des registres?
    Voici le code du PIC
    Merci de votre aide
    Code:
    '****************************************************************
    '*  Name    : UNTITLED.BAS                                      *
    '*  Author  : [Ancion Frédéiric]                    *
    '*  Notice  : Copyright (c) 2006 [Xtremelaser] *
    '*          : All Rights Reserved                               *
    '*  Date    : 05/09/2006                                        *
    '*  Version : 1.0                                               *
    '*  Notes   : Controle de la consigne du laser méditec 3w+ feed back du courant sur afficheur lcd 4*20                                                  *
    '*          :                                                   *
    '****************************************************************
            'Voir page 21 pour interruot AD
    xtal = 20        
    DECLARE LCD_DTPIN PORTB.4 										 'Port des données data
    DECLARE LCD_ENPIN PORTB.3										 'Pin de la broche En du lcd	  
    DECLARE LCD_RSPIN PORTB.2										 'Pin de la broche RS du lcd
    DECLARE LCD_INTERFACE 4											 'Interface 4Bits
    DECLARE LCD_LINES 2	  											 'Nombres de lignes du lcd
    Pause 500	
    print $FE        
            
    
    '****************************************************************
    'Config des Registres
    '****************************************************************
     device = 16F877A
    'adcon 0 = %10
    
            ADIN_RES	10					' Set the resolution to 10
             ADIN_TAD	FRC					' Choose the RC osc for ADC samples
            	ADIN_STIME	100        			' Allow 100us for charge time
            
            Dim Raw 		as Word			
    		Dim Value 		as Word
          	Dim Volts 		as Byte
          	Dim Millivolts 	as Word	
           	
           Delayms 500						' Wait for PICmicro to stabilise
            Cls              				' Clear the LCD
    		TRISA. = 1						' Setup bit-0 of PortA as an input
          	ADCON1 = %10000000				' Set PORTA analog and right justify result
          	
    Again: 	Raw = ADIN 0					' Read the ADC
           Print at 2,1,"RAW= ",@Raw,"   "	' Display the RAW data
           Value = 489 *(Raw / 10)			' Quantasize the result		
           Volts = Value / 10000
    		Millivolts = (Value // 10000) / 100
           	Print at 1,5,Dec1 Volts,".",Dec2 Millivolts,"V" ' Display the result
           	pause 500
          	Goto Again						' Do

    -----

  2. Publicité
  3. #2
    freepicbasic

    Re : Dac 16F877 Basic

    effacer ça
    'adcon 0 = %10

    et mettre adcon0 = %01
    qui met le convertisseur ON

    Je ne suis pas sur que le ADIN le gère !
    donc le mettre en clair


    Millivolts = (Value // 10000) / 100
    La double / c'est normal ?

    Tu es sur qu'il reste quelque chose au bout de ta division, le type est "WORD" donc un entier !
    Pour avoir un chiffre à virgule c'est des "float" qu'il faut.

    un conseils ; evite les fonctions mathématiques très gourmandes en ressources prog et cycles machines.

  4. #3
    ledinblue

    Re : Dac 16F877 Basic

    Merci de ta réponse, que me conseilles tu à la place d'une fonction mathématique ? je vais tester ca demain avec les nouveau paramètres.
    merci de ton aide

  5. #4
    freepicbasic

    Re : Dac 16F877 Basic

    Il est préférable d'utiliser les décalages qui correspondent au division et multiplication par 2 , et les soustractions additions.

    Le fait de bien calibrer ses chiffres , je veux dire utiliser le type le plus petit possible.
    Utiliser un float pour une variable qui varie entre 1 et 10 , c'est très mal adapté ...
    bien sur, si c'est possible.

  6. A voir en vidéo sur Futura
  7. #5
    mister_e

    Re : Dac 16F877 Basic

    en fait, les floats sont a peu pres inutile dans 90% des cas, et comme precedement mentionné, elles sont longues a executer et demande beaucoup d'espace code pour pas grands chose... en générale du moins.

    Disons que 12345 représente 12.345 volts... pourquoi utiliser les float pour afficher? Tu afficher les 2 premiers chiffres, affiche le point et ensuite les trois derniers chiffres.

    Avec PROTON, a ce que je me souviens....
    Code:
    Dim WordA As Word
    Dim WordB As Word
    
    WordA=12345
    WordB=WordA/1000
                   
    Print Dec WordB, ".",DEC3 WordA," Volts"

  8. #6
    mister_e

    Re : Dac 16F877 Basic

    PicBasic Pro
    Code:
    WordA var word
    Worda=12345
    
    lcdout dec worda dig 0,dec worda dig 1,".",dec3 worda," Volt"
    Il se peut que PROTON suporte aussi la fonction DIG dans PRINT... pas certain.
    Steve

  9. Publicité

Discussions similaires

  1. DAC et connecteur VGA
    Par makaveli85 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/05/2007, 12h28
  2. Pic 16f877 Pic basic pro conseil
    Par ledinblue dans le forum Électronique
    Réponses: 10
    Dernier message: 04/01/2007, 17h26
  3. emetteur/recepteur avec adc/dac
    Par viper270202 dans le forum Électronique
    Réponses: 0
    Dernier message: 08/11/2006, 16h35
  4. DAC 16 bits := DAC715P
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 0
    Dernier message: 03/04/2006, 15h13
  5. calcul AOP et DAC ?
    Par angelfire0808 dans le forum Électronique
    Réponses: 3
    Dernier message: 03/02/2005, 17h46
Découvrez nos comparatifs produits sur l'informatique et les technologies.