Un Voltmétre +5v. sur PC, avec un pic
16F88, un MAX233 et un
condo...
(Utilisation
d'un des CAN et de la sortie RS232 d'un PIC16F88)
Ce à quoi ça ressemble en utilisation :
(L'echantillonage se fait à environ 10Hz,
ci-dessus environ 35 secondes d'échantillonage)
Le schéma simplissime :
Le code Mikrobasic :
' choisir
l'oscillateur interne du pic dans le logiciel
' de programmation (winpic,
icprog, ...) : IntRC NOCLKOUT
' etdésactiver le reste des options
(watchdog,...)
program voltmeter
dim mot_adc as word
dim octet_adc as integer
main:
OSCCON =
%1110000 ' utilisation oscillateur interne @
8Mhz
while
testbit(OSCCON,IOFS)= 0 wend ' et attente stabilisation oscillateur
'initialisation et configuration ports
TrisA=%00000100 ' port RA2 en
entrée, autres ports RA en sorties
TrisB=%00000000 ' ports RB en
sorties
PortA=%00000000 ' tous les RA @ 0
PortB=%00000001 ' allume une led sur RB0=
en route (optionnel)
ANSEL=%00000100 ' config.ADC...voir datasheet du
pic 16F88
ADCON1=%01000000 ' config.ADC...voir datasheet du pic
16F88
Usart_Init(9615) ' où on utilise les fonctions Mikrobasic de
communication
RS232
' (Usart_Init(),Usart_Write()... voir help Mikrobasic
'programme principal (en boucle)
'où on utilise en plus la fonction
Mikrobasic de gestion des ports CAN
'(Adc_Read())... voir help
Mikrobasic
boucle:
mot_adc = Adc_Read(2) ' on lit le word
résultat conversion Tension sur RA2
mot_adc = mot_adc div 4 ' on divise le
résultat (10bits) pour en faire un octet
octet_adc =
mot_adc ' et ouais, on perd en précision (5v/256), mais
cé trop pratique ;O)
Usart_Write(octet_adc) ' pour ensuite envoyer l'octet via
TX RS232 (RB5)...et le décoder
;O]
' plus simple à gérer qu'un word...de 10bits...
Delay_ms(80)
goto boucle
goto boucle ' ...sécurité ;O] pour être sûr que ça
boucle ;O]
end.
Le code VB :
' programme
voltmeter
' (objets utilisés :
Command1,Command2,Text1,Label1 et Image1)
Dim PortCOM
Dim octet_adc
Dim
positionX
Dim positionY
Private Sub Command1_Click() '
bt initialisation connection RS232
PortCOM = 1
Baud =
9600
Parity = 0
Bits = 8
Stp = 1
Buffer
= 1
a = OPENCOM(PortCOM, Baud, Parity, Bits, Stp, 100,
Buffer)
If a = 0 Then Label1.Caption = "COM error" Else Label1.Caption
= "COM open"
If a = 0 Then PortCOM = 0
positionX = 0
Picture1.Line (0, 205)-(400, 205)
Picture1.Line (0, 154)-(400,
154)
Picture1.Line (0, 103)-(400, 103)
Picture1.Line (0,
52)-(400, 52)
End Sub
Private Sub Command2_Click() '
bt efface écran
Text1.Text = "0.00 V"
positionX =
0
Picture1.Refresh
Picture1.Line (0, 205)-(400,
205)
Picture1.Line (0, 154)-(400, 154)
Picture1.Line (0,
103)-(400, 103)
Picture1.Line (0, 52)-(400, 52)
End Sub
Private Sub Timer1_Timer() '
programme principal
If PortCOM > 0 Then
Do
Dat =
READBYTE(PortCOM)
DoEvents
If Dat > 0
Then
octet_adc =
Int(Dat)
Text1.Text =
Str$(octet_adc * 0.02) + " V"
Text1.Refresh
positionY = 256 -
octet_adc
Picture1.Line
(positionX, 256)-(positionX, positionY)
Else
Picture1.Line (positionX,
256)-(positionX, 255)
End
If
positionX = positionX +
1
If positionX > 400
Then
positionX =
0
Picture1.Refresh
Picture1.Line (0, 205)-(400,
205)
Picture1.Line (0,
154)-(400, 154)
Picture1.Line (0, 103)-(400,
103)
Picture1.Line (0,
52)-(400, 52)
End If
Loop Until Dat = -1
End If
End Sub
Private Sub Form_Unload(Cancel
As Integer) ' stop connection à la fermeture
CLOSECOM PortCOM
End Sub
Téléchargements :
Télécharger tous les fichiers du projet MikroBasic
Télécharger tous les fichiers du projet VisualBasic
Télécharger le fichier VoltMeter.exe compilé, pret à être executé sous XP...
Télécharger le fihier voltmeter.hex prêt à être
charger dans un pic 16F88
' ATTENTION :choisir l'oscillateur interne
du pic dans le logiciel
' de programmation (winpic, icprog, ...) : IntRC
NOCLKOUT
' etdésactiver le
reste des options (watchdog,...)
Pour infos le pic16F88 et le max233 sont actuellement disponibles format PDIP en samples chez leurs constructeurs respectifs...Une question? mon mail vede@free.fr ;O]
Améliorations futures : étalonage précis, calculs et utilisation de fréquence(s) précise(s), utilisation du mot entier, de tous les ports can "simultanément"... passer à un pic 18F pour communiquer avec le pc via USB (+ vite)...etc...etc... ;O]