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

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#71 Message par F6FCO » jeu. 13 juin 2024 20:34

Si tu as un lien pour la table chauffante ?

C'est du double-face, çà n'aurait pas pu marcher à cause des soudures. Je vais tenter le coup du fil.
Une porte nand prend 2 bits en entrée... :eek:

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#72 Message par F6FCO » jeu. 13 juin 2024 22:11

C'est bien çà, j'ai coupé les pistes pour isoler les TCS, çà fonctionne super bien et j'ai un signal propre. En // ils se contrariaient, j'ai du mal comprendre le datasheet et leur histoire de haute-impédance. Ce datasheet est très (trop) succinct.
Je vais refaire un PCB nouvelle version.
L'aventure continue. Je suis heureux d'être content :-D

P1060930.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... :eek:

RUB1K
gwion
Expert
Expert
Messages : 1122
Enregistré en : février 2022

#73 Message par gwion » jeu. 13 juin 2024 22:23

On en a parlé longuement sur ce fil : viewtopic.php?style=1&f=37&t=1326&hilit=table
Si tu te lances dans le bricolage : surtout pas de thermocouple chemisé chinois. Trop d'inertie thermique, ce qui rend la régulation plus qu'hasardeuse. Avec un TC nu bien en contact avec la table c'est parfait (en fait je l'ai tout de même isolé avec un pad silicone pour TO220 plié en 2, et une épingle en corde à piano vient le plaquer contre l'alu).

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#74 Message par F6FCO » mer. 19 juin 2024 16:25

Hello le monde,
Après l'épisode CNC je n'ai pas lâché l'affaire, la partie hardware et son soft avance bien. Il faut attendre de recevoir les TCS3200 pour finaliser l'analyse des couleurs, rajouter un servo qui placera/déplacera un cache noir sur les carrés à analyser.

La partie manipulation du cube est opérationnelle, le dialogue maître (18F4525) vers esclave (18F2525) fonctionne très bien avec mon protocole simplifié.
Le maître s'occupera de faire tourner les moteurs par 1/4 de tour, l'analyse du cube mélangé et la résolution finale.
L'esclave s'occupe de la gestion des servomoteurs et plus tard du LCD.

En attendant je vais pouvoir réfléchir aux pinces de préhension, un gros morceau sur lequel j'avais déjà calé sur mes précédents essais.

Voici le protocole entre les deux pic, il occupe 5 pins du portB sur chaque PIC mais pas important, il en restera plein de non utilisées sur les deux. Servo4 servira à la lecture des couleurs, placer un cache pour éviter les réfections des couleurs adjacentes qui déformeraient les valeurs analysées, le TCS3200 analyse large.
D'autres ordres seront rajoutés plus tard pour la gestion des messages du LCD. Pour les jets d'eau je n'ai pas eu l'autorisation de ma femme.

protocole.jpg


Le bazar à l'arrière du châssis

P1060946.JPG


Et le machin en démo

https://www.youtube.com/watch?v=iPv90sAjFI0

Le code coté maître

Code : Tout sélectionner

;**********************************************************************
;
                                                                    
;                      Résolution du Rubik-cube
;                            F6FCO - juin 2024                                                                   
;                                                                     
;**********************************************************************

        Errorlevel-302             ; Supprime le message "Ensure that bank bits are correct" 
        list            p
=18f4525    ; processeur utilisé 
        
#include        <p18f4525.inc>    ; Définitions des constantes PIC
    
 CONFIG OSC 
= INTIO67                   ; Oscillateur interne 8MHz 
 
;CONFIG OSC = XT                         ; Oscillateur xtal externe 
 CONFIG IESO 
= OFF                         ; Délai au démarrage (ON/OFF)
 CONFIG BOREN = OFF                        ; Reset si chute de tension (ON/OFF)
 CONFIG PWRT = ON                          ; Délai au démarrage (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)



; ---------------------- moteurs pas à pas
#define pap1clk        PORTD,1        
#define pap1cw        PORTD,2
#define pap2clk        PORTD,3
#define pap2cw        PORTD,4
#define pap3clk        PORTD,5
#define pap3cw        PORTD,6

; ---------------------- TCS3200
#define    TCS1s2        PORTA,0
#define TCS1s3        PORTA,1
#define TCS1out        PORTA,2
#define TCS1oe        PORTA,3

