begin process at 2012 05 25 05:43:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

Autre

 > 

CAN du pic 16F876 et module UART


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

CAN du pic 16F876 et module UART

mardi 6 avril 2010 à 05:19:51 | CAN du pic 16F876 et module UART

sniple

salut a tous,
j'ai un petit problème d'utilisation du CAN du pic 16F876A.
en effet,j'ai réalisé mon programme en configurant les registres adcon0 et adcon1,et en envoyant les résultats (adressH,adressL) sur les ports B,C pour les visualiser par les leds et ça bien marché. après j'ai tenté de visualiser ces résultats en les envoyant vers le port série (utilisation du module UART) mais rien ne s'affiche.
ensuite j'ai ajouté au programme précédent l'initialisation du module UART sans l'utiliser dans le programme principale,mais j'ai rien obtenue comme résultat .
la question qui se pose : est ce que je peux utiliser les modules CAN et UART dans un seul programme,sachant que j'ai testé les deux modules mais indépendamment.
j'espère que vous m'aidiez a résoudre se problème car j'en ai besoin.
et merci d'avance.
mardi 6 avril 2010 à 13:23:55 | Re : CAN du pic 16F876 et module UART

Zayann

bien sur c'est possible...
Les deux "fonctions" du PIC ne font pas appel aux même registres...
tu envois tes info sur le port série vers un PC ??
As tu correctement initialiser le port série (baudrate entre autre...) des deux coté si c'est la cas ?
Ton programme est en quel langage ?
cordialement...
mardi 6 avril 2010 à 14:09:58 | Re : CAN du pic 16F876 et module UART

sniple

bonjour,
merci d'avoir me répondu a ma question.
en effet je programme en langage assembleur,j'ai déjà fait un programme pour l'acquisition des données numériques vers le port série su PC en utilisant la liaison UART, et ça marché,ensuite j'ai tenté de faire l'acquisition des données analogiques(capteurs températures,tentions analogiques ..)et les envoyées vers le PC mais dans ce stade je me suis bloqués!!!
j'ai réalisé un programme de conversion en utilisant des LEDs comme indicateurs de résultats et ça bien marché,mais si j'ajoute l'initialisation du module UART dans ce programme il se bloque et me donne rien comme résultats!!
de toute façon je vous joindre mon code afin que vous m'aidez a détecté l'erreur.
cordialement


list p=16f876A,r=dec ; Quartz 4MHz
include <p16f876A.inc>
__CONFIG 3F71h

OPTIONVAL EQU B'10001111'

BRGVAL EQU D'25' ; pour un débit de 9615 bauds en mode low-speed
AN1 EQU 0x70


CBLOCK 0x70 ; Début de la zone (0x70 à 0x7F)
w_temp : 1 ; Sauvegarde registre W
status_temp : 1 ; sauvegarde registre STATUS
FSR_temp : 1 ; sauvegarde FSR (si indirect en interrupt)
PCLATH_temp : 1 ; sauvegarde PCLATH (si prog>2K)
endc

org 0x000 ; Adresse de départ après reset
goto init ; Initialiser

org 0x004 ; adresse d'interruption
movwf w_temp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf status_temp ; sauver status swappé
movf FSR,w ; charger FSR
movwf FSR_temp ; sauvegarder FSR

init
bsf STATUS,RP0 ; passer en banque 1
bcf STATUS,RP1 ; passer en banque 1
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
bsf STATUS,RP0 ; passer en banque 1
movlw B'00000110' ; mode asynchrone, émission 8 bits haute vitesse
movwf TXSTA ; dans registre TXSTA
movlw BRGVAL ; valeur calculée de SPBRG
movwf SPBRG ; dans baud rate generator
bcf STATUS,RP0 ; repasser banque 0
movlw B'10000000' ; module en service, réception 9 bits
movwf RCSTA
movlw B'00111111'
movwf TRISA
BCF STATUS, RP0 ; Bank 0 selectonnee
movlw B'11111111'
movwf PORTA
BSF STATUS, RP1 ; Bank 1 selectonnee
MOVLW b'10001110' ; select RA0
MOVWF ADCON1 ; as analog inputs
goto star


star

bcf INTCON, GIE ; Global Interrupts: disabled

movlw b'01000001' ; Select; RC osc, Ch2
movwf ADCON0 ; turn on A/D

movlw D'6'
movwf AN1
decfsz AN1, f
goto $-1


BSF ADCON0, GO ; Start new A/D conversion

loop
BTFSC ADCON0, 2 ; A/D over ?
GOTO loop ; no then loop

MOVF ADRESH, W
addlw D'48'
call envoi



movf ADRESL,w
call envoi




envoi
bcf STATUS,RP0 ; passer banque 0
movwf TXREG ; octet dans registre de transmission
bsf STATUS,RP0 ; repasser banque 1
bsf TXSTA,TXEN ; envoyer l'octet
nop
btfss TXSTA,TRMT ; transmission terminée?
goto $-2 ; non, attendre
bcf TXSTA,TXEN ; oui, fin de transmission
bcf STATUS,RP0 ; repasser banque 0
return



sleep

