Problème entre la simulation et la réalité

cs_bibou1234 Messages postés 5 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 1 novembre 2010 - 18 mars 2010 à 08:04
cs_bibou1234 Messages postés 5 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 1 novembre 2010 - 15 avril 2010 à 12:52
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
__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

2 réponses

Zayann Messages postés 75 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 15 juillet 2015 1
1 avril 2010 à 17:21
Un peu de commentaire ne fait pas de mal dans un code...
Parce que là c'est pas très explicite...

Humm... à froid et sans analyse : un problème de registre (justification des registres du CAN peut être ?) D'autre part tu devrait plutôt travailler sur le bit de flag d'interruption du CAN plutôt que sur celui de la commande...
Essai de commenter ton code pour qu'il soit plus compréhensible...
Je regarderai de mon coté...
0
cs_bibou1234 Messages postés 5 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 1 novembre 2010
15 avril 2010 à 12:52
Bonjour,
j'ai résolu mon problème, mais j'ai un autre programme qui se pose
Je désire faire clignoté une Led lorsque ma batterie est en dessous de 2.6V
j'ai fait mon programme, mais ma Led clignote tout le temps (même au dessus de 2,6 V

Voici mon programme


Code:
Start2:

bsf STATUS,RP0
movlw 0xFF
movwf TRISA
clrf TRISB
clrf TRISC
movlw 0x10
movwf ADCON1
bcf STATUS,RP0
bsf STATUS,RP1
movlw b'00000100' ;Configuration de AN2 comme pin analogique
movwf ANSEL
bcf STATUS,RP0
bcf STATUS,RP1
movlw 0x03
movwf ADCON0

MainLoop2:
nop
nop
nop
nop
nop
nop

bsf ADCON0,GO
btfss ADCON0,GO
goto $-1
movf ADRESH,w
movwf result2

Mavaleur15: ;On est inférieure à 2,6 V (soit 5.2V pour la pile)
movf result2,w
sublw 0x85 ;On soustrait 0x85 à « result »
btfss STATUS,C
goto FIN
call CONT
goto Start2

CONT bsf PORTC,3
call TEMPO
bcf PORTC,3
call TEMPO
goto CONT

TEMPO movlw D'255'
movwf NBTEMP
CONT1 movlw D'255'
movwf TEMPELE
CONT2 nop
nop
nop
nop
nop
decfsz TEMPELE,f
goto CONT2
decfsz NBTEMP,f
goto CONT1
return
FIN
bcf PORTC,3
end


end
0