salut...
tout d'abord je vous presente mon projet.
je suis entrain de réaliser une améliorantion d'un testeur de régulateur d'alternateur de voiture.
et cette amélioration consiste à introduire un afficheur lcd 4*20 caractère , un clavier 16 touches et un pic16f877 : donc ètre programmable.
j'ai essayé de réaliser ça et ça marche.. mais j'ai un problème .
moi j'utilise le porta du pic comme un convertisseur analogique/numèrique pour mesurer une tension. mais le problème dans mon programme qu'il m'affiche une valeur différent de celle que je veux .
voici mon problème et j'espère que je trouve quelqu'un qui peut m'aider .
c'est urgent.
ok donc je vous donne mon programme
le fichier hex et le schéma.
la simulation se fait :
1 - s'affiche un message
2- saisir le code par le clavier (c'est un code de 2 nombres et entre 10 et 49)
3-taper entrer (ds le schéma c'est ' = ')
3- s'affiche les références du régulateur
4- taper test (ds le schéma c'est ' ON/c '
5- s'affiche la valeur de tension
ma tension varie entre 12v et 24v et 32v selon un switch
puis elle varie selon ces valeurs :
si 12 elle varie de 12 à 15
-si 24 elle varie de 24 à 28
et le 32 ne varie pas.
merci..
voici la partie conversion :
ConversionAN
; initialisation
call LCD_CLEAR
BSF STATUS, RP0 ; Bank 1 selectonnee
MOVLW b'10000010' ; select RA0
MOVWF ADCON1 ; as analog inputs
BCF STATUS, RP0 ; Bank 0 selectonnee
MOVLW b'11000001' ; Select; RC osc, Ch2
MOVWF ADCON0 ; turn on A/D
Convert CALL Wait100µs ; provide necessary samplig time
BSF ADCON0, 2 ; Start new A/D conversion
loop
BTFSC ADCON0,2 ; A/D over ?
GOTO loop ; no then loop
CALL LCD_LOCATE_LINE0
MOVF ADRESH, W
CALL LCD_SEND_DECI ; print high bit of the result
CALL LCD_PRINT_SPACE
CALL LCD_PRINT_SPACE
BSF STATUS, RP0 ; Bank 1 selectonnee
MOVF ADRESL, W
BCF STATUS, RP0 ; Bank 0 selectonnee
CALL LCD_SEND_DECI ; print low bit of the result
CALL LCD_PRINT_SPACE
CALL LCD_PRINT_SPACE
MOVLW \"V\"
CALL LCD_SEND_CHAR
GOTO Convert ; boucle
LCD_SEND_DECI
MOVWF LCD_CHAR_HEXA ; On met W sans LCD_CHAR_HEXA,
; Calcul des centaines
MOVLW \"0\" ; On met le code ascii de 0 dans LCD_CHAR
MOVWF LCD_CHAR ; \"
LCD_SEND_DECIMAL_100
MOVF LCD_CHAR_HEXA, W
ADDLW -D'100'
BTFSS STATUS, C
GOTO $ + 4
INCF LCD_CHAR, F
MOVWF LCD_CHAR_HEXA
GOTO LCD_SEND_DECIMAL_100
; Affiche les centaines
MOVF LCD_CHAR, W
CALL LCD_SEND_CHAR
; Calcul des dixaines
MOVLW \"0\" ; On met le code ascii de 0 dans LCD_CHAR
MOVWF LCD_CHAR ; \"
LCD_SEND_DECIMAL_10
MOVF LCD_CHAR_HEXA, W
ADDLW -D'10'
BTFSS STATUS, C
GOTO $ + 4
INCF LCD_CHAR, F
MOVWF LCD_CHAR_HEXA
GOTO LCD_SEND_DECIMAL_10
; Affiche les dixaines
MOVF LCD_CHAR, W
CALL LCD_SEND_CHAR
MOVLW \"0\" ; On met le code ascii de 0 dans LCD_CHAR
MOVWF LCD_CHAR ; \"
; Calcul des unitees
LCD_SEND_DECIMAL_1
MOVF LCD_CHAR_HEXA, W
ADDLW -D'1'
BTFSS STATUS, C
GOTO $ + 4
INCF LCD_CHAR, F
MOVWF LCD_CHAR_HEXA
GOTO LCD_SEND_DECIMAL_1
; Affiche les unitees
MOVF LCD_CHAR, W
CALL LCD_SEND_CHAR
; Fini !
RETURN
LCD_SEND_CHAR
MOVWF LCD_CHAR ; On met W sans LCD_CHAR
ANDLW 0xF0 ; masquage des bit de poids faible
ADDLW LCD_RS_VALUE ; on y ajoute LCD_RS_VALUE
CALL LCD_SEND_NO_WAIT ; on envoit a l'afficheur
SWAPF LCD_CHAR, W ; passage des bits de poids faibles en poids fort
ANDLW 0xF0 ; masquage des bit de poids faible
ADDLW LCD_RS_VALUE ; on y ajoute LCD_RS_VALUE
CALL LCD_SEND ; on envoit a l'afficheur
; fini
RETURN
merci
mejdi_electronique salu es ke tu pourer m'envoyer ton shéma et ton programme car j'ai le même projet et je galére un peu si tu peu m'aider je t'en remercie j'ai fai mon schéma mais j'arive pa à afficher