end
mardi 6 avril 2010 à 15:36:47 | Re : CAN du pic 16F876 et module UART

Zayann

Quelque remarque pour commencer
Tu paramètre le CAN sur FOSC/8 et non en RC ; tu travail sur le canal 0 et non le canal 2 comme dans le commentaire...
De la même façon, l'UART travail sur 8 bit et pas 9...
D'autre part, tu ne boucle pas dans ton programme..., il s'exécute qu'un seul fois, essaye de mettre une boucle pour exécuter plusieurs mesure/envoi....
Le vecteur d'interruption ne doit pas contenir de code, il n'est pas là pour ça, mais pour contenir le renvoie vers le code et ça peut-être que ça fout le bordel (Cf. p15 du datasheet).
mardi 6 avril 2010 à 15:48:34 | Re : CAN du pic 16F876 et module UART

sniple

vous parlez de quel vecteur d'interruption?
est ce que j'ai trompé dans le code quelque part?
je vais essayé de bouclé mon programme, espérant qu'il marche.
merci
mardi 6 avril 2010 à 15:57:07 | Re : CAN du pic 16F876 et module UART

Zayann

Pour le vecteur d'interruption :
org 0x004 ; adresse d'interruption
goto Interruption

Dans le code :
Interruption ; Le label qui définie ta
[ Ton Code] fonction d'interruption

Après autre relecture : le programme est séquentiel donc SI tu ne boucle PAS le label "star" ne sert à rien
Pour boucler rien de plus simple à la fin du programme => "goto star"

A quoi sert ce code ? :
movlw D'6'
movwf AN1
decfsz AN1, f
goto $-1

Je vais continuer à regarder...
mardi 6 avril 2010 à 16:06:07 | Re : CAN du pic 16F876 et module UART

sniple

ce code est un compteur de temporisation, après le lancement du service de conversion il faut attendre un temps d'acquisition pour débuter la conversion.
mardi 6 avril 2010 à 16:54:06 | Re : CAN du pic 16F876 et module UART

Zayann

J'ai refais un peu le code à ma sauce...

list p=16f876A,r=dec ; Quartz 4MHz
include <p16f876A.inc>
__CONFIG 3F71h


CBLOCK 0x70 ; Début de la zone (0x70 à 0x7F)
w_temp : 1 ; Sauvegarde registre W
status_temp : 1 ; sauvegarde registre STATUS
FSR_temp : 1 ; sauvegarde FSR (si indirect en interrupt)
PCLATH_temp : 1 ; sauvegarde PCLATH (si prog>2K)
AN1 : 1
endc

org 0x000 ; Adresse de départ après reset
goto Programme ; Début du programme pricnpal

org 0x004 ; adresse d'interruption
goto Interruption

;----------------------------------------
Programme

Initialisation
; Initialisation des interruptions
bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
bsf INTCON, GIE ; Disable all Interrupt

; Initialisation de l'UART
bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
movlw D'25' ;\ Baudrate 9615bds
movwf SPBRG ;/

molw b'00000110' ;\Asynchronus Mode, Hight speed
movwf TXSAT ;/

bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
molw b'10000000' ;\Enable serial port, no framing error controle,
movwf TXSAT ;/no continuous receive

bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
bcf TRISC, 7 ; TX in Output
bsf TRISC, 8 ; RX in Input

; Initialisation du CAN
bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
movlw b'10001110' ;\Right Justified, An0 as Analog input
movwf ADCON1 ;/Other as digital input, FOSC/8

bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
movlw b'01000001' ;\FOSC/8, AN0
movwf ADCON1 ;/Enabled

bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
bsf TRISA, 0 ; AN0 as Input


conversion
bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
movlw d'6'
movwf AN1
decfsz AN1, f
goto $-1
bcf PIR1, ADIF ; clear Flag
bsf ADCON0, 2 ; Start conversion

btfss PIR1, ADIF ; Wait the end of conversion
goto $-1

MOVF ADRESH, W
addlw D'48'
call envoi

movf ADRESL,w
call envoi

goto conversion


;----------------------------------------
envoi
bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
bsf TXSTA,TXEN ;

bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
movwf TXREG ; octet dans registre de transmission

nop
bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
btfsc TXSTA,TRMT ; transmission terminée?
goto $-1 ; non, attendre
bcf TXSTA,TXEN ; oui, fin de transmission
return
;----------------------------------------

Attention, il n'est pas meilleur que le tient, mais il suit ma logique propre...
Je ne l'ai pas testé, ni compilé...
Regarde si il fonctionne de manière différente du tient...
mardi 6 avril 2010 à 17:02:25 | Re : CAN du pic 16F876 et module UART

sniple

je vais essayer de le tester espérant qu'il marche.
Merci infiniment de votre aide,je vais vous rendre compte du résultat.
Cordialement.
mercredi 7 avril 2010 à 09:25:30 | Re : CAN du pic 16F876 et module UART

Zayann

Le même code debuggé et compilé avec Mplab 8.46

