09/09/2006, 12h17
|
Sujet Dac 16F877 Basic - Message #1
|
Date d'inscription: septembre 2006
Âge: 20
Messages: 12
|
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
'****************************************************************
'* 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
|
|
|
|
Aujourd'hui
|
|
|
|
Liens sponsorisés
|
|
|
|
|
09/09/2006, 19h57
|
Sujet Dac 16F877 Basic - Message #2
|
Date d'inscription: août 2006
Localisation: France
Âge: 52
Messages: 1 795
|
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.
|
|
|
|
09/09/2006, 20h07
|
Sujet Dac 16F877 Basic - Message #3
|
Date d'inscription: septembre 2006
Âge: 20
Messages: 12
|
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
|
|
|
|
09/09/2006, 20h53
|
Sujet Dac 16F877 Basic - Message #4
|
Date d'inscription: août 2006
Localisation: France
Âge: 52
Messages: 1 795
|
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.
|
|
|
|
10/09/2006, 21h43
|
Sujet Dac 16F877 Basic - Message #5
|
Date d'inscription: août 2006
Localisation: Montréal, Canada
Âge: 35
Messages: 155
|
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....
Dim WordA As Word
Dim WordB As Word
WordA=12345
WordB=WordA/1000
Print Dec WordB, ".",DEC3 WordA," Volts"
|
|
|
|
10/09/2006, 21h49
|
Sujet Dac 16F877 Basic - Message #6
|
Date d'inscription: août 2006
Localisation: Montréal, Canada
Âge: 35
Messages: 155
|
Re : Dac 16F877 Basic
PicBasic Pro
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
|
|
|
|
|
 |
Bienvenue |
 |
Si ceci est votre première visite, vous devez vous inscrire avant de pouvoir envoyer des messages. En étant inscrit vous pourrez poster votre question, participer aux débats, joindre vos images... alors n'attendez-plus, cela vous prendra 1 minute !
Pour commencer à lire les messages, depuis la page d'accueil des forums, sélectionnez le forum qui vous tente et partez ensuite à sa découverte...
|
 |
Publicité |
 |
|
| A voir aussi (Futura Sciences n'est pas responsable du contenu de ces publicités) |
|
|
| Outils |
|
|
| Modes d'affichage |
Mode linéaire
|
Règles de messages
|
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui
Le code HTML peut être employé : non
|
|
|
Fuseau horaire GMT +2. Il est actuellement 23h57.
Propulsé par vBulletin
Copyright © 2000 - 2008, Jelsoft Enterprises Ltd. Tous droits réservés.
Traduction par l'association vBulletin francophone
|
|