#define TCS2s2        PORTA,4
#define TCS2s3        PORTA,5
#define TCS2out        PORTE,0
#define TCS2oe        PORTE,1

#define TCS3s2        PORTE,2
#define TCS3s3        PORTC,0
#define TCS3out        PORTC,1
#define TCS3oe        PORTC,2
     
; ---------------------- poussoir
#define pous1        PORTD,0


    CBLOCK 0x00C               
    w_temp         :1        ; Sauvegarde du registre W
    status_temp     :1        ; Sauvegarde du registre STATUS
    Reg_1        :1
    Reg_2        :1
    Reg_3        :1
    conchita    :2        ; variable bonne à tout faire
    cycle        :1        ; sert aux servos
    rouge        :2
    vert        :2
    bleu        :2
    ptr        :1
    Nami_ptr    :2        ; pointeur de ticks moteur Namiki
    ENDC                                      

    org    0x000             ; Adresse de départ après reset
      bra        init            ; Adresse 0: initialiser

; ------------------------  Routines Interruptions                            
    ;sauvegarder registres    
    org     0x008            ; adresse d'
interruption
    movwf   w_temp          
; sauver registre W
    swapf    STATUS
,w        ; swap status avec résultat dans w
    movwf    status_temp        
; sauver status swappé

    
; Interrupt TIMER0
    btfsc    INTCON
,TMR0IE        ; bit5. interrupt timer0 autorisée ?
    btfss    INTCON,TMR0IF        ; bit2. si oui, tester si interrupt timer en cours
    bra     restorereg
    call    inttimer0        
; vers routine interrupt timer0
    bcf    INTCON
,TMR0IF        ; effacer flag interrupt timer0
    
    
;restaurer registres
restorereg
    swapf    status_temp
,w        ; swap ancien status, résultat dans w
    movwf   STATUS            
; restaurer status
    swapf   w_temp
,f        ; Inversion L et H de l'ancien W, sans modifier Z
    swapf   w_temp,w          ; Réinversion de L et H dans W, W restauré sans modifier status
    retfie              ; return from interrupt

    ;  Routine d'
interruption TIMER 0                            
inttimer0    return
    
    
; ------------------------ Init

init
    clrf    EEADR            
; diminue la consommation
    
; init oscillateur
    movlw    0xff
    movwf    OSCCON
    
; init Timer0
    movlw    h
'A8'            ; compteur 16bits sur pin TOCKI sans prescaler
    movwf    T0CON        
    
    
; init TMR0
    clrf    TMR0L
    clrf    TMR0
    
    clrf    PORTA            
    clrf    PORTB    
    clrf    PORTC
    clrf    PORTD
    clrf    PORTE        
            
        
; inti ports
        movlw     0Fh
          movwf     ADCON1                
; mode digital

    movlw    b
'00000100'
    movwf    TRISA
    
    movlw    b
'00000000'
    movwf    TRISB
    
    movlw    b
'00000010'
    movwf    TRISC
    
    movlw    b
'0000001'
    movwf    TRISD
    
    movlw    b
'00000001'
    movwf    TRISE
    

    movlw    b
'10100000'        ; masque interruption
    movwf    INTCON            
; charger interrupt control
    
    clrf    rouge
    clrf    rouge
+1
    clrf    vert
    clrf    vert
+1
    clrf    bleu
    clrf    bleu
+1

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


Code : Tout sélectionner

#include<Rub1k_Init.asm>

; -----------------------------------
main


Démo    movlw    0x0A        
; les 3 servos en arrière
    movwf    PORTB
    
    call    tempo0.5s
    nop
    
s1    movlw    0x01        
; servo1 avant
    movwf    PORTB
    call    tempo0.5s
    nop
    call    Pap1_QuartDeTourAvant
    call    tempo0.5s
    call    Pap1_QuartDeTourArrière
    nop
    movlw    0x02        
; servo1 arrière
    movwf    PORTB
    call    tempo0.5s
    nop
    
s2    movlw    0x03        
; servo2 avant
    movwf    PORTB
    call    tempo0.5s
    nop
    call    Pap2_QuartDeTourAvant
    call    tempo0.5s
    call    Pap2_QuartDeTourArrière
    nop
    movlw    0x04        
; servo2 arrière
    movwf    PORTB
    call    tempo0.5s
    nop
    
