Bonjour,
J'ai réalisé un petit montage pour commander un servo de modélisme sur la base d'un Mega32 programmé en Bascom
L'appui sur un bouton fait avancer le servo l'autre bouton le fait reculer. L'appui sur les 2 boutons remet le servo en position milieu.
J'utilise également un afficheur 2x16 LCD pour afficher la valeur des positions
Le prog fonctionne mais il doit y avoir une erreur car au bout d'un petit moment le servo s'affole et se met en butée. Souvent le programme plante aussi.
Je débute avec le Bascom.
Voici le listing
' Servo
$regfile = "M32def.dat"
$crystal = 8000000
'les variables
Dim Vservo As Integer 'valeur de position du servo
Dim Vaff As Integer ' valeur portée à l'afficheur après correction
Dim Ligne1 As String * 16
'' Configuration des ports ---------------------
Config Porta = Input
Porta = &B11111111
Config Portb = Output 'port utilisé pour commande LCD et Servo
Config Portd = Output 'le port utilisé pour l'afficheur LCD
'' configuration du LCD--------------------------
Config Lcdmode = Port
Config Lcd = 16 * 2
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portb.7 , Rs = Portb.5
'' configuration Servo---------------------------
Dim D As Byte
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
' ********************Main****** *****************
Cls
Locate 1 , 5
Lcd "bonjour.."
Cursor Off
Waitms 500
Cls
Enable Interrupts
'' Main----------------------------
Vservo = 90
Ligne1 = "Position milieu"
Do
Do
' Test appui sur un bouton----------------------------------------
If Pina.0 = 0 Then ' si bouton UP appuyé
Vservo = Vservo + 1 ' incrémente la variable Valeur de +1
Waitms 10
Exit Do
End If
If Pina.2 = 0 Then ' si bouton Down appuyé
Vservo = Vservo - 1 ' décrémente la variable Valeur de -1
Waitms 10
Exit Do
End If
If Pina.1 = 0 Then ' si bouton réglage appuyé
Vservo = 90
Waitms 10
Exit Do
End If
Loop
Vaff = Vservo - 90 'correction pour afficheur
If Vaff = 0 Then Ligne1 = "Position NEUTRE"
If Vaff > 0 Then Ligne1 = "Position OUVERT"
If Vaff < 0 Then Ligne1 = "Position FERME"
If Vaff > 50 Then
Ligne1 = "Position MAXI"
Vservo = 140
End If
If Vaff < -50 Then
Ligne1 = "Position MINI"
Vservo = 40
End If
Cls
Locate 1 , 2
Lcd Ligne1
Locate 2 , 8
Lcd Vaff ' affiche Valeur
'Positionnement Servo
Servo(1) = Vservo
Loop
End
Merci aux experts en Bascom de me donner votre avis et une piste car je patauge depuis longtemps sans avancer
-----