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

[Realisation] Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#1 Message par F6FCO » sam. 13 mars 2021 16:39

Hello tous,

On parlait justement de projets multiples dans le sujet de la table de fraiseuse, je travaille en parallèle sur ma future antenne de réception.
Une de mes autres passions est la transmission en code morse, j'ai un rendez-vous tous les soirs avec quelques copains radioamateurs et on discute le bout de gras par manipulateurs morses interposés. En réception j'utilise actuellement une antenne filaire d'une cinquantaine de mètres tendue entre les arbres, ce n'est pas le top d'ou le projet d'une antenne boucle magnétique bien plus performante.
Une antenne similaire est décrite sur ce lien: https://pu2nol.webnode.pt/_files/200000 ... 030mts.pdf

C'est une antenne qui est directive sur deux lobes, un avant et un arrière, ce qui implique qu'elle doit être rotative mais seulement sur 180° pour couvrir les 360°. Cette antenne à la particularité de s'affranchir des obstacles, ce qui veut dire qu'on peut la mettre à l'intérieur de la maison mais comme la mienne sera très grande, un octogone avec des cotés de 1m elle sera toute seule dans un vieux grenier.
Ca implique que je ne la verrai pas tourner et qu'il faut mettre en place non seulement un système de rotation à distance mais aussi un système de retour de positionnement sur une visu dans la station.

Voilà le projet est défini :wink:
Modifié en dernier par F6FCO le dim. 21 mars 2021 13:10, modifié 1 fois.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#2 Message par F6FCO » sam. 13 mars 2021 16:41

Construction du mât et du rotor. C'est fait et çà date déjà de quelques temps, encore un de ces projets qu'il fallait à tout prix faire et qui a traîné ensuite 3 ou 4ans dans un coin :roll: :

https://f6fco.pagesperso-orange.fr/rotor.htm
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#3 Message par F6FCO » sam. 13 mars 2021 16:50

A ce niveau j'avais juste de la ferraille bien agencée, encore rien de vivant. Pour la rotation j'ai utilisé un pont en H avec des récup sur de vieux téléviseurs
H3.JPG


H4.jpg


Pont en H qui chauffait énormément, çà tenait sur table mais je pense que dans le temps... alors j'ai rapidement remplacé tout çà par un bon vieux module L298 chinois.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#4 Message par F6FCO » sam. 13 mars 2021 16:56

A ce niveau l'antenne tourne mais n'a aucune retenue et je rappelle qu'elle sera placée dans un grenier hors de ma pièce d'utilisation. Il faut donc pouvoir la limiter à 180° de rotation sous peine d'enrouler le câble coaxial autour du mat et de tout péter.

J'ai choisi de me faire un système opto maison avec des leds et phototransitors et un disque perforé. Usinage du disque (depuis il en a eu d'autres versions) avec 45 trous sur 180° donc 4° entre chaque trou.
A chaque extrémité un trou lu par un autre phototransistor marque les limites. En fait un seul sert, celui de départ limite mini, ensuite je compte le nombre de trous pour arriver à la limite maxi.
Usinage du disque sur la grosse CNC:

Ld1.jpg


Ld2.JPG
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#5 Message par F6FCO » sam. 13 mars 2021 17:01

Le système de lecture du disque:

lf0.jpg

Le pic n'arrivait pas à lire les niveaux, pourtant à l'oscillo les créneaux étaient bien là :sad:. C'est avec le testeur de niveaux TTL que j'ai pu lever le renard, le photottor me donnait bien des états hauts mais des états bas à peu près que le PIC ne reconaissait pas, je lui ai rajouté un 2N2222 en buffer inverseur pour affirmer les niveaux.

Réalisation pratique de la version 1
Lf1.JPG

Lf3.JPG

Lf4.JPG
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#6 Message par F6FCO » sam. 13 mars 2021 17:06