s3    movlw    0x05        
; servo3 avant
    movwf    PORTB
    call    tempo0.5s
    nop
    call    Pap3_QuartDeTourAvant
    call    tempo0.5s
    call    Pap3_QuartDeTourArrière
    nop
    movlw    0x06        
; servo3 arrière
    movwf    PORTB
    call    tempo0.5s
    nop
    
s23    movlw    0x07        
; servos 2 et 3 avant
    movwf    PORTB
    call    tempo0.5s
    nop
    call    Pap2_QuartDeTourAvant
    call    Pap3_QuartDeTourAvant
    call    tempo0.5s
    call    Pap2_QuartDeTourArrière
    call    Pap3_QuartDeTourArrière
    nop
    movlw    0x08        
; servos 2 et 3 arrière
    movwf    PORTB
    call    tempo0.5s
    nop

s123    movlw    0x09        
; servos 1,2 et 3 avant
    movwf    PORTB
    call    tempo0.5s
    nop
    call    Pap1_QuartDeTourAvant
    call    Pap2_QuartDeTourAvant
    call    Pap3_QuartDeTourAvant
    call    tempo0.5s
    call    Pap1_QuartDeTourArrière
    call    Pap2_QuartDeTourArrière
    call    Pap3_QuartDeTourArrière
    nop
    movlw    0x0A        
; servos 1,2 et 3 arrière
    movwf    PORTB
    call    tempo0.5s
    nop            
tournelibre
    movlw    d
'24'
    movwf    conchita
tl1    call    Pap1_QuartDeTourAvant
    decfsz    conchita
    bra    tl1        
    bra     main            







#include <Rub1k_routines.asm>    
#include <Rub1k_tempos.asm>
    END                



Code : Tout sélectionner

Pap1_QuartDeTourAvant
    bsf    pap1cw
    movlw    d
'200'
    movwf    ptr
pp1av    bsf    pap1clk
    call    tempoPap
    bcf    pap1clk
    call    tempoPap
    decfsz    ptr
    bra    pp1av    
    return
    
Pap1_QuartDeTourArrière
    bcf    pap1cw
    movlw    d
'200'
    movwf    ptr
pp1ar    bsf    pap1clk
    call    tempoPap
    bcf    pap1clk
    call    tempoPap
    decfsz    ptr
    bra    pp1ar    
    return

Pap2_QuartDeTourAvant
    bsf    pap2cw
    movlw    d
'200'
    movwf    ptr
pp2av    bsf    pap2clk
    call    tempoPap
    bcf    pap2clk
    call    tempoPap
    decfsz    ptr
    bra    pp2av    
    return
    
Pap2_QuartDeTourArrière
    bcf    pap2cw
    movlw    d
'200'
    movwf    ptr
pp2ar    bsf    pap2clk
    call    tempoPap
    bcf    pap2clk
    call    tempoPap
    decfsz    ptr
    bra    pp2ar    
    return

Pap3_QuartDeTourAvant
    bsf    pap3cw
    movlw    d
'200'
    movwf    ptr
pp3av    bsf    pap3clk
    call    tempoPap
    bcf    pap3clk
    call    tempoPap
    decfsz    ptr
    bra    pp3av    
    return
    
Pap3_QuartDeTourArrière
    bcf    pap3cw
    movlw    d
'200'
    movwf    ptr
pp3ar    bsf    pap3clk
    call    tempoPap
    bcf    pap3clk
    call    tempoPap
    decfsz    ptr
    bra    pp3ar    
    return

Code : Tout sélectionner

tempoPap
; Délai 400 Cycles de la machine
; Durée du délai 200 microsecond
; Fréquence de l'oscillateur 8 MHZ
            movlw       .133
            movwf       Reg_1,1
            decfsz      Reg_1,F,1
            bra         $-2
            return
tempo1s
; Délai 2 000 000 Cycles de la machine
; Durée du délai 1 seconde
; Fréquence de l'
oscillateur 8 MHZ

            movlw       .93
            movwf       Reg_1
,1
            movlw       .38
            movwf       Reg_2
            movlw       .11
            movwf       Reg_3
            decfsz      Reg_1
,F,1
            bra         
$-2
            decfsz      Reg_2
            bra         
$-6
            decfsz      Reg_3
            bra         
$-.10
            nop
            nop
            return