;titre :
;Auteur : Zayann
;Date :
;Nom du projet :
;Nom du fichier source : .asm
;********************************************************************************
;********************************************************************************
; Caractéristiques du programme :
;
;
;
;
;
;
;********************************************************************************
;********************************************************************************
; partie déclarative
;
list p=16f876A ;déclaration du processeur utilisé
include <p16f876A.inc>
;
RESET equ 0x0000 ;vecteur de reset
MAIN equ 0x0005 ;adresse de début du programme principal.
INTERRUPT equ 0x0004 ;vecteur d'interruption
;
;Déclaration des variables


CBLOCK 0x70 ; Début de la zone (0x70 à 0x7F)
w_temp : 1 ; Sauvegarde registre W
status_temp : 1 ; sauvegarde registre STATUS
FSR_temp : 1 ; sauvegarde FSR (si indirect en interrupt)
PCLATH_temp : 1 ; sauvegarde PCLATH (si prog>2K)
AN1 : 1
endc


;********************************************************************************
;RESET
org RESET
goto debut
;
;********************************************************************************
;Programme principal
org MAIN
debut

Initialisation
; Initialisation des interruptions
bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
bsf INTCON, GIE ; Disable all Interrupt

; Initialisation de l'UART
bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
movlw D'25' ;\ Baudrate 9615bds
movwf SPBRG ;/

movlw b'00000110' ;\Asynchronus Mode, Hight speed
movwf TXSTA ;/

bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
movlw b'10000000' ;\Enable serial port, no framing error controle,
movwf TXSTA ;/no continuous receive

bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
bcf TRISC, 7 ; TX in Output
bsf TRISC, 8 ; RX in Input

; Initialisation du CAN
bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
movlw b'10001110' ;\Right Justified, An0 as Analog input
movwf ADCON1 ;/Other as digital input, FOSC/8

bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
movlw b'01000001' ;\FOSC/8, AN0
movwf ADCON1 ;/Enabled

bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
bsf TRISA, 0 ; AN0 as Input


conversion
bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
movlw d'6'
movwf AN1
decfsz AN1, f
goto $-1
bcf PIR1, ADIF ; clear Flag
bsf ADCON0, 2 ; Start conversion

btfss PIR1, ADIF ; Wait the end of conversion
goto $-1

MOVF ADRESH, W
addlw D'48'
call envoi

movf ADRESL,w
call envoi

goto conversion

;********************************************************************************
;Sous-programme

envoi
bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
bsf TXSTA,TXEN ;

bcf STATUS,RP0 ;\ Bank 0
bcf STATUS,RP1 ;/
movwf TXREG ; octet dans registre de transmission

nop
bsf STATUS,RP0 ;\ Bank 1
bcf STATUS,RP1 ;/
btfsc TXSTA,TRMT ; transmission terminée?
goto $-1 ; non, attendre
bcf TXSTA,TXEN ; oui, fin de transmission
return



;********************************************************************************
;Routines d'interruptions


;********************************************************************************
;Fin de fichier
END


Cette discussion est classée dans : programme, module, pic, can, uart


Répondre à ce message

Sujets en rapport avec ce message

progr.pic interruption [ par julien__68 ] bonjours a tous, j'utilise un pic18f4620, je débute dans la programmation, je voulai réaliser une interruption sur rb0 , si quelqu'un pouvai me dire aide sur PIC 16f84 [ par Rou25 ] salut a tout le monde,je suis actuellement etudiant genie electrique entammant la phase finale de mes etudes, actuellement jai eu un projet a faire do 150$ pour celui qui peut m'écrire un programme en C pour pic 16f84 [ par alx2000 ] Je cherche quelqu'un qui peut m'écrire un programme en C pour un pic 16F84. Le programme consiste à faire un cadran sur 4 afficheurs 7 segments. Pas b le pic 16F84 [ par nassimapfe ] salut monsieur ou madame ToutEnMasmje vous envois mon message , et je vous remercier de  votre aide.ma question cette fois est comment effectuer un pr envoie de commande AT d'un pic 18F452 vers module GPRS [ par mannouing ] slt,je fait un programme en C de la liaison série RS232. j'arrive pas a comprendre comment envoyer les commande AT pour la communication  de  pic avec montage et leur programme(pic 16f84) d'un affichage d'horloge a l'aide de la persistance rétinnienne [ par mohamedturki ] pic 16f877 [ par easoufiane ] Bonjour, voila j'ai un programme(qui marche dans un 16f877a) que je voudrais implementer dans un pic 16f877. mais ca ne marche pas . Je voudrai savoi SOS SOS - Simuler un programme PIC en basic [ par tronicspace ] bonsoir, j'ai installé picbasic pro, Ma compilation se passe bien, mais je necomprend pas comment on peut simuler le programme ensuite :( Si qq'un po envoi SMS via carte SIM pour alarme via PIC [ par thetitchou ] Bonjour, Je ne suis surement pas dans le bon thème si un modo sait le changer...[^^clinoeil1] Je relance mes recherches vieilles d'un an ...[^^yeuxe association fichier programme [ par Guilou34 ] Bonjour Je suis sous Vista version familiale et office 2007. Quand je clique sur un fichier DOC, il s'ouvre avec Word. Sauf si je le reçois comme pièc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales