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

Challenge Temps-X
F6FCO
Avatar de l’utilisateur
Passioné
Passioné
Messages : 236
Âge : 63
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#11 Message par F6FCO » lun. 8 janv. 2018 16:40

La programmation avec le pickit se passe très bien... à l'écran. Ensuite sur le PIC ce n'est plus la même histoire, je suis sujet à des perturbations, dés que j'approche la main du 16F876 les ports changent d'état, et mieux... le PIC réagit avec la lampe de bureau. La lumière du bureau allumée tous les ports sont à 0 et les leds éteintes, lumière du bureau éteinte les ports passent à 1 et les leds s'allument. J'ai codé un programme magique.
Bref je pense que ma bidouille pour adapter un 28pins sur le 40pins est en fait une très belle antenne ultra performante :lol:, et toutes les connections pour relier le PIC à la matrice associées à la fréquence d'horloge de 20Mhz n'arrangent pas les choses.
Pas la peine de bosser comme çà, je vais attendre de recevoir mes 877 pour continuer sur une base propre, ils ne devraient plus tarder.

Voici mon programme, je n'ai pas mis toutes les init. Il ne gère pour l'instant que le PORTB mais je l'étendrai ensuite au PORTC.

Code : Tout sélectionner

;*****************************************************************************
;
                      PROGRAMME PRINCIPAL                                   *
;*****************************************************************************

start
    movlw     b
'00010000'    
    movwf    PORTB        
; anodes des LED
    movlw     b
'00000000'
    movwf    PORTC        ; cathodes des LED
    
boucle
; test pressions sur pouss1 ou pouss2
    btfsc    PORTA
,0      ; test si poussoir passe à 0 sur Ra0
    call     avance
    btfsc    PORTA
,1        ; test si poussoir passe à 0 sur Ra1
    call     recule
    goto     boucle        
    
avance
    rlf        PORTB        
; décalage à gauche PORTB    
    return
    
recule
    rrf        PORTB        
; décalage à droite PORTB
    return
    
    END     
Modifié en dernier par F6FCO le lun. 8 janv. 2018 16:53, modifié 1 fois.
JC, jeune programmeur à 16heures

Challenge Temps-X
Gérard
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 666
Âge : 59
Enregistré en : septembre 2015
Localisation : Alsace

#12 Message par Gérard » lun. 8 janv. 2018 16:49

N'as-tu pas une plaque sans soudure pour faire quelques essais vite fait?
Le 11 / 07 / 2017, j'ai commandé une Ford Mustang.
Le 31 / 08 / 2017, j'ai eu la Mustang, un régal.

Challenge Temps-X
F6FCO
Avatar de l’utilisateur
Passioné
Passioné
Messages : 236
Âge : 63
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#13 Message par F6FCO » lun. 8 janv. 2018 16:55

Que des chinoises complètement cuites et pas fiables, à force d'enficher toutes sortes de composants les contacts se sont écartés et elles sont pleines de faux-contacts. C'est pour cela que j'ai construit ma platine école.
JC, jeune programmeur à 16heures

Challenge Temps-X
JMarc
Passioné
Passioné
Messages : 473
Enregistré en : août 2016
Localisation : Dans le Sud...

#14 Message par JMarc » lun. 8 janv. 2018 18:18

Bonjour tout le monde

Bien le décalage des bits :+1:


Bon, tes boutons poussoir??? Y a t’il des condos pour l’anti rebond ?
Si non, tu peux faire la tempo anti rebon avec quelques lignes de code
L’appel du sous programme pour une seule ligne de code :roll:

Challenge Temps-X
cyril13110
Passioné
Passioné
Messages : 401
Âge : 35
Enregistré en : avril 2016
Localisation : 13

#15 Message par cyril13110 » lun. 8 janv. 2018 18:31

bonjour a tous,
ou si non pour l'anti rebond moi je compte les rebonds et mon action se fait apres un nombre de rebond que je choisi.
ca dispense de tempo et de condo....

Challenge Temps-X
F6FCO
Avatar de l’utilisateur
Passioné
Passioné
Messages : 236
Âge : 63
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#16 Message par F6FCO » lun. 8 janv. 2018 19:09