Ca fonctionnait mais il y avait des soucis, dés que je bougeais un peut trop sur la table je perdais les niveaux, au moindre choc plus rien. En fait les photottors sont très directifs et le moindre défaut d'alignement rendait le truc inopérant. Je vous raconte çà en deux lignes mais j'ai passé un sacré bout de temps à essayer de mettre tout çà au point. Bref, c'était du bricolage.
Cà m'a saoulé, j'ai tout démonté, récupéré les composants et refait un truc plus sérieux. Comme quoi en prenant le temps de faire correctement les choses on en gagne. Mais bon... quand c'est jeune et pressé :sifflotte:

Lf5.JPG


Lf6.JPG


Lf7.JPG


Lf8.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#7 Message par F6FCO » sam. 13 mars 2021 17:08

Et la programmation PIC dans tout çà ?
Ca arrive.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#8 Message par F6FCO » sam. 13 mars 2021 17:21

Il a fallu compter et décompter les trous pour savoir dans quel azimut se trouve l'antenne et tenir compte des limites mini et maxi pour éviter la casse. Un peu chaud à programmer de tête alors j'ai fait un petit ordinogramme pour gérer tout çà:

lf9.jpg


Mais c'est pas tout, pour accorder une antenne loop magnétique sur la fréquence choisie il faut actionner un condensateur variable en série dans la boucle. Un truc que les jeunes de moins de 40ans ne connaissent pas. Vous en avez certainement déjà vu dans le vieux récepteur à tubes de papy, un truc avec des lames qui rentrent. Un composant qui se fait super rare cela dit.

lf10.jpg


Celui-ci est piloté par un moteur pas à pas récupéré sur un photocopieur. J'entends Temps-X marmonner dans sa barbe "- il a encore fallu qu'il nous case un PAP dans son histoire !!!"

Driver chinois pour piloter le pap ce qui implique deux fils de plus (clock et direction).

lf10.jpg


Le réglage de l'antenne est très pointu et c'est chaud d'y arriver à la main, alors j'ai prévu une vitesse de rotation rapide pour le réglage gros et une lente pour le réglage fin.
Et pour lui aussi il a fallu mettre des limites mini et maxi car il ne s'ouvre que de 180°. Encore le système des photottors, avec un doigt mobile cette fois:

lf12.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#9 Message par F6FCO » sam. 13 mars 2021 17:26

Je mets tout çà au point avec mon dernier banc de prototypage V.4 pour PIC 40pins et modules additionnels, je ferai un sujet dessus. Evidemment après il faudra faire un PCB dédié qui sera beaucoup plus simple. En bas à gauche sur la breadboard les trois petits modules de mesures TTL pour visualiser en temps direct les niveaux des fourches opto, sans eux je ne m'en serai pas sorti.

lf11.jpg


Le schéma de gestion du rotor:

lf13.jpg


La visu se fait sur un LCD 1602

lf14.jpg


A ce stade le programme est au point et tout tourne correctement sur table, il reste à faire un boitier et tirer les fils entre ma station et le grenier pour concrétiser tout çà. Un trou est déjà fait dans la cloison, il faut que je tire un fil témoin pour connaître la longueur de câble à aller acheter.

lf15.jpg


Et aussi construire l'antenne proprement dite :-D. Tout est décrit plus minutieusement sur cette page: https://f6fco.pagesperso-orange.fr/Loop.htm
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par F6FCO le sam. 13 mars 2021 17:45, modifié 10 fois.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Gestion à distance d'un rotor d'antenne Radio
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#10 Message par F6FCO » sam. 13 mars 2021 17:31

Le programme, je préfère travailler avec des fichiers séparés que je peux ouvrir ensembles sur des deux écrans plutôt que de passer mon temps à scroller.

Fichier main:

Code : Tout sélectionner

#include <Init Loop.asm>

; ------------- POM de l'antenne avant utilisation    
init_Antenne
    clrf    Compteur    ; RAZ du compteur
    clrf    Rotor
    clrf    CompteurCV
    clrf    ptrPas    
    bcf    H1
    bcf    H2
    call    Affiche_POM
