Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Config port A et C en mode I/O
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#1 Message par nondediode » ven. 11 déc. 2020 13:29

Bonjour à tous,

Bien lgtps que je ne suis pas revenu sur le site, bien lgtps aussi que je me suis pas remis au PIC.
Il suffit de faire face à un problème pour revenir vers vous. Les petites règles de programmation sont vite oubliées quand on pratique peu.

Je vais donc rentrer dans le sujet;

Un 16F877 sur lequel je dois utilisé la totalité des ports A et C en entrée / sortie je suis confronté à un soucis de configuration.

Je fait un

MOVLW B'0011111'
MOVWF PORTA

CALL TEMPO

MOVLW B'1111111'
MOVWF PORTC

Dans le programme d'INIT j'ai écris ça:

MOVLW B'00000110''
MOVWF ADCON1

J'ai comme résultat ceci:

tout le Port A allumé sauf RA4
Dans le port C RC0 et RC1 clignotent et tous les autres sont allumés

Je pense qu'il s'agit du pb du timer sur le port C mais je ne sais pas comment on le passe en I/O
Pour RA4 il me semble que c'est une histoire de résistance au + ?? mais j'en suis pas sûr.

Je cherche depuis 2 jrs mais je patine dur!!

Merci à vous tous pour vos réponses

JP

Config port A et C en mode I/O
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » ven. 11 déc. 2020 14:21

bonjour,


Quid de la config des ports en entree ou sorties via TRISA et TRISC ?

à verifier : RA4 en Open drain ?
necessiterait une R de pull up ..
Aide toi, le ciel ou FantasPic t'aidera

Config port A et C en mode I/O
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#3 Message par nondediode » ven. 11 déc. 2020 14:28

Bonjour paulfjujo et merci,

Je vais mettre une résistance de 1K au + et je reviens pour la réponse

A tout de suite

Config port A et C en mode I/O
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#4 Message par nondediode » ven. 11 déc. 2020 14:35

OK ça marche!

Reste plus que le pb pour le port C

Merci

Config port A et C en mode I/O
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#5 Message par satinas » ven. 11 déc. 2020 16:52

Bonsoir nondediode, comment va ?

Il nous faudrait le programme, au moins la partie programmation des registres de config du pic.
As-tu démarré le timer1 ou un module CCP ?
des mauvais contacts ?

Config port A et C en mode I/O
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#6 Message par nondediode » ven. 11 déc. 2020 18:09

Bonsoir Satinas,

Je vais bien merci et toi? c'est vrai que j'ai eu une période difficile mais depuis j'ai bien récupéré. J'ai d'ailleurs fini mon projet de méga ampli sur lequel nous avions pas mal bossé sur le programme d'affichage. Je ferais un CR là dessus en reprenant la discussion de l'époque.

Pour le programme actuel c'est un projet pour un collègue qui souhaite que je lui réalise un préampli passif pour commuter 6 sources audio avec des cdes de MUTE et de PHASE et un gros rotacteur pour aller choisir les sources.

J'ai commencé un semblant de programme après avoir fait réalisé les cartes et j'ai routé des sorties depuis le port C et le port A pour commander les relais reed et du coup je me trouve confronté avec le port C qui a les sorties RC0 et RC1 configuré d'origine pour des timers moi je voudrai ces sorties en tout ou rien parce que là ça me fait clignoter les relais et la musique en pointillé c'est pas top!

Je ne sais pas ou je ne sais plus comment mettre ces sorties en I/O, c'est un 877

Je posterai ou je recopierai le morceau de fichier d'init des registres

JP

Config port A et C en mode I/O
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#7 Message par satinas » ven. 11 déc. 2020 18:47

Ca va bien aussi de mon côté :)

Au démarrage T1CON est à 0, le timer1 est off.
A priori les pins C0 et C1 sont accessibles sauf si on les utilise pour compter des évènements extérieurs au pic avec le timer1.

Config port A et C en mode I/O
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#8 Message par nondediode » ven. 11 déc. 2020 19:16

Si je comprends les ports RC0 et RC1 sont en off ? donc cela veut dire que je devrais fonctionner en digital et ça ne devrait pas clignoter
Pourquoi ce clignotement?
Comment je peux m'en affranchir?

