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
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#21 Message par Gérard » dim. 28 mars 2021 21:44

Moi aussi je suis preneur.

Trop fort F6, heureusement qu'on l'a. :bravo:
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

[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 :

#22 Message par F6FCO » dim. 11 avr. 2021 18:39

Hello tous,

Ca prend un peu de temps parce que je mène plein de projets en même temps mais çà finit quand même par avancer.

Boitier câblé, la face avant imposant certaines dimensions avec toutes les commandes je me suis retrouvé pas mal de place libre à l'intérieur. J'en ai profité pour caser deux préamplis HF que j'avais dans mes tiroirs depuis pas mal de temps, rien à voir avec les PIC mais l'occasion a fait le larron. Cette antenne étant destinée à faire uniquement de la réception je vais l'augmenter en antenne active.

lf22.JPG


Le rotor qui sera placé sur son mât dans le grenier est aussi assemblé. Il comporte tout le système de rotation et une plaque qui recevra l'antenne boucle avect le système de commande du condensateur variable d'adaptation antenne:

lf23.JPG


Les deux parties sont reliées par un câble de 10m qui traversera la cloison, le boitier dans la station radio et l'ensemble mât/rotor/antenne dans le grenier.
Les essais sur table sont concluants, petite vidéo:

https://www.youtube.com/embed/NIfrhpU6WHk

Les fichiers .ASM:

Le fichier init:

Code : Tout sélectionner

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

    Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct" 


    list            p
=18f4525        ; processeur utilisé 
    
#include        <p18f4525.inc>        ; Définitions des constantes
    #include    <LCD_18F.inc>        ; définitions des constantes LCD

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

 CONFIG    OSC = INTIO67                      ; Oscillateur interne 8MHz 
 CONFIG    IESO 
= OFF                        ; Oscillateur secondaire refusé (ON/OFF)
 CONFIG PWRT = ON                              ; Délai au démarrage (ON/OFF)
 CONFIG BOREN = OFF                           ; Reset si chute de tension (ON/OFF)
 CONFIG BORV = 0                              ; Tension de reset en 1/10ème Volts 
 CONFIG WDT 
= OFF                              ; Mise hors service du watchdog (ON/OFF)
 CONFIG PBADEN = OFF                          ; PORTB<4:0> les broches sont configurées comme E/S numériques lors de la réinitialisation
 CONFIG LPT1OSC 
= OFF                         ; Timer1 configuré pour un fonctionnement plus puissant
 CONFIG MCLRE 
= ON                           ; Mclr configuré comme entrée
 CONFIG STVREN 
= ON                           ; Reset sur débordement de pile (ON/OFF)
 CONFIG LVP = OFF                              ; Programmation basse tension autorisée (ON/OFF)
 CONFIG XINST = OFF                           ; L'extension du jeu d'instructions et le mode d'adressage indexé sont désactivés(mode hérité)
 CONFIG DEBUG = OFF                ; Debugger hors service
 CONFIG CP0 = OFF                              ; Code protection sur block 0 (ON/OFF)
 CONFIG CP1 = OFF                              ; Code protection sur block 1 (ON/OFF)
 CONFIG CP2 = OFF                              ; Code protection sur block 2 (ON/OFF)
 CONFIG CPB = OFF                              ; Code protection sur bootblock  (ON/OFF)
 CONFIG CPD = OFF                              ; Code protection sur eeprom (ON/OFF)
 CONFIG WRT0 = OFF                ; Protection écriture block 0 (ON/OFF)
 CONFIG WRT1 = OFF                ; Protection écriture block 1 (ON/OFF)
 CONFIG WRT2 = OFF                ; Protection écriture block 2 (ON/OFF)
 CONFIG WRTB = OFF                ; Protection écriture bootblock (ON/OFF)
 CONFIG WRTC = OFF                ; Protection écriture configurations (ON/OFF)
 CONFIG WRTD = OFF                ; Protection écriture zone eeprom (ON/OFF)
 CONFIG EBTR0 = OFF                ; Protection lecture de table block 0 (ON/OFF)
 CONFIG EBTR1 = OFF                ; Protection lecture de table block 1 (ON/OFF)
 CONFIG EBTR2 = OFF                ; Protection lecture de table block 2 (ON/OFF)
 CONFIG EBTRB = OFF                ; Protection lecture de table bootblock (ON/OFF)

            
;****************************** assignations ***************************************** 

; commandes rotor
#define pous1        PORTA,0    ; poussoir rotor direct
#define pous2        PORTA,1    ; poussoir rotor inverse
#define pous3        PORTB,5    ; poussoir CV lent
#define    pous4        PORTB,4 ; poussoir CV lent
#define pous5        PORTA,5 ; poussoir CV rapide
#define pous6        PORTA,4 ; poussoir CV rapide
#define PinLimiteRotor     PORTB,3    ; fourche optique rotor limite
#define PinAngleRotor     PORTB,2 ; fourche optique rotor angle
#define    PinLimiteCV    PORTB,1    ; fourche optique CV
#define Clk        LATE,1    ; clock PAP CV
#define Cw        LATE,2    ; dir PAP CV
#define    H2        PORTC,1    ; Pont en H rotor
#define    H1        PORTC,0    ; Pont en H rotor

#define Sens        Rotor,0    ; sens de rotation du disque
#define    AA_old        Rotor,7    ;


;****************************** variables *************************************

 CBLOCK H'
0
 ENDC


 CBLOCK    H'
80'
        wreg_temps                          
        status_temps                       
        bsr_temps                          
    Reg_1            :1
    Reg_2            :1
    Reg_3            :1    
    Rotor            :1    
    Compteur        :1 ; comptage des degrés
    CompteurCV        :1 ; comptage des pas du CV
    ptrPas            :1 ; compteur 16pas
    tampon               ; registre à tout faire    
    LcdLigne        :1
    LcdColonne        :1
    dividende16        :2
    diviseur16        :2
    quotient16        :2
    reste16            :2
    valeur1            :2
    valeur2            :16
    ptr            :1
    ptr2            :1
    digit0            :1
    digit1            :1
    digit2            :1
    ENDC

;**************************** adresse de depart après reset **********************************

    ORG H'
0'
          goto     init   

;********************************* interruption haute priorité *********************************

    ORG    H'
8'
          retfie 

;********************************* interruption basse priorité *********************************

    ORG     H'
18'                                  
          movff     STATUS,status_temps             ; sauve STATUS register
          movff   WREG,wreg_temps                 ; sauve registe de travaille
          movff   BSR,bsr_temps                      ; sauve le BSR registe
         movff   bsr_temps,BSR                      ; restore BSR 
          movff   wreg_temps,WREG                 ; restore registe de travail
          movff   status_temps,STATUS             ; restore STATUS 
          retfie      
      
;********************************************************************************************** 
init
          movlw     B'
01110011'
          movwf     OSCCON            ; oscillateur à 8 Mhz 

          movlw     B'
00001111'
          movwf     ADCON1            ; mode analogique
          clrf     TRISA
          
          movlw    B'
11111111'
          movwf    TRISA
      
          movlw    b'
11111111'
          movwf    TRISB
          clrf     LATB

          movlw    b'
00000000'
          movwf    TRISC
          clrf    LATC

          movlw    b'
00000000'     
          movwf    TRISD
          clrf    LATD

           movlw    b'
00000000'     
          movwf    TRISE
          clrf    LATE

         ;bra     init_Antenne
    bcf    H1
    bcf    H2
    ; parce qu'
on ne s'en servira pas
    clrf    dividende16+1
    clrf    diviseur16+1
    clrf    quotient16+1
    clrf    reste16+1
       movlw    d'
10'
       movwf    diviseur16    ; il restera toujours à 10
         
      
init_LCD
    LCD_INIT        ; initialisation du LCD
    ;bra    init_Antenne
    call    tempo1500ms
    LCD_CURSEUR_OFF
    LCD_CLEAR
    call    tempo100ms
    call    AffSplatch
    LCD_CLEAR
    nop
    nop
    ; goto main



Le 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    ClsFleche
    call    RazPontH
    nop
    ;call    Affiche_donnees
    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


Le fichier routines communes:

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

;***************
tourneInverse
    call    comptageAngle
    call    Affiche_donnees_Rotor
    btfss    PinLimiteRotor    
; retour à l'origine départ ?
    bra     finInverse    ; si oui on sort
    bsf    Rotor,0        ; réglage en sens inverse pour de décomptage
    bcf    H1        ; pont H=0
    call    tempo5ms
    bsf    H2        ; pont H=1
    call    tempo5ms
    btfss    pous2        ; test appui poussoir
    bra    tourneInverse    ; on continue tant qu'
il est pressé
    bcf    H2        
; sinon on sort et RAZ du pont H
    return
finInverse
    bcf    H2
    clrf    Compteur    
; puisqu'on est revenu à l'origine, raz compteur
    return  

;***************            
tourneDirect    
    call    comptageAngle
    call    Affiche_donnees_Rotor
    movff    Compteur
,tampon    ; on vérifie
    
    movlw    d
'172'        ; mem1  (savoir si mem2>=mem1)
    subwf    tampon,w    ; mem2
    btfsc    STATUS
,Z    ; si mem2=mem1 on sort
    return    
    btfsc    STATUS
,C    ; si mem2>mem1 on sort    
    return
    
    bcf    Rotor
,0        ; réglage en sens direct pour le comptage
    bsf    H1        
; pont H =1
    call     tempo5ms
    bcf    H2        
; pont H =0
    call     tempo5ms
    btfss    pous1        
; test appui poussoir
    bra    tourneDirect    
; on continue tant que'il est pressé
    bcf    H1        ; sinon on sort et RAZ du pont H    
    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:2 - 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


Le fichier 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  

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


Le fichier routines Affichage:

Code : Tout sélectionner

        
AffSplatch
    LCD_LIGNE    1
    LCD_COLONNE    6
    LCD_AFF_DATAS     
'L'
    LCD_AFF_DATAS     'O'
    LCD_AFF_DATAS     'O'
    LCD_AFF_DATAS     'P'
    LCD_LIGNE    2
    LCD_COLONNE    5
    LCD_AFF_DATAS     
'-'
    LCD_AFF_DATAS     'F'
    LCD_AFF_DATAS     '6'
    LCD_AFF_DATAS     'F'
    LCD_AFF_DATAS     'C'
    LCD_AFF_DATAS     'O'
    LCD_AFF_DATAS     '-'
    call    tempo1500ms
    return

Affiche_POM
    LCD_LIGNE 1
    LCD_COLONNE 4
    LCD_AFF_DATAS     
' '
    LCD_LIGNE 1
    LCD_COLONNE 4
    LCD_AFF_DATAS     
'o'
    LCD_AFF_DATAS     'r'
    LCD_AFF_DATAS     'i'
    LCD_AFF_DATAS     'g'
    LCD_AFF_DATAS     'i'
    LCD_AFF_DATAS     'n'
    LCD_AFF_DATAS     'e'
    LCD_AFF_DATAS     's'
    LCD_LIGNE 2
    LCD_COLONNE 4
    LCD_AFF_DATAS     
's'
    LCD_AFF_DATAS     'y'
    LCD_AFF_DATAS     's'
    LCD_AFF_DATAS     't'
    LCD_AFF_DATAS     'e'
    LCD_AFF_DATAS     'm'
    LCD_AFF_DATAS     'e'
    return

Affiche_Azimut
    LCD_CLEAR
    LCD_LIGNE 1
    LCD_COLONNE 1
    LCD_AFF_DATAS     
'A'
    LCD_AFF_DATAS     'z'
    LCD_AFF_DATAS     'i'
    LCD_AFF_DATAS     'm'
    LCD_AFF_DATAS     'u'
    LCD_AFF_DATAS     't'
    LCD_AFF_DATAS     ':'    
    LCD_LIGNE 2
    LCD_COLONNE 5
    LCD_AFF_DATAS     
'C'
    LCD_AFF_DATAS     'V'
    LCD_AFF_DATAS     ':'    
    call    tempo1500ms
    return
    
Affiche_donnees_Rotor
    call    conversion_ascii_Rotor
    LCD_LIGNE 1
    LCD_COLONNE 9
    movff    digit2
,WREG
    call    LCD_aff_datas
    movff    digit1
,WREG
    call    LCD_aff_datas
    movff    digit0
,WREG
    call    LCD_aff_datas    
    return

Affiche_donnees_CV
    call    conversion_ascii_CV
    LCD_LIGNE 2
    LCD_COLONNE 9
    movff    digit2
,WREG
    call    LCD_aff_datas
    movff    digit1
,WREG
    call    LCD_aff_datas
    movff    digit0
,WREG
    call    LCD_aff_datas    
    return


Le fichier LCD_18F.inc

Code : Tout sélectionner

;********************************************************
;
                  - F6FCO  -                             ;
;
  Librairie simplifiée affichage LCD 18F sur 8 bits    ;
;
                     juin 2020                            ;
;********************************************************

;
 Ce fichier contient les définitions et macros nécessaires au bon fonctionnement du LCD

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

;
Variables à rajouter dans le programme principal

;     CBLOCK H'0' 
;        Reg_1
;        Reg_2
;        Reg_3    
;        LcdLigne
;        LcdColonne
;    ENDC

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

;
 connections des pins

; PIC        LCD
; -----------------
;
 PORTD
; rd0    -->    D0
; rd1    -->    D1
; rd2    -->    D2
; rd3    -->    D3
; rd4    -->    D4
; rd5    -->    D5
; rd6    -->    D6
; rd7    -->    D7        Busy Flag  BF=1 occupé         BF=0 libre

; PORTC LATC = x000xxxx
; rc4    -->    RW        RW=0 écriture        RW=1  lecture    
; rc5    -->    RS        RS=0 envoi de commande   RS=1 envoi de donnée
; rc6    -->    E        Enable servant à générer le créneau de validation

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

;
Fonctions implémentées:

;
LCD_INIT                             ; initialisation du LCD
;LCD_AFF_COMMANDE_W                    ; envoi d'une commande au LCD passage de paramètre par W
;LCD_AFF_COMMANDE                     ; envoi d'
une commande au LCD passage de paramètre par la macro
;LCD_AFF_DATAS                         ; envoi du caractère a afficher.
;
LCD_LIGNE_W                        ; choix de la ligne d'écriture passage de paramètre par W
;LCD_LIGNE                             ; choix de la ligne d'
écriture passage de paramètre par la macro
;LCD_COLONNE_W                         ; choix de la colonne passage de paramètre par W
;LCD_COLONNE                         ; choix de la colonne pasage de paramètre pa la macro
;LCD_CURSEUR_BLINK                    ; fait clignoter le curseur
;LCD_CURSEUR_OFF                    ; éteint le curseur
;LCD_CURSEUR_FIXE                    ; curseur fixe
;LCD_CURSEUR_HOME                    ; ramène le curseur ligne 1 colonne 1
;LCD_SCROLL_DROITE                    ; fait défiler le texte vers la droite
;LCD_SCROLL_GAUCHE                    ; fait défiler le texte vers la gauche
;LCD_AFF_OFF                        ; désactive l'affichage
;LCD_CLEAR                            ; efface le LCD

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

#define     Port_LAT_Datas    LATD    ; Port d'
écriture des 8 bits de datas
#define     Port_Datas    PORTD    ; "            "            "
#define        Port_Service     LATC     ; port pour les 3 fils de commande
#define        TRISDATAS    TRISD

#define        RS    5                    ; pin pour RS RS=0 -> envoi de commande    RS=1 -> envoi de données
#define     RW    4                    ; pin pour RW RW=0 -> écriture dans le LCD     RW=1 -> lecture du LCD. Peut-être soudée à la gnd pour gagner une pin
#define     En    6                    ; pin pour En enable sert à générer le pulse de validation des envois
#define     ligne1    0x80            ; debut ligne 1 LCD 2x16 et LCD 20x4
#define     ligne2    0xc0            ; debut ligne 2 LCD 2x16 et LCD 20x4
#define     ligne3    0x94            ; debut ligne 3 lCD 20x4
#define     ligne4    0xD4            ; debut ligne 4 lCD 20x4


LCD_INIT    macro
        call    LCD_init
        endm

LCD_AFF_COMMANDE    macro
        call    LCD_aff_commande
        endm
        
LCD_AFF_DATAS    macro carac
        movlw    carac
        call    LCD_aff_datas
        endm

LCD_AFF_DATAS_W    macro 
        call    LCD_aff_datas
        endm

LCD_LIGNE_W    macro 
        call    LCD_Ligne
        endm

LCD_LIGNE    macro nrligne
        movlw    nrligne
        call    LCD_Ligne
        endm

LCD_COLONNE_W    macro 
        call    LCD_Colonne
        endm
        
LCD_COLONNE    macro nrcol
        movlw    nrcol
        call    LCD_Colonne
        endm
        
LCD_CURSEUR_BLINK macro
        call    LCD_curseur_blink
        endm
        
LCD_CURSEUR_OFF    macro
        call    LCD_curseur_off
        endm
        
LCD_CURSEUR_FIXE macro
        call     LCD_curseur_fixe
        endm
        
LCD_CURSEUR_HOME macro
        call    LCD_curseur_home
        endm
        
LCD_SCROLL_DROITE macro
        call    LCD_scroll_droite
        endm
        
LCD_SCROLL_GAUCHE macro
        call    LCD_scroll_gauche
        endm
        
LCD_AFF_OFF macro
        call    LCD_aff_off
        endm
        
LCD_CLEAR macro
        call    LCD_clear
        endm
        
RW0        macro
        bcf    Port_Service
,RW
        endm
        
RW1        macro
        bsf    Port_Service
,RW
        endm
        
RS0        macro
        bcf    Port_Service
,RS
        endm
        
RS1        macro
        bsf    Port_Service
,RS
        endm
        
En1        macro    
        bsf    Port_Service
,En
        endm
        
En0        macro
        bcf    Port_Service
,En
        endm

; -----------------------------------------------------
;
                COMMANDES LCD
; 0x38 mode 2 lignes et matrice 5x7
; 0x01 clear LCD
; 0x02 curseur home
; 0x05 déplacer le curseur vers la droite, déplacer l'affichage (gauche
; 0x06 déplacer le curseur vers la droite, affichage fixe
; 0x07 déplacer le curseur vers la droite, déplacer l'
affichage vers la gauche
; 0x0e affichage activé, curseur activé, curseur fixe
; 0x0f affichage activé, curseur activé, curseur clignotant
; 0x10 déplacer le curseur vers la gauche
; 0x14 déplacer le curseur vers la droite
; 0x18 déplacer l'affichage vers la gauche
; 0x1c déplacer l'
affichage vers la droite
; 0x80 forcer le curseur en début de 1ere ligne
; 0x83 aller a la premiere ligne position 3, etc.
;
 0x3c activer la deuxième ligne
; 0xc0 forcer le curseur en début de 2eme ligne
; 0xc1 aller à la 2eme ligne position 1
; 0xC2 aller a la 2eme ligne position 2, etc.
;
 0x08 affichage off, curseur off
; 0x0c affichage ON, curseur OFF
; 0x80 début de la ligne 1
; 0xC0 début de la ligne 2
; 0x94 début de la ligne 3
; 0xd4 début de la ligne 4


Le fichier LCD_18F_8Mhz.asm

Code : Tout sélectionner

;********************************************************
;
                  - F6FCO  -                             ;
;
  Librairie simplifiée affichage LCD 18F sur 8 bits    ;
;
                     juin 2020                            ;
;********************************************************

;
 Ce fichier contient les définitions et macros nécessaires au bon fonctionnement du LCD

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

;
Variables à rajouter dans le programme principal

;     CBLOCK H'0' 
;        Reg_1
;        Reg_2
;        Reg_3    
;        LcdLigne
;        LcdColonne
;    ENDC

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

;
 connections des pins

; PIC        LCD
; -----------------
;
 PORTD
; rd0    -->    D0
; rd1    -->    D1
; rd2    -->    D2
; rd3    -->    D3
; rd4    -->    D4
; rd5    -->    D5
; rd6    -->    D6
; rd7    -->    D7        Busy Flag  BF=1 occupé         BF=0 libre

; PORTC
; rc4    -->    RW        RW=0 écriture        RW=1  lecture    
; rc5    -->    RS        RS=0 envoi de commande   RS=1 envoi de donnée
; rc6    -->    E        Enable servant à générer le créneau de validation

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

;
Fonctions implémentées:

;
LCD_INIT                             ; initialisation du LCD
;LCD_AFF_COMMANDE_W                    ; envoi d'une commande au LCD passage de paramètre par W
;LCD_AFF_COMMANDE                     ; envoi d'
une commande au LCD passage de paramètre par la macro
;LCD_AFF_DATAS                         ; envoi du caractère a afficher.
;
LCD_LIGNE_W                        ; choix de la ligne d'écriture passage de paramètre par W
;LCD_LIGNE                             ; choix de la ligne d'
écriture passage de paramètre par la macro
;LCD_COLONNE_W                         ; choix de la colonne passage de paramètre par W
;LCD_COLONNE                         ; choix de la colonne pasage de paramètre pa la macro
;LCD_CURSEUR_BLINK                    ; fait clignoter le curseur
;LCD_CURSEUR_OFF                    ; éteint le curseur
;LCD_CURSEUR_FIXE                    ; curseur fixe
;LCD_CURSEUR_HOME                    ; ramène le curseur ligne 1 colonne 1
;LCD_SCROLL_DROITE                    ; fait défiler le texte vers la droite
;LCD_SCROLL_GAUCHE                    ; fait défiler le texte vers la gauche
;LCD_AFF_OFF                        ; désactive l'affichage
;LCD_CLEAR                            ; efface le LCD

; ------------------------- Initialisation du LCD
LCD_init
    call    tempo15ms
    call    tempo15ms
    call    tempo15ms
    movlw    0x38                ; 0x38 mode 2 lignes et matrice 5x7
    call    LCD_aff_commande
    movlw    0x0e                ; 0x0e affichage activé, curseur activé, curseur fixe
    call    LCD_aff_commande
    movlw    0x06                ; 0x06 déplacer le curseur vers la droite, affichage fixe
    call    LCD_aff_commande
    movlw    0x01                ; 0x01 clear LCD 
    call    LCD_aff_commande
    movlw    '
 '                    ; Forçage d'un espace au premier caractère sinon le déplacement ne s'effectue pas
    call    LCD_aff_datas
    movlw    0x80    
    movwf    LcdLigne             ; mise en mem de l'
adr de la premiere ligne
    call    tempo50µs
    return

; ------------------------- affichage d'une commande
;                            ; avec scrutation du buzy flag    
LCD_aff_commande
    movwf    Port_LAT_Datas        ; movwf    LATD        ; envoi sur le port datas
    RS0                            ; bcf        LATC,5        ; RS0    envoi d'
une commande
    En1                            
; bsf        LATC,6        ; En1 front montant du créneau de validation     
    movlw    b
'10000000'         ; bit 7 en entrée pour lire le busy flag
    movwf    TRISDATAS            
; movwf    TRISD
    RW1                            
; bsf        LATC,4        ; RW1 on passe en lecture du lcd
    
; ----------------- Test du busy Flag (bit7 du port Datas
    movff    Port_LAT_Datas
,Reg_1     ;movff    PORTD,Reg_1 ; sauvegarde du port data
    movlw    b
'10000000'         ; on isole le bit 7
    andwf    Reg_1
,f
buzy_c
    
;btfsc    STATUS,Z
    
;bra        buzy_c
    call    tempo700µs

    
; -----------------
    call    tempo50µs
    RW0                         
;bcf        LATC,4        ; RW0 on repasse en écriture
    movlw    b
'00000000'            ; bit 7 remis en sortie
    movwf    TRISDATAS             
; movwf    TRISD    
    En0                            
; bcf        LATC,6        ; En0 front descendant du creneau de validation
    return

; ------------------------- affichage d'une commande
;                             avec tempo    
LCD_aff_commande_old
    nop
    nop
    movwf    Port_LAT_Datas
    RS0        
    En1    
    call    tempo700µs
    En0
    return
    
; ------------------------- Affichage d'
une donnée (caractère)
;
                            avec scrutation du buzy flag
LCD_aff_datas
    clrf    Port_LAT_Datas
    movwf    Port_LAT_Datas        
; envoi sur le port datas
    bsf    Port_Service
,5        ; RS1    envoi d'un data
    bsf    Port_Service,6        ; En1 front montant du créneau de validation     
    movlw    b'
10000000'         ; bit 7 en entrée pour lire le busy flag
    movwf    TRISDATAS
    bsf    Port_Service,4        ; RW1 on passe en lecture du lcd
    ; ----------------- Test du busy Flag (bit7 du port Datas
    movff    Port_LAT_Datas,Reg_1     ; sauvegarde du port data
    movlw    b'
10000000'         ; on isole le bit 7
    andwf    Reg_1,f
buzy_d
    ;btfss    STATUS,Z
    ;bra        buzy_d
    call    tempo700µs
    ; -----------------
    call    tempo50µs
    bcf    Port_Service,4        ; RW0 on repasse en écriture
    movlw    b'
00000000'            ; bit 7 remis en sortie
    movwf    TRISDATAS    
    bcf    Port_Service,6        ; En0 front descendant du creneau de validation
    return

; ------------------------- Affichage d'
une donnée (caractère)
;
                            avec tempo
LCD_aff_datas_old
    movwf    Port_LAT_Datas
    RS1
    En1
    call    tempo700µs
    En0
    return
    
; ------------------------- choix de la ligne d'affichage    
LCD_Ligne
    movwf    LcdLigne
    sublw    4
    bz    lcdligne4
    movf    LcdLigne,w
    sublw    3
    bz    lcdligne3
    movf    LcdLigne,w
    sublw    2
    bz    lcdligne2
    movf    LcdLigne,w
    sublw    1
    bz    lcdligne1
lcdligne1
    movlw    ligne1        ; adr début ligne1
    movwf    LcdLigne    ; mise en mem de l'
adresse début de ligne 1
    bra    finlcdligne
lcdligne2
    movlw    ligne2        
; adr début ligne2
    movwf    LcdLigne    
; mise en mem de l'adresse début de ligne 2
    bra    finlcdligne
lcdligne3
    movlw    ligne3        ; adr début ligne3
    movwf    LcdLigne    ; mise en mem de l'
adresse début de ligne 3
    bra    finlcdligne
lcdligne4
    movlw    ligne4        
; adr début ligne4
    movwf    LcdLigne    
; mise en mem de l'adresse début de ligne 4
finlcdligne    
    return

; ------------------------- choix de la colonne d'
affichage
LCD_Colonne            
    addlw    
-1    ; on soustrait 1 à W
    addwf    LcdLigne
,w
    call    LCD_aff_commande
    return
    
;------------------------- curseur clignotant
LCD_curseur_blink
    movlw    0x0f
    call    LCD_aff_commande
    return

;------------------------- curseur désactivé
LCD_curseur_off
    movlw    0x0c
    call    LCD_aff_commande
    return

;------------------------- curseur fixe
LCD_curseur_fixe
    movlw    0x0e
    call    LCD_aff_commande
    return

;------------------------- curseur home
LCD_curseur_home
    movlw    0x02
    call    LCD_aff_commande
    return
    
;------------------------- déplace l'affichage vers la droite
LCD_scroll_droite
    movlw    0x1c
    call    LCD_aff_commande
    return

;------------------------- déplace l'
affichage vers la gauche
LCD_scroll_gauche
    movlw    0x18
    call    LCD_aff_commande
    return

;------------------------- affichage off
LCD_aff_off
    movlw    0x08
    call    LCD_aff_commande
    return

;------------------------- efface le LCD
LCD_clear
    movlw    0x01
    call    LCD_aff_commande
    
;call    tempo50µs
    return

; ------------------------- tempos         
tempo700µs  
; pour 8mhz
; Délai 1 600 Cycles de la machine
; Durée du délai 800 microsecond
; Fréquence de l'oscillateur 8 MHZ
    movlw       .18
    movwf       Reg_1,1
    movlw       .3
    movwf       Reg_2
    decfsz      Reg_1,F,1
    bra         $-2
    decfsz      Reg_2
    bra         $-6
    nop
     return
                      
tempo15ms  ; pour 8mhz
; Délai 1 200 Cycles de la machine
; Durée du délai 600 microsecond
; Fréquence de l'
oscillateur 8 MHZ
    movlw       .141
    movwf       Reg_1
,1
    movlw       .2
    movwf       Reg_2
    decfsz      Reg_1
,F,1
    bra         
$-2
    decfsz      Reg_2
    bra         
$-6
    nop
    nop
    return
            
tempo50µs
; Délai 100 Cycles de la machine
; Durée du délai 50 microsecond
; Fréquence de l'oscillateur 8 MHZ
    movlw       .33
    movwf       Reg_1,1
    decfsz      Reg_1,F,1
    bra         $-2
    return
            

;                COMMANDES LCD
; 0x38 mode 2 lignes et matrice 5x7
; 0x01 clear LCD
; 0x02 curseur home
; 0x05 déplacer le curseur vers la droite, déplacer l'
affichage (gauche
; 0x06 déplacer le curseur vers la droite, affichage fixe
; 0x07 déplacer le curseur vers la droite, déplacer l'affichage vers la gauche
; 0x0c affichage activé, curseur désactivé
; 0x0e affichage activé, curseur activé, curseur fixe
; 0x0f affichage activé, curseur activé, curseur clignotant
; 0x10 déplacer le curseur vers la gauche
; 0x14 déplacer le curseur vers la droite
; 0x18 déplacer l'
affichage vers la gauche
; 0x1c déplacer l'affichage vers la droite
; 0x80 forcer le curseur en début de 1ere ligne
; 0x83 aller a la premiere ligne position 3, etc.
; 0x3c activer la deuxième ligne
; 0xc0 forcer le curseur en début de 2eme ligne
; 0xc1 aller à la 2eme ligne position 1
; 0xC2 aller a la 2eme ligne position 2, etc.
; 0x08 affichage off, curseur off
; 0x0c affichage ON, curseur OFF
; 0x80 début de la ligne 1
; 0xC0 début de la ligne 2
; 0x94 début de la ligne 3
; 0xd4 début de la ligne 4
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:

[Realisation] Gestion à distance d'un rotor d'antenne Radio
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#23 Message par Jérémy » dim. 11 avr. 2021 21:16

:bravo:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

[Realisation] Gestion à distance d'un rotor d'antenne Radio
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 953
Âge : 38
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#24 Message par venom » dim. 11 avr. 2021 21:47

Bonjour F6FC0 et bonjour à tous.

Sympa avec une vidéo en plus 8-) Le résultat est top. Tu as de la place dans la boîte je trouve ça cool 8-) car aujourd'hui le moindre millimètres est rempli et pas simple d'intervenir :?

Bon courage pour la suite.
Pour ceux qui est des codes ASM, je laisse soins à d'autres de t'envoyer des éloges. C'est pas mon domaine. exit





@++
Mon site web
Mon discord : venom#4888

[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 :

#25 Message par F6FCO » mar. 13 avr. 2021 13:17

Hello,
Oui, c'est magique ces microcontrôleur, faire beaucoup avec peu de composants, j'imagine s'il avait fallu faire çà avec de l'électronique conventionnelle :sifflotte:, même en logique TTL ou CMOS çà aurait demandé un circuit plus conséquent.

Je vais maintenant continuer le projet en installant le rotor dans le grenier, construire l'antenne boucle réception et faire les essais. Même si çà ne relève plus du PIC je viendrai vous poster le résultat, histoire de finaliser le projet.
Pourvu que Murphy ne traîne pas dans le coin :roll: :wink:
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

[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 :

#26 Message par F6FCO » mer. 14 avr. 2021 22:26

Hello tous,
Quelques nouvelles du front, le système à été installé dans le grenier au bout de 10m de câble 8 conducteurs ou transitent les signaux de commandes issus du PIC. Je craignais des chutes de niveau dues à la longueur mais tout fonctionne bien.

lp2_1.JPG


lp2_0.JPG


Et le boitier de commande à trouvé sa place définitive dans la station:

lp2_3.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:

[Realisation] Gestion à distance d'un rotor d'antenne Radio
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#27 Message par Gérard » jeu. 15 avr. 2021 16:34

:bravo: du beau travail.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

[Realisation] Gestion à distance d'un rotor d'antenne Radio
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 953
Âge : 38
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#28 Message par venom » jeu. 15 avr. 2021 19:38

Gérard a écrit ::bravo: du beau travail.


Tout a fait. Et en plus pas de perte. 8-) Que demande le peuple...
Des sous






@++
Mon site web
Mon discord : venom#4888

[Realisation] Gestion à distance d'un rotor d'antenne Radio
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#29 Message par Temps-x » ven. 16 avr. 2021 02:14

Bonsoir Gérard, venom, F6FCO, et tout le forum,

venom a écrit :Source du message Gérard a écrit :
:bravo: du beau travail.



Tout a fait. Et en plus pas de perte. 8-) Que demande le peuple...
Des sous


Idem sur ce qui à était dit, :bravo:

Merci ! pour le retour de cette réalisation.

Apparemment tu reçois déjà les messages des martiens, vu que .é..... ta répondu.. dehors!!

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

[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 :

#30 Message par F6FCO » ven. 16 avr. 2021 09:59

Ne me dis pas que... ??? :eek: :shock:

g1wq.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:


Retourner vers « Langage ASM »

Qui est en ligne

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