POM_Antenne
    call    tournePOM
    bsf    AA_old        ; AA_old =1
    btfsc    PinLimiteRotor
    bra    POM_Antenne
    call    RazPontH
    
; ------------- On ramène le CV en position fermée
POM_CV
    call    tournePOMcv
    btfss    PinLimiteCV
    bra    POM_CV
    
    call    Affiche_Azimut
    
;*************************************** Main ******************************************************* 

main
    call    RazPontH
    nop
    nop

; ************** gestion poussoirs rotation antenne
poussoir_direct
    btfsc    pous1            ; 0 si appuyé, 1 inactif
    bra    poussoir_inverse
    call    tourneDirect
    bra    main

poussoir_inverse          
          btfsc    pous2
          bra    poussoir_CV_direct_Lent
          call    tourneInverse
          bra    main

; ************** gestion poussoirs rotation CV
    
poussoir_CV_direct_Lent
    btfsc    pous3
    bra    poussoir_CV_inverse_Lent
    call    tourneCVdirectLent
    bra    main
    
poussoir_CV_inverse_Lent
    btfsc    pous4
    bra    poussoir_CV_direct_Rapide
    call    tourneCVinverseLent
    bra    main
 
poussoir_CV_direct_Rapide
    btfsc    pous5
    bra    poussoir_CV_inverse_Rapide
    call    tourneCVdirectRapide
    bra    main
    
poussoir_CV_inverse_Rapide
    btfsc    pous6
    bra    main
    call    tourneCVinverseRapide
    bra    main
 
;*************************************** Includes fichiers annexes ******************************************************* 
#include <RoutinesCommunes.asm>        ; procédures communes
#include <routinesAffichage.asm>    ; procédures affichage LCD
#include <tempos.asm>            ; procédures temporisations
#include <LCD_18F_8Mhz.asm>        ; include affichage LCD
           
        end



Les sous-routines:

Code : Tout sélectionner

;**********************************************************************************************    
;************ Routines Communes ******************************************************** 
;**********************************************************************************************    
    
;***************    
tournePOM
    bcf    H1        
; pont H
    bsf    H2        
; pont H
    return   

;***************
tournePOMcv
    bcf    Cw
    bsf    Clk
    call    tempo250µs
    bcf    Clk    
    call    tempo250µs
    return

;***************
RazPontH
    bcf    H1        
; pont H
    bcf    H2        
; pont H
    return

;***************
tourneCVdirectLent    
    btfsc    PinLimiteCV
    clrf    CompteurCV
    
; ouverture du CV
    call    Affiche_donnees_CV
    
;test de la limite d'ouverture maxi
    movff    CompteurCV,tampon
    movlw    d'
180'
    subwf    tampon
    btfsc    STATUS,Z
    return
    ; --------------
    bsf    Cw
    bsf    Clk
    call    tempo5ms
    call    tempo5ms
    call    tempo5ms
    call    tempo5ms
    bcf    Clk    
    call    tempo5ms
    call    tempo5ms
    call    tempo5ms
    call    tempo5ms
    ; on incrémente CompteurCV seulement tous les 16 pas
    incf    ptrPas
    movff    ptrPas,tampon
    movlw    d'
16'
    subwf    tampon
    btfss    STATUS,Z
    return
    clrf    ptrPas
    incf    CompteurCV
    incf    CompteurCV
    return

;***************
tourneCVinverseLent        ; fermeture du CV
    btfsc    PinLimiteCV
    clrf    CompteurCV
    call    Affiche_donnees_CV
    btfsc    PinLimiteCV
    return
    bcf    Cw
    bsf    Clk
    call    tempo5ms
    call    tempo5ms
    call    tempo5ms
    call    tempo5ms
    bcf    Clk    
    call    tempo5ms
    call    tempo5ms
    call    tempo5ms
    call    tempo5ms
    ; on décrémente CompteurCV seulement tous les 16 pas
    movf    ptrPas,f    ; ptrPas=0 ?
    btfsc    STATUS,Z
    bra    decCVL            ; oui, on sort
    decf    ptrPas
    return    
