Dac 16F877 Basic
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Dac 16F877 Basic



  1. #1
    invite4ff7103d

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

    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.

  3. #3
    invite4ff7103d

    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

  4. #4
    invitef86a6203

    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.

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

    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"

  7. #6
    invite6ceed97c

    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.

Discussions similaires

  1. DAC et connecteur VGA
    Par invitecb771c45 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/05/2007, 13h28
  2. Pic 16f877 Pic basic pro conseil
    Par invite4ff7103d dans le forum Électronique
    Réponses: 10
    Dernier message: 04/01/2007, 18h26
  3. emetteur/recepteur avec adc/dac
    Par invite2588126d dans le forum Électronique
    Réponses: 0
    Dernier message: 08/11/2006, 17h35
  4. DAC 16 bits := DAC715P
    Par invite3c59dc04 dans le forum Électronique
    Réponses: 0
    Dernier message: 03/04/2006, 16h13
  5. calcul AOP et DAC ?
    Par invite6627a69d dans le forum Électronique
    Réponses: 3
    Dernier message: 03/02/2005, 18h46
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...