tempo0.5s
; Délai 1 000 000 Cycles de la machine
; Durée du délai 0.5 seconde
; Fréquence de l'oscillateur 8 MHZ
            movlw       .173
            movwf       Reg_1,1
            movlw       .19
            movwf       Reg_2
            movlw       .6
            movwf       Reg_3
            decfsz      Reg_1,F,1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            decfsz      Reg_3
            bra         $-.10
            nop
            nop
            return
tempo0.3s
; Délai 600 000 Cycles de la machine
; Durée du délai 0.3 seconde
; Fréquence de l'
oscillateur 8 MHZ
            movlw       .51
            movwf       Reg_1
,1
            movlw       .12
            movwf       Reg_2
            movlw       .4
            movwf       Reg_3
            decfsz      Reg_1
,F,1
            bra         
$-2
            decfsz      Reg_2
            bra         
$-6
            decfsz      Reg_3
            bra         
$-.10
            nop
            nop
            return


Le code coté esclave:

Code : Tout sélectionner

;******************************************************************************
;
               F6FCO - juin 2024                                            
;                 Rub1k esclave
;                Horloge interne 8MHz
;                                                       
; NOTE: - Ce code à été mis au point avec un servomoteur MG996R Tower Pro et n'a pas 
;    été testé avec d'
autres servomoteurs.    
;    Il est possible que les valeurs duty-cycle ne soient pas adaptées pour 
;    un autre type, dans ce cas il faudra recalculer les tempos.
;
    - Pour un positionnement correct j'ai du adapter les valeurs de tempo
;    par rapport à celles données par le datasheet.
;     - Le PWM est calculé pour une horloge de 8Mhz. Pour une autre fréquence 
;    d'
horloge il faudra recalculer les tempos.
;
    - Pour des valeurs d'angles intermédiaires, recalculer les tempos.
;        
;******************************************************************************

        Errorlevel-302             ; Supprime le message "Ensure that bank bits are correct" 
        list            p=18f2525    ; processeur utilisé 
        #include        <p18f2525.inc>    ; Définitions des constantes PIC
    
 CONFIG OSC = INTIO67                   ; Oscillateur interne 8MHz 
 ;CONFIG OSC = XT                         ; Oscillateur xtal externe 
 CONFIG IESO = OFF                         ; Délai au démarrage (ON/OFF)
 CONFIG BOREN = OFF                        ; Reset si chute de tension (ON/OFF)
 CONFIG PWRT = ON                          ; Délai au démarrage (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)


#define servo1        LATA,1
#define servo2        LATA,2        ; servos 1, 2 et 3
#define servo3         LATA,3
#define cycle        d'20'        ; décompte durée d'envoi des impulsions 20ms sur les servos 
     

    CBLOCK 0x00C               
    w_temp         
:1        ; Sauvegarde du registre W
    status_temp     
:1        ; Sauvegarde du registre STATUS
    Reg_1        
:1
    Reg_2        
:1
    Reg_3        
:1
    conchita_slave    
:2        ; variable bonne à tout faire
    mot_binaire    
:1        ; mot binaire reçu du maître
    ptr        
:1
    ENDC                                      

    org    0x000             
; Adresse de départ après reset
      bra        init            
; Adresse 0: initialiser

; ------------------------  Routines Interruptions                            
    
;sauvegarder registres    
    org     0x008            
; adresse d'interruption
    movwf   w_temp          ; sauver registre W
    swapf    STATUS,w        ; swap status avec résultat dans w
    movwf    status_temp        ; sauver status swappé

    ; Interrupt TIMER0
    btfsc    INTCON,TMR0IE        ; bit5. interrupt timer0 autorisée ?
    btfss    INTCON,TMR0IF        ; bit2. si oui, tester si interrupt timer en cours
    bra     restorereg
    call    inttimer0        ; vers routine interrupt timer0
    bcf    INTCON,TMR0IF        ; effacer flag interrupt timer0
    
    ;restaurer registres
restorereg
    swapf    status_temp,w        ; swap ancien status, résultat dans w
    movwf   STATUS            ; restaurer status
    swapf   w_temp,f        ; Inversion L et H de l'
ancien W, sans modifier Z
    swapf   w_temp
,w          ; Réinversion de L et H dans W, W restauré sans modifier status
    retfie              