decCVL    decf    CompteurCV
    decf    CompteurCV
    movlw    d'
16'
    movwf    ptrPas    
    return

;***************
tourneCVdirectRapide            ; ouverture du CV
    btfsc    PinLimiteCV
    clrf    CompteurCV
    call    Affiche_donnees_CV
    ;test de la limite d'
ouverture maxi
    movff    CompteurCV
,tampon
    movlw    d
'180'
    subwf    tampon
    btfsc    STATUS
,Z
    return
    
; --------------
    bsf    Cw
    bsf    Clk
    call    tempo5ms
    bcf    Clk    
    call    tempo5ms
    
; on incrémente CompteurCV seulement tous les 16 pas
    incf    ptrPas
    movff    ptrPas
,tampon
    movlw    d
'16'
    subwf    tampon
    btfss    STATUS
,Z
    return
    clrf    ptrPas
    incf    CompteurCV
    incf    CompteurCV
    return

;***************
tourneCVinverseRapide        ; fermeture du CV
    btfsc    PinLimiteCV
    clrf    CompteurCV
    call    Affiche_donnees_CV
    btfsc    PinLimiteCV
    return
    bcf    Cw
    bsf    Clk
    call    tempo5ms
    bcf    Clk    
    call    tempo5ms
    
; on décrémente CompteurCV seulement tous les 16 pas
    movf    ptrPas
,f    ; ptrPas=?
    btfsc    STATUS,Z
    bra    decCV            
; oui, on sort
    decf    ptrPas
    return    
decCV    decf    CompteurCV
    decf    CompteurCV
    movlw    d
'16'
    movwf    ptrPas    
    return

;***************
tourneDirect
    btfss    PinLimiteRotor
    clrf    Compteur
    call    Affiche_donnees_Rotor
    btfss    PinLimiteRotor
    return
    bsf    Rotor
,0        ; sens direct
    call     comptageAngle
    bcf    H1        
; pont H
    bsf    H2        
; pont H
    btfss    pous1
    bra    tourneDirect
    return  

;***************            
tourneInverse    
    btfss    PinLimiteRotor
    clrf    Compteur
    call    Affiche_donnees_Rotor
    movff    Compteur
,tampon
    movlw    d
'180'
    subwf    tampon
    btfsc    STATUS
,Z    ; test si arrivée en butée extrême
    return
    bcf    Rotor
,0        ; sens inverse
    call    comptageAngle
    bsf    H1        
; pont H
    bcf    H2        
; pont H
    btfss    pous2
    bra    tourneInverse
    return    

;***************    
comptageAngle
    btfsc    PinAngleRotor
    bra    setAA
    call    tempo5ms
    btfss    AA_old
    bra    razRotor7
testSens
    bcf    AA_old
    btfsc    Sens
    bra    decSens
incSens    incf    Compteur
    incf    Compteur
    incf    Compteur
    incf    Compteur
    bra    correctionZero
decSens    decf    Compteur
    decf    Compteur
    decf    Compteur
    decf    Compteur
    bra    correctionZero        
setAA    bsf    AA_old
    bra    correctionZero        
razRotor7
    bcf    AA_old        
correctionZero
    btfss    PinLimiteRotor
    clrf    Compteur
    return

;***************    
conversion_ascii_Rotor
    
; digit0
    movff    Compteur
,tampon ;243
    movff    Compteur
,ptr    ;243
    movff    tampon
,dividende16 ;243
    call    division16
    movff    quotient16
,WREG    ;24
    mullw    d
'10'
    movff    PRODL,WREG    ;240
    subwf    ptr
,f        ;3
    movlw    d
'48'
    addwf    ptr,f        ;51
    movff    ptr
,digit0
    
; digit1
    movff    quotient16
,tampon
    movff    quotient16
,ptr
    movff    tampon
,dividende16 ;243
    call    division16
    movff    quotient16
,WREG    ;24
    mullw    d
'10'
    movff    PRODL,WREG    ;240
    subwf    ptr