J'utilise pour commander des relais de 5mA

Config port A et C en mode I/O
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#9 Message par nondediode » ven. 11 déc. 2020 21:02

Voici le bout de programme

Pour le port a c'est résolu avec le résistance pull up

Pour le port C c'est autre chose

;---------------------------------------------------------GESTION AFFICHEUR-----------------------------------------------------------------

; TITRE: Gestion d'un préampli passif à 6 entrées avec cde Mute et Phase

; Gestion d'un afficheur LCD 2 ligne 16 caractères
; le quartz est de 4MHz

;----------------------------------------------------Brochage du PIC sur la carte---------------------------------------------------------
; Port | Broche | E/S | Description

; RA0 | 02 | S | Cde Enable
; RA1 | 03 | S | Cde R/W
; RA2 | 04 | S | Cde R/S
; RA3 | 05 | S | Allumage LED
; RA4 | 06 | S | Cde relais Phase
; RA5 | 07 | S | Cde relais Tuner

; RB0 | 33 | S | Sortie bit D0 du LCD
; RB1 | 34 | S | Sortie bit D1 du LCD
; RB2 | 35 | S | Sortie bit D2 du LCD
; RB3 | 36 | S | Sortie bit D3 du LCD
; RB4 | 37 | S | Sortie bit D4 du LCD
; RB5 | 38 | S | Sortie bit D5 du LCD
; RB6 | 39 | S | Sortie bit D6 du LCD
; RB7 | 40 | S | Sortie bit D7 du LCD

; RC0 | 15 | S | NC
; RC1 | 16 | S | NC
; RC2 | 17 | S | Cde relais CD2
; RC3 | 18 | S | Cde relais Phono
; RC4 | 23 | S | Cde relais Aux.
; RC5 | 24 | S | Cde relais DAC
; RC6 | 25 | S | Cde relais CD1
; RC7 | 26 | S | Cde relais Mute

; RD0 | 19 | E | Cde source Tuner
; RD1 | 20 | E | Cde source CD1
; RD2 | 21 | E | Cde source CD2
; RD3 | 22 | E | Cde source DAC
; RD4 | 27 | E | Cde source Phono
; RD5 | 28 | E | Cde source Aux.
; RD6 | 29 | E | Cde Phase
; RD7 | 30 | E | Cde Mute


;--------------------------------------------------DIRECTIVE D'ASSEMBLAGE POUR MPLAB-------------------------------------------------------

list p=16f877
#include <p16f877.inc>

__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC


;-------------------------------------------------DEFINITION DES REGISTRES TEMPORAIRES------------------------------------------------------

PORTA EQU 0X05 ; Le registre temporaire PORTA se trouve à l'adresse 05
PORTB EQU 0X06 ; Le registre temporaire PORTB se trouve à l'adresse 06
PORTC EQU 0X07 ; Le registre temporaire PORTC se trouve à l'adresse 07
PORTD EQU 0X08 ; Le registre temporaire PORTD se trouve à l'adresse 08
PORTE EQU 0X09 ; Le registre temporaire PORTE se trouve à l'adresse 09
TRISA EQU 0X85 ; Le registre temporaire TRISA se trouve à l'adresse 85
TRISB EQU 0X86 ; Le registre temporaire TRISB se trouve à l'adresse 86
TRISC EQU 0X87 ; Le registre temporaire TRISC se trouve à l'adresse 87
TRISD EQU 0X88 ; Le registre temporaire TRISD se trouve à l'adresse 88
TRISE EQU 0X89 ; Le registre temporaire TRISE se trouve à l'adresse 89
CPT2 EQU 0X0D ; Le registre temporaire CPT2 se trouve à l'adresse 0D
CPT3 EQU 0X0E ; Le registre temporaire CPT3 se trouve à l'adresse 0E
RETARD1 EQU 0X0C ; Le registre temporaire retard1 se trouve à l'adresse 0C
RETARD2 EQU 0X0F ; Le registre temporaire retard2 se trouve à l'adresse 0F
RETARD3 EQU 0X10 ; Le registre temporaire retard3 se trouve à l'adresse 10
RETARD4 EQU 0X11 ; Le registre temporaire retard4 se trouve à l'adresse 11
RETARD5 EQU 0X12 ; Le registre temporaire retard4 se trouve à l'adresse 12
VAL1 EQU 0X14 ; Le registre temporaire VAL1 se trouve à l'adresse 14
VAL2 EQU 0X15 ; Le registre temporaire VAL2 se trouve à l'adresse 15
VAL3 EQU 0X16 ; Le registre temporaire VAL1 se trouve à l'adresse 14
VAL4 EQU 0X17 ; Le registre temporaire VAL2 se trouve à l'adresse 15

