Bonjour,
(j'avais commencé une programmation en C de se programme, mais trop compliqué, et j'ai perdu trop de temps, donc je le fais maintenant en assembleur, j'ai changé de pic également j'utilise un P16F690)
J'ai un problème avec mon programme.
Je configure mon programme pour qu'il allume 4 leds a 4 seuils de tension différents
led1 = 0,5V
led2=1V
led3=1,5V
led4=2V
Lorsque que je lance mon programme sur mon montage voici ce que je trouve:
Led4 s'allume en premier de 0V à 2,9V, ensuite Led3 s'allume de 2,9V a 3,64V, puis c'est led2 qui s'allume de 3,64V à 4,21V enfin c'est led1 qui s'allume de 4,21V à 5V.
J'ai donc décider d'inversé les seuils c'est-à-dire de mettre
led1=4,5V
led2=4V
led3=3,5V
led4=3V
Lorsque je lance mon programme il n'y a que led1 qui s'allume (et elle reste allumé sur toute la plage de tension)
Pouvez-vous m'aider svp, je ne comprend pas pourquoi les leds s'allument pas aux seuils que je veux.
Voici mon programme:
Code:
#include <p16F690.inc>
__config(_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
#define LED_SCGND b'00000001' ;PORTC,0
#define LED_ILL b'00000010' ;PORTC,1
#define LED_GOOD b'00000100' ;PORTC,2
#define LED_SCBAT b'00010000' ;PORTC,3
#define LED_OC b'00001000' ;PORTC,4
cblock 0x020
result : 1
endc
org 0x000
Start:
bsf STATUS,RP0
movlw 0xFF
movwf TRISA
clrf TRISC
movlw 0x10
movwf ADCON1
bcf STATUS,RP0
bcf STATUS,RP0
bsf STATUS,RP1
movlw b'00000001'
movwf ANSEL
bcf STATUS,RP0
bcf STATUS,RP1
movlw 0x01
movwf ADCON0
MainLoop:
Nop
Nop
Nop
Nop
Nop
bsf ADCON0,GO
btfss ADCON0,GO
goto $-1
movf ADRESH,w
movwf result
Mavaleur1:
movf result,w
sublw 0x1A
btfss STATUS,C
goto Mavaleur2
movlw LED_SCGND
movwf PORTC
goto Start
Mavaleur2:
movf result,w
sublw 0x33
btfss STATUS,C
goto Mavaleur3
movlw LED_ILL
movwf PORTC
goto Start
Mavaleur3:
movf result,w
sublw 0x4D
btfss STATUS,C
goto Mavaleur5
movlw LED_GOOD
movwf PORTC
goto Start
Mavaleur5:
movf result,w
sublw 0x66
btfss STATUS,C
goto Mavaleur6
movlw LED_OC
movwf PORTC
goto Start
end