,f        ;3
    movlw    d
'48'
    addwf    ptr,f        ;51
    movff    ptr
,digit1
    
; digit2
    movff    quotient16
,tampon
    movff    quotient16
,ptr
    movff    tampon
,dividende16 ;243
    call    division16
    movff    quotient16
,WREG    ;24
    mullw    d
'10'
    movff    PRODL,WREG    ;240
    subwf    ptr
,f        ;3
    movlw    d
'48'
    addwf    ptr,f        ;51
    movff    ptr
,digit2
    return
    
;***************
conversion_ascii_CV
    
; digit0
    movff    CompteurCV
,tampon ;243
    movff    CompteurCV
,ptr    ;243
    movff    tampon
,dividende16 ;243
    call    division16
    movff    quotient16
,WREG    ;24
    mullw    d
'10'
    movff    PRODL,WREG    ;240
    subwf    ptr
,f        ;3
    movlw    d
'48'
    addwf    ptr,f        ;51
    movff    ptr
,digit0
    
; digit1
    movff    quotient16
,tampon
    movff    quotient16
,ptr
    movff    tampon
,dividende16 ;243
    call    division16
    movff    quotient16
,WREG    ;24
    mullw    d
'10'
    movff    PRODL,WREG    ;240
    subwf    ptr
,f        ;3
    movlw    d
'48'
    addwf    ptr,f        ;51
    movff    ptr
,digit1
    
; digit2
    movff    quotient16
,tampon
    movff    quotient16
,ptr
    movff    tampon
,dividende16 ;243
    call    division16
    movff    quotient16
,WREG    ;24
    mullw    d
'10'
    movff    PRODL,WREG    ;240
    subwf    ptr
,f        ;3
    movlw    d
'48'
    addwf    ptr,f        ;51
    movff    ptr
,digit2
    return





;********************************************************************
;
                Division sur entiers 16bits _ F6FCO                  
;     Il faut préalablement déclarer les variables ci-dessous sur 16 bits         
; dividende16, diviseur16, quotient16, reste16, valeur1 et valeur2 sur 16bits                
;                                                                
; poids faible dans dividende16                                        
; poids fort de la valeur à diviser dans dividende16+1,               
;                                                                
; poids faible dans diviseur16                                        
; poids fort du diviseur dans diviseur16+1                            
;                                                                
; Le résultat sera dans quotient16 et quotient16+1                       
; Le reste sera dans reste16 et reste16+1                                    
;                                                                
; Cette division utilise la routine soustraction16                         
;                                        
;********************************************************************   
division16    
        
; on vérifie si c'est une division par zéro, si c'est le cas on charge le dividende dans le quotient.
        ; dividende/0=dividende, pas cohérent mathématiquement mais nécessaire dans le projet en cas de ligne
        
; horizontale (Y=0) ou verticale (X=0).
        movf    diviseur16,diviseur16
        btfss    STATUS
,Z
        bra    div16
div_zero    movf    diviseur16
+1,diviseur16+1
        btfsc    STATUS
,Z
        bra    div_quot
div16        
; on initialise quotient=0
        clrf    quotient16
        clrf    quotient16
+1
        
; reste=dividende
        movff    dividende16
,reste16
        movff    dividende16
+1,reste16+1
div16_1        movf    reste16
+1,w
        subwf    diviseur16
+1,w
        
; test si poids fort reste>diviseur ?
        btfss    STATUS,C                    
        bra    div16_3
        
; test si poids fort reste=diviseur ? sinon on sort
div16_4        bz    div16_2
findiv16    return
div16_2        
; test si poids faible reste>=diviseur
        movff    reste16
,WREG
        subwf    diviseur16
,w
        btfss    STATUS
,C
        bra    div16_3
        bz    div16_3
        bra    findiv16
div16_3        
; reste=dividende-diviseur
        nop
        movff    reste16
,valeur1
        movff    reste16
+1,valeur1+1
        movff    diviseur16
,valeur2
        movff    diviseur16
+1,valeur2+1
        call    soustraction16            