Bonsoir,
D'après mon expérience sur les AVR, les condos n’empêchent pas vraiment les rebonds, du moins avec mes petits poussoirs de récup sur de vieilles imprimantes. Pour limiter je met une tempo de 10ms qui en absorbe le maximum.
JC, jeune programmeur à 16heures

Challenge Temps-X
JMarc
Passioné
Passioné
Messages : 473
Enregistré en : août 2016
Localisation : Dans le Sud...

#17 Message par JMarc » lun. 8 janv. 2018 19:55

F6FCO a écrit :Bonsoir,
D'après mon expérience sur les AVR, les condos n’empêchent pas vraiment les rebonds, du moins avec mes petits poussoirs de récup sur de vieilles imprimantes. Pour limiter je met une tempo de 10ms qui en absorbe le maximum.


Ben alors ça ne peut pas fonctionner :sifflotte:

Nous aimerons bien voir l’init aussi

Challenge Temps-X
F6FCO
Avatar de l’utilisateur
Passioné
Passioné
Messages : 236
Âge : 63
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#18 Message par F6FCO » lun. 8 janv. 2018 21:03

Ce n'est pas à cause du code que çà ne fonctionne pas, çà marche très bien sur le simulateur. C'est un problème HF, ce qu'en radio on appelle des "accrochages".
J'ai changé le quartz de 8Mhz pour un 20Mhz et çà a été une erreur avec tous ces fils qui font antenne. Je vais remettre le 8Mhz pour voir ce que çà donne et même ce serait mieux avec un 4Mhz. Sinon je referai une autre carte avec des commutateurs haute impédance pour les liaisons entre les différents éléments mais elle sera moins souple d'emploi.

Voici le code complet:

Code : Tout sélectionner



;*****************************************************************************


    LIST      p=16F876A            ; Définition de processeur
    
#include <p16F876A.inc>        ; fichier include
    radix dec                      ; on travaille en décimal par défaut

__CONFIG   _CP_OFF 
& _DEBUG_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC 


;*****************************************************************************

OPTIONVAL    EQU    B'00000000'
INTCONVAL    EQU    B'00000000'
ADCON1VAL    EQU    B'00000110' ; PORTA en mode digital
DIRPORTA    EQU    B
'00111100'
DIRPORTB    EQU    B'11000000'    
DIRPORTC    EQU    B
'00000000'

;*****************************************************************************

MASQUE        EQU    H'00FF'


#DEFINE LED1    PORTB,1        ; LED de sortie 1


BANK0    macro                ; passer en banque0
        bcf        STATUS
,RP0
        bcf        STATUS
,RP1
    endm

BANK1    macro                
; passer en banque1
        bsf        STATUS
,RP0
        bcf        STATUS
,RP1
    endm

BANK2    macro                
; passer en banque2
        bcf        STATUS
,RP0
        bsf        STATUS
,RP1
    endm

BANK3    macro                
; passer en banque3
        bsf        STATUS
,RP0
        bsf        STATUS
,RP1
    endm


;*****************************************************************************

    CBLOCK    0x20        ; Début de la zone (0x20 à 0x6F)
        Reg_1
        Reg_2
        Reg_3
        ENDC            
; Fin de la zone                        

PORTA    EQU H
'05'
PORTB     EQU H'06'        ; adr PORTB
PORTC    EQU H
'07'


;*****************************************************************************


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


;*****************************************************************************
init

            
; initialisation PORTS (banque 0 et 1)
            ; ------------------------------------
    BANK0            ; sélectionner banque0
    clrf    PORTA        
; Sorties PORTA à 0
    clrf    PORTB        
; sorties PORTB à 0
    clrf    PORTC        
; sorties PORTC à 0
    bsf        STATUS
,RP0    ; passer en banque1
    movlw    ADCON1VAL    
; PORTA en mode digital/analogique
    movwf    ADCON1        
; écriture dans contrôle A/D
    movlw    DIRPORTA    
; Direction PORTA
    movwf    TRISA        
; écriture dans registre direction
    movlw    DIRPORTB    
; Direction PORTB
    movwf    TRISB        
; écriture dans registre direction
    movlw    DIRPORTC    
; Direction PORTC
    movwf    TRISC        