; return from interrupt

    
;  Routine d'interruption TIMER 0                            
inttimer0    return
    
    
; ------------------------ Init

init
    clrf    PORTA
    clrf    PORTB
    clrf    PORTC
    
    clrf    EEADR            ; diminue la consommation
    ; init oscillateur
    movlw    0xff
    movwf    OSCCON
    ; init Timer0
    movlw    h'
A8'            ; compteur 16bits sur pin TOCKI sans prescaler
    movwf    T0CON        
    
    ; init TMR0
    clrf    TMR0L
    clrf    TMR0
            
        ; inti ports
        movlw     0Fh
          movwf     ADCON1                ; mode digital

    movlw    b'
00000000'
    movwf    TRISA
    
    movlw    b'
00011111'
    ;movlw    b'
00000000'
    movwf    TRISB
    
    movlw    b'
00000000'
    movwf    TRISC
    
    
    clrf    PORTA            
    clrf    PORTB    
    clrf    PORTC

    movlw    b'
10100000'        ; masque interruption
    movwf    INTCON            ; charger interrupt control
    
    ;bsf    PORTB,0
    ;bcf    PORTB,1
    ;bsf    PORTB,2
    ;bcf    PORTB,3
    ;bcf    PORTB,4
    
    

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


Code : Tout sélectionner

    
#include <Rub1k_esclave_init.asm>


    
main    

    
; lecture du mot_binaire reçu du maître    
    nop
     
    call    Lecture_mot_binaire_sur_PORTB
    
;
    movff    mot_binaire,conchita_slave
    movlw    0x01
    subwf    conchita_slave
,f
    bz    s1av
    
    movff    mot_binaire
,conchita_slave
    movlw    0x02
    subwf    conchita_slave
,f
    bz    s1ar
    
    movff    mot_binaire
,conchita_slave
    movlw    0x03
    subwf    conchita_slave
,f
    bz    s2av
    
    movff    mot_binaire
,conchita_slave
    movlw    0x04
    subwf    conchita_slave
,f
    bz    s2ar

    movff    mot_binaire
,conchita_slave
    movlw    0x05
    subwf    conchita_slave
,f
    bz    s3av
    
    movff    mot_binaire
,conchita_slave
    movlw    0x06
    subwf    conchita_slave
,f
    bz    s3ar
    
    movff    mot_binaire
,conchita_slave
    movlw    0x07
    subwf    conchita_slave
,f
    bz    s23av
    
    movff    mot_binaire
,conchita_slave
    movlw    0x08
    subwf    conchita_slave
,f
    bz    s23ar
    
    movff    mot_binaire
,conchita_slave
    movlw    0x09
    subwf    conchita_slave
,f
    bz    s123av
    
    movff    mot_binaire
,conchita_slave
    movlw    0x0A
    subwf    conchita_slave
,f
    bz    s123ar
    bra    main
        
s1av    call    servo1_AV
    bra    main
s1ar    call    servo1_AR
    bra    main
s2av    call    servo2_AV
    bra    main
s2ar    call    servo2_AR
    bra    main
s3av    call     servo3_AV
    bra    main
s3ar    call    servo3_AR
    bra    main
s23av    call    servo23_AV
    bra    main
s23ar    call    servo23_AR
    bra    main
s123av    call    servo123_AV
    bra    main
s123ar    call    servo123_AR
    bra    main    

;Lecture_mot_binaire_sur_PORTB    
    clrf    mot_binaire
    btfsc    PORTB
,0
    bsf    mot_binaire
,0
    btfsc    PORTB
,1
    bsf    mot_binaire
,1
    btfsc    PORTB
,2
    bsf    mot_binaire
,2
    btfsc    PORTB
,3
    bsf    mot_binaire
,3
    btfsc    PORTB
,4
    bsf    mot_binaire
,4    
    return
    
Lecture_mot_binaire_sur_PORTB    
    clrf    PORTC
    clrf    mot_binaire
    
    btfsc    PORTB
,0
    bsf    mot_binaire
,0
    btfsc    PORTB
,1
    bsf    mot_binaire
,1
    btfsc    PORTB
,2
    bsf    mot_binaire
,2
    btfsc    PORTB
,3
    bsf    mot_binaire
,3
    btfsc    PORTB
,4
    bsf    mot_binaire
,4    
    movff    mot_binaire