; résultat dans valeur1, valeur1+1
        movff    valeur1
+1,reste16+1
        movff    valeur1
,reste16
        
; quotient +1
        bcf    STATUS
,C
        movlw    1
        addwf    quotient16
        
; on additionne le carry dans le poids fort
        movf    STATUS
,C
        andlw    0x1
        addwf    quotient16
+1
        bra    div16_1
div_quot    
; en cas de division par zéro on charge le dividende dans le quotient
        movff    dividende16
,quotient16
        movff    dividende16
+1,quotient16+1
        return
        
;********************************************************************
;
             Soustraction sur entiers 16bits    -F6FCO-                    *
;
     Il faut préalablement déclarer des variables sur 16 bits         *
;
             valeur1:- valeur2:2                                    *
;
                                                                    *
;
 nombre fort:                                                        *        
; valeur1: poids faible                                                *
;
 valeur1+1: poids fort                                                *
;
                                                                    *
;
 nombre faible à soustraire :                                        *
;
 valeur2: poids faible                                                  * 
; valeur2+1: poids fort                                                *
;
                                                                    *  
; Appeler la procédure soustraction16 et le résultat de             *
;
 valeur1-valeur2 sur 16bits sera dans les 2 octets de valeur1           *
;********************************************************************
   
soustraction16
            movf    valeur2
,w
            subwf    valeur1
            movf    valeur2
+1,w
            subwfb    valeur1
+1
            movf    valeur2
+2,w
            subwfb    valeur1
+2
            return




Les diverses tempos:

Code : Tout sélectionner

;*********************************** routines tempos ****************************************
tempo250µs
; Délai 250 Cycles de la machine
; Durée du délai 250 microsecond
; Fréquence de l'oscillateur 4 MHZ

            movlw       .83
            movwf       Reg_1,1
            decfsz      Reg_1,F,1
            bra         $-2

        return

tempo5ms
; Délai 5 000 Cycles de la machine
; Durée du délai 5 millisecond
; Fréquence de l'
oscillateur 4 MHZ
            movlw       .125
            movwf       Reg_1
,1
            movlw       .7
            movwf       Reg_2
            decfsz      Reg_1
,F,1
            bra         
$-2
            decfsz      Reg_2
            bra         
$-6
            return
            
            
tempo100ms
; Délai 20 000 Cycles de la machine
; Durée du délai 10 millisecond
; Fréquence de l'oscillateur 8 MHZ

            movlw       .248
            movwf       Reg_1,1
            movlw       .26
            movwf       Reg_2
            decfsz      Reg_1,F,1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            nop
        return
        
        
tempo500ms
; Délai 500 000 Cycles de la machine
; Durée du délai 500 millisecond
; Fréquence de l'
oscillateur 4 MHZ
            movlw       .85
            movwf       Reg_1
,1
            movlw       .138
            movwf       Reg_2
            movlw       .3
            movwf       Reg_3
            decfsz      Reg_1
,F,1
            bra         
$-2
            decfsz      Reg_2
            bra         
$-6
            decfsz      Reg_3
            bra         
$-.10
            return


tempo1500ms
; Délai 3 000 000 Cycles de la machine
; Durée du délai 1500 millisecond
; Fréquence de l'oscillateur 8 MHZ

            movlw       .13
            movwf       Reg_1,1
            movlw       .57
            movwf       Reg_2
            movlw       .16
            movwf       Reg_3
            decfsz      Reg_1,F,1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            decfsz      Reg_3
            bra         $-.10
            nop
            nop
        return
        
tempo1s
; Délai 20 000 Cycles de la machine
; Durée du délai 10 millisecond
; Fréquence de l'
oscillateur 8 MHZ

            movlw       .248
            movwf       Reg_1
,1
            movlw       .26
            movwf       Reg_2
            decfsz      Reg_1
,F,1
            bra         
$-2
            decfsz      Reg_2
            bra         
$-6
            nop
        return  

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

Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:


Retourner vers « Langage ASM »

Qui est en ligne

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