; écriture dans registre direction

            
; Registre d'options (banque 1)
            ; -----------------------------
    movlw    OPTIONVAL    ; charger masque
    movwf    OPTION_REG    ; initialiser registre option

            ; registres interruptions (banque 1)
            ; ----------------------------------
    movlw    INTCONVAL    ; charger valeur registre interruption
    movwf    INTCON        ; initialiser interruptions

            ; Effacer RAM banque 0
            ; ---------------------
    bcf        STATUS,RP0    ; sélectionner banque 0
    movlw    0x20        ; initialisation pointeur
    movwf    FSR        ; d'
adressage indirect
init1
    clrf    INDF        
; effacer ram
    incf    FSR
,f        ; pointer sur suivant
    btfss    FSR
,7        ; tester si fin zone atteinte (>7F)
    goto    init1        ; non, boucler


;*****************************************************************************
;
                      PROGRAMME PRINCIPAL                                   *
;*****************************************************************************

start
    movlw     b
'00010000'    
    movwf    PORTB        
; anodes des LED
    movlw     b
'00000000'
    movwf    PORTC        ; cathodes des LED
    
boucle
; test pressions sur pouss1 ou pouss2
    btfsc    PORTA
,0      ; test si poussoir passe à 0 sur Ra0
    call     avance
    btfsc    PORTA
,1        ; test si poussoir passe à 0 sur Ra1
    call     recule
    goto     boucle        
    
avance
    rlf        PORTB        
; décalage à gauche PORTB    
    return
    
recule
    rrf        PORTB        
; décalage à droite PORTB
    return
    
    END             
JC, jeune programmeur à 16heures

Challenge Temps-X
Temps-x
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 647
Enregistré en : juillet 2016
Localisation : Terre

#19 Message par Temps-x » mar. 9 janv. 2018 01:25

Bonjour F6FCO, JMarc, cyril13110, Gérard, et tout le forum,

écrit par JMarc :

Ton nouveau pic possède des entrées analogiques. Pour l’instant rajoute juste

Code : Tout sélectionner
movlw B'00000110' ;PORTA digitale
movwf ADCON1 ;

Dans ton initialisation pour avoir tes entrées de PORTA en numérique

humour!! JMarc, tu copieras 100 fois : je dois pas cafeter :langue:

C'est bien ce qu'il fallait faire sur ADCON1

ADCON0 n'a pas besoin d'être configurer, c'est la seule façon de se le rappeler.


écrit par Gérard :

Fais un essai sans debug pour voir si déjà la programmation se passe bien.
Faudra mettre DEBUG_OFF dans le mot de config.


:+1: Oui exact, pas besoin d'activer le mode Debug, qui fera perdre du temps pour le démarrage du Pic.

Cette config pour Pic16F876 doit fonctionner, ou alors tu as un problème.
Chez moi elle se compile très bien, et ce programme très bien dans le Pic, bon c'est vrai j'utilise pas un PicKit3.

Code : Tout sélectionner


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


_WRT_ENABLE_OFF est valable pour les Pic16F876, mais pas pour les Pic16F876A.

Si tu as des perturbations, surement un mauvais contact, à vérifier avec un multimètre chaque broche.

D'après le code qui au dessus, ça doit fonctionner sur une rangé de 1 x 8 LED, mais n’oublie pas c'est tous les LED 8 x 8 = 64 LED
qui doivent fonctionner une par une.

Ne pas oublier de faire une confirmation de bouton relâché, avec tempo, 10ms c'est ok.

Bon pour les 64 LED, il y a une petite astuce, mais il faut la connaître, je te laisse chercher.

humour!! Devoirs à rentre avant l'année 2019

==> A+

Ps : j'ai commandé des Matrix 8 x 8 en couleur ICI elle comporte 12 pattes de chaque coté
Modifié en dernier par Temps-x le mar. 9 janv. 2018 17:58, modifié 1 fois.
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

Challenge Temps-X
Gérard
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 666
Âge : 59
Enregistré en : septembre 2015
Localisation : Alsace

#20 Message par Gérard » mar. 9 janv. 2018 08:59

Question pour Temps-x : comment vas-tu piloter la matrice?
Le 11 / 07 / 2017, j'ai commandé une Ford Mustang.
Le 31 / 08 / 2017, j'ai eu la Mustang, un régal.


Retourner vers « Langage ASM »

Qui est en ligne

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