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
' et
dé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]