;--------------------------------------------PROGRAMME PRINCIPAL----------------------------------------

ORG 0000h ; Adresse de reset
GOTO INIT



;-----------------------------------------PROGRAMME D'INITIALISATION----------------------------------------

INIT
CLRF PORTA ; On remet à 0 le port A
CLRF PORTB ; On remet à 0 le port B
CLRF PORTC ; On remet à 0 le port C
CLRF PORTD ; On remet à 0 le port D
CLRF PORTE ; On remet à 0 le port E
BSF STATUS,RP0 ; Selection de la page mémoire RP0
BCF STATUS,RP1 ; Déselection de la page mémoire RP1
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF TRISA ; On transfert W sur le registre TRISA pour définir la direction du portA
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF TRISB ; On transfert W sur le registre TRISB pour définir la direction du portB
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF TRISC ; On transfert W sur le registre TRISC pour définir la direction du portC en sortie
MOVLW B'11111111' ; On charge la valeur dans le registre W
MOVWF TRISD ; On transfert W sur le registre TRISD pour définir la direction du portD en sortie
MOVLW B'00000110' ; On charge la valeur dans le registre W 00000110
MOVWF ADCON1 ; On transfert W sur le registre ADCON1 pour définir le mode d'entrée des ports A et E (A et E = digital)
BCF STATUS,RP0 ; Déselection de la page mémoire RP0
BCF STATUS,RP1 ; Déselection de la page mémoire RP1


;---------------------------------------------------------Programme PRINCIPAL-------------------------------------------------------
DEBUT
CALL TEMPO1
MOVLW B'00111111'
MOVWF PORTA
CALL TEMPO1
MOVLW B'00000000'
MOVWF PORTC
GOTO DEBUT

;-------------------------------------------------------------------------------


TEMPO1
MOVLW 0X50 ; On met 50 dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X12 ; On met 12 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE1
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction si le registre retard1 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0XC8 ; On met C8 dans le registre W
MOVWF RETARD1 ; On met W dans RETARD1
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction si le registre retard2 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X50 ; On met 50 dans le registre W
MOVWF RETARD2 ; On met W dans RETARD2
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction si le registre retard3 = 0
GOTO ATTENTE1 ; Sinon retour à attente2
RETURN ; Retour au programme principal après l'instruction call




;-------------------------------------------------------PROGRAMME TEMPO -----------------------------------------------------------


ATTENTE5
MOVLW 0XFF ; On met FF dans le registre W
MOVWF CPT2 ; On met W dans le registre CPT2
ATT2
DECFSZ CPT2,1 ; On décrémente CPT2,1 et on saute la prochaine instruction
GOTO ATT2 ; Sinon retour à ATT2
RETURN ; Retour au programme principal après l'instruction call

ATTENTE6
MOVLW 0X1E ; On met 14 dans le registre W
MOVWF CPT3 ; On met W dans le registre CPT3
ATT3
CALL ATTENTE5 ; On appelle ATTENTE5
DECFSZ CPT3,1 ; On décrémente CPT3,1 et on saute la prochaine instruction
GOTO ATT3 ; Sinon retour à ATT3
RETURN ; Retour au programme principal après l'instruction call


END
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Config port A et C en mode I/O
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#10 Message par satinas » ven. 11 déc. 2020 21:20

Voir chapitre "register file map".
Dans la bank 0, les registres SFR vont de 0x00 à 0x1F.
Donc l'espace disponible pour les variables (zone GPR) va de 0x20 à 0x7F.

Dans le cas présent, lorsque tu écris la variable RETARD3 à l'adresse 0x10, en fait tu écris le registre T1CON.
T1CON et RETARD3 pointent sur la même case mémoire, problème.


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 47 invités