,PORTC
    return
    
    
    
    
    
#include <Routines_servo.asm>    

    END


Code : Tout sélectionner

servo1_AV            
    movlw    cycle
    movwf    ptr
p11    bsf    servo1
    call    tempo0.6ms
    bcf    servo1
    call    tempo19.4ms
    decfsz    ptr
    goto    p11
    return
    
;
servo1_AR
    movlw    cycle
    movwf    ptr
p21    bsf    servo1
    call    tempo1.2ms
    bcf    servo1
    call    tempo18.8ms
    decfsz    ptr
    goto    p21
    return
    
;
servo2_AV            
    movlw    cycle
    movwf    ptr
p12    bsf    servo2
    call    tempo0.6ms
    bcf    servo2
    call    tempo19.4ms
    decfsz    ptr
    goto    p12
    return
    
;
servo2_AR
    movlw    cycle
    movwf    ptr
p22    bsf    servo2
    call    tempo1.2ms
    bcf    servo2
    call    tempo18.8ms
    decfsz    ptr
    goto    p22
    return
    
;
servo3_AV            
    movlw    cycle
    movwf    ptr
p13    bsf    servo3
    call    tempo0.6ms
    bcf    servo3
    call    tempo19.4ms
    decfsz    ptr
    goto    p13
    return
    
servo3_AR
    movlw    cycle
    movwf    ptr
p23    bsf    servo3
    call    tempo1.2ms
    bcf    servo3
    call    tempo18.8ms
    decfsz    ptr
    goto    p23
    return
    
;
servo23_AV
    movlw    cycle
    movwf    ptr
p23a    bsf    servo2
    bsf    servo3
    call    tempo0.6ms
    bcf    servo2
    bcf    servo3
    call    tempo19.4ms
    decfsz    ptr
    goto    p23a
    return
    
;    
servo23_AR
    movlw    cycle
    movwf    ptr
p23r    bsf    servo2
    bsf    servo3
    call    tempo1.2ms
    bcf    servo2
    bcf    servo3
    call    tempo18.8ms
    decfsz    ptr
    goto    p23r
    return
    
;
servo123_AV
    movlw    cycle
    movwf    ptr
p123a    bsf    servo1
    bsf    servo2
    bsf    servo3
    call    tempo0.6ms
    bcf    servo1
    bcf    servo2
    bcf    servo3
    call    tempo19.4ms
    decfsz    ptr
    goto    p123a
    return
    
;
servo123_AR
    movlw    cycle
    movwf    ptr
p123r    bsf    servo1
    bsf    servo2
    bsf    servo3
    call    tempo1.2ms
    bcf    servo1
    bcf    servo2
    bcf    servo3
    call    tempo18.8ms
    decfsz    ptr
    goto    p123r
    return

; ------------------------------ tempos    
    
tempo0.6ms
; Délai 1 200 Cycles de la machine
; Durée du délai 0.6 millisecond
; 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            
tempo19.4ms
; Délai 38 800 Cycles de la machine
; Durée du délai 19.4 millisecond
; Fréquence de l'
oscillateur 8 MHZ
            movlw       .98
            movwf       Reg_1
,1
            movlw       .51
            movwf       Reg_2
            decfsz      Reg_1
,F,1
            bra         
$-2
            decfsz      Reg_2
            bra         
$-6
            nop
            return  
tempo1.2ms
; Délai 2 400 Cycles de la machine
; Durée du délai 1.2 millisecond
; Fréquence de l'oscillateur 8 MHZ

            movlw       .28
            movwf       Reg_1,1
            movlw       .4
            movwf       Reg_2
            decfsz      Reg_1,F,1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            nop
            return
tempo18.8ms
; Délai 37 600 Cycles de la machine
; Durée du délai 18.8 millisecond
; Fréquence de l'
oscillateur 8 MHZ
            movlw       .211
            movwf       Reg_1
,1
            movlw       .49
            movwf       Reg_2
            decfsz      Reg_1
,F,1
            bra         
$-2
            decfsz      Reg_2
            bra         
$-6
            nop
            nop
            return         
tempo1s
; Délai 2 000 000 Cycles de la machine
; Durée du délai 1 seconde
; Fréquence de l'oscillateur 8 MHZ
            movlw       .93
            movwf       Reg_1,1
            movlw       .38
            movwf       Reg_2
            movlw       .11
            movwf       Reg_3
            decfsz      Reg_1,F,1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            decfsz      Reg_3
            bra         $-.10
            nop
            nop
            return
        

        

Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... :eek:

RUB1K
venom
Avatar de l’utilisateur
Expert
Expert
Messages : 1619
Âge : 40
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#75 Message par venom » mer. 19 juin 2024 16:58

Bonjour.

Rooo je suis jaloux tu avance super bien. Bravo a toi. :bravo:

J'ai bien fait de lancer le sujet on dirait bien :roll:

Vivement la suite.

PS: le facteur viens tout juste de déposé le dernier élément pour moi (le moteur PAP) 8-)

Reste a fouiller pour retrouver un pic et le matos pour faire les premiers tests :langue:

IMG_20240619_170715.jpg


J'ai néanmoins commencé a modéliser la pièce qui ira du moteur au cube. J'ai sacrifier un cobaye de ma collection :sifflotte:






@++
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Mon site web
Mon discord : venom#4888

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#76 Message par F6FCO » mer. 19 juin 2024 18:36

Montre le cobaye !

J'ai posté le code du Rub1k justement pour que tu aies les routines pour faire tourner les pap, facile à transposer en C. Commence avec çà pour te faire la main ensuite tu pourras faires les tiennes, n'hésite pas pour les questions.
Une porte nand prend 2 bits en entrée... :eek:

RUB1K
venom
Avatar de l’utilisateur
Expert
Expert
Messages : 1619
Âge : 40
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#77 Message par venom » mer. 19 juin 2024 18:42

Oui mais c'est de l'ASM... :shock: néanmoins pour les tests tu as raison ça peut être utile et voire comment fonctionne le monde le la mécanique :roll:

Voilà le cobaye.
IMG_20240619_183743.jpg


Pour le moment je me suis concentrée sur la partie qui rentre dans le cube. Je pense allongé la pièce blanche pour arriver jusqu'à l'arbre de rotation du moteur. En plus j'ai remarqué qu'il y a une partie plate sur l'arbre 8-)

Après je fais peut être fausse route.

D'ailleurs le moteur est arrivé avec une prise au bout des 4 fils. Je dois la supprimer pour relier au driver ? Car sur le driver c'est des connecteurs a visser.







@++
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Mon site web
Mon discord : venom#4888

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#78 Message par F6FCO » mer. 19 juin 2024 19:21

venom a écrit :Oui mais c'est de l'ASM... :shock:

Pas compliqué à transposer en C ou en basic, on en parle quand ce sera le moment.

venom a écrit :Voilà le cobaye.

Assassin de cobayes :-)

Mais tu veux faire quoi exactement ? 6 moteurs fixes sur le cube ou bien tu vas entrer et sortir du centre ? dans ce dernier cas il faudra que ton montage soit précis.

venom a écrit :D'ailleurs le moteur est arrivé avec une prise au bout des 4 fils. Je dois la supprimer pour relier au driver ? Car sur le driver c'est des connecteurs a visser

Coupe.
Une porte nand prend 2 bits en entrée... :eek:

RUB1K
venom
Avatar de l’utilisateur
Expert
Expert
Messages : 1619
Âge : 40
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#79 Message par venom » mer. 19 juin 2024 19:30

F6FCO a écrit :Mais tu veux faire quoi exactement ? 6 moteurs fixes sur le cube

C'est l'idée oui. C'est pour ça que j'ai dit "sacrifier" :lol: Si je commence a ajouter des moteur pour déplacer des moteurs :? :mur:
Plus sérieusement. Oui j'imagine que l'ossature doit être bien conçu, mais pour mettre mes mains dans le monde des moteurs, je ne pense pas commencer a ajouter des glissière etc....
F6FCO a écrit :Coupe.

:roll: Bien chef :wink:






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

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#80 Message par F6FCO » mer. 19 juin 2024 21:20

Dans le colis tu as du avoir un petit carton avec le schéma de branchement suivant les couleurs des enroulements.

mais pour mettre mes mains dans le monde des moteurs, je ne pense pas commencer a ajouter des glissière etc....

Tu as raison, il faut commencer simple mais tu verras, rien de bien compliqué.
Une porte nand prend 2 bits en entrée... :eek:


Retourner vers « Langage ASM »

Qui est en ligne

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