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 ---
Tout ce qui n'a pas de catégorie !
[TUTO] CNC gravure PCB double-face
venom
Avatar de l’utilisateur
Expert
Expert
Messages : 1619
Âge : 40
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#21 Message par venom » dim. 18 août 2024 08:24

gwion a écrit :JC, à ce que je vois, le perçage se fait en plusieurs aller-retours du foret. Je suppose que c'est pour évacuer les débris ?


Je me suis fait la même réflexion. Je pensais que ça percé en 1 fois. :-D
Belle vidéo en tout cas. C'est vrai que c'est alléchant






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

[TUTO] CNC gravure PCB double-face
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#22 Message par F6FCO » dim. 18 août 2024 10:35

Oui c'est çà, c'est un des réglages possibles dans mon soft FAO. J'aurai aussi bien pu percer en une seule passe mais çà me semble un peu trop bourrin :wink:

Ce matin de bonne heure j'ai procédé aux essais de la platine. Juste un petit "Hello World" tout simple pour valider, je vais maintenant pouvoir l'utiliser sur le projet RUB1K.

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

Capture du signal I²C à l'analyseur:

Analyseur I2C.PNG


------------------- Le code du maître
Fichier Fusibles.asm

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 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)


Fichier Init.asm

Code : Tout sélectionner

;**********************************************************************
;
                                                                    
;                      I2C 4525 maître
;                      F6FCO - aout 2024                                                                   
;                                                                     
;**********************************************************************

#include <Fusibles 18F4525.asm>

#define pous1    PORTB,5


    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
    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é
    
    ;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
    
; ------------------------ 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        
            
        
; init ports
        movlw     0Fh
          movwf     ADCON1                
; mode digital

    movlw    b
'00000100'
    movwf    TRISA
    
    movlw    b
'00100000'
    movwf    TRISB
    
    movlw    b
'00011111'
    movwf    TRISC
    
    movlw    b
'0000001'
    movwf    TRISD
    
    movlw    b
'00000001'
    movwf    TRISE
    

    movlw    b
'10100000'        ; masque interruption
    movwf    INTCON            
; charger interrupt control
    
    
    
; ---------------------- config I2C ---------------------------
    
Init_I2C    
    bsf    TRISC
,3            ; pin SCL
    bsf    TRISC
,4            ; pin SDA
    bsf     SSPSTAT 
, SMP         ; <7> SMP = 1 : fréquence de l'horloge du bus I2C = 100 kHz
    bcf     SSPSTAT , CKE         ; <6> CKE = 0 : Disable SMBus specific inputs
    
    movlw     d'
19'        
    movwf     SSPADD         ;(8000000/'
4*100000))-1    =19    
    movlw     B
'00101000'    ; MSSP configuré dans le mode I2C maître
    movwf     SSPCON1
    
; bit 5 (SSPEN) = 1 : activation MSSP
    
; bit 3 (SSPM3) = 1
    
; bit 2 (SSPM2) = 0
    
; bit 1 (SSPM1) = 0
    
; bit 0 (SSPM0) = 0
    
; (SSPM3 : SSPM0) = (1000) : MSSP configuré dans le mode I2C maître
    clrf    SSPCON2
    
    

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




Fichier Main.asm

Code : Tout sélectionner

    #include    <I2C_4525_maître_Init.asm>


main    


    
;bra ecritureDS1307
    
;bra lectureDS1307

envoiVersEsclaves

    
; -------------------------------- vers esclave 2525
    call    I2C_start
    nop
    
; écriture adresse slave
    movlw    b
'00110000'        ; adresse 18F2525 esclave + bit 0 (write)    
    call    I2C_write
    call    I2C_ACK_slave_to_master    
; on attends ack
    
;
    ; écriture data dans slave
    movlw     b
'00000001'         
    call I2C_write
    call I2C_ACK_slave_to_master    
; on attends ack    
    call I2C_stop            
; on termine l'envoi
    
    call    tempo10ms
    ; -------------------------------- vers esclave 4550
    call    I2C_start
    nop
    ; écriture adresse slave
    movlw    b'
01110000'        ; adresse 18F2525 esclave + bit 0 (write)    
    call    I2C_write
    call    I2C_ACK_slave_to_master    ; on attends ack
    ;
    ; écriture data dans slave
    movlw     b'
00000001'         
    call I2C_write
    call I2C_ACK_slave_to_master    ; on attends ack    
    call I2C_stop            ; on termine l'
envoi
    
    
    
    
    call    tempo200ms
    
    
    
    
    
; -------------------------------- vers esclave 2525
    call    I2C_start
    
; écriture adresse slave
    movlw    b
'00110000'        ; adresse 18F2525 esclave + bit 0 (write)
    call    I2C_write
    call    I2C_ACK_slave_to_master    
; on attends ack
    
;
    ; écriture data dans slave
    movlw B
'00000010'         ; envoi de l'octet 
    call I2C_write
    call I2C_ACK_slave_to_master    ; on attends ack    
    call I2C_stop            ; on termine l'
envoi
    
    call    tempo10ms
    
; -------------------------------- vers esclave 4550
    call    I2C_start
    
; écriture adresse slave
    movlw    b
'01110000'        ; adresse 18F2525 esclave + bit 0 (write)
    call    I2C_write
    call    I2C_ACK_slave_to_master    
; on attends ack
    
;
    ; écriture data dans slave
    movlw B
'00000010'         ; envoi de l'octet 
    call I2C_write
    call I2C_ACK_slave_to_master    ; on attends ack    
    call I2C_stop            ; on termine l'
envoi
    




    
    call    tempo200ms
    
      
    bra    main
    
    
    
    

tempo10ms
; 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
            movlw       .26
            movwf       Reg_2
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            nop
            return
            
tempo200ms
; Délai 400 000 Cycles de la machine
; Durée du délai 200 millisecond
; Fréquence de l'
oscillateur 8 MHZ

            movlw       .119
            movwf       Reg_1
,1
            movlw       .8
            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
            


    
#include    <I2C_4525_maître_routines.asm>

    END                          



Fichier Routines.asm

Code : Tout sélectionner


    


I2C_start 
; 
    nop
    call I2C_idle             
; on attend que le bus I2C soit libre
    bsf SSPCON2 
, SEN         ; SEN = 1 (lancement d'une opération Start)
    return

; --------------------------------- selon Fabrice Sincère
I2C_idle
I2C_idle0
    btfsc SSPCON2 , ACKEN         ; bit 4
    goto I2C_idle0             ; le bit ACKEN n'
est pas nul
    btfsc SSPCON2 
, RCEN         ; bit 3
    goto I2C_idle0             
; le bit RCEN n'est pas nul
    btfsc SSPCON2 , PEN         ; bit 2
    goto I2C_idle0             ; le bit PEN n'
est pas nul
    btfsc SSPCON2 
, RSEN        ; bit 1
    goto I2C_idle0             
; le bit RSEN n'est pas nul
    btfsc SSPCON2 , SEN         ; bit 0
    goto I2C_idle0             ; le bit SEN n'
est pas nul
    btfsc SSPSTAT 
, R_W        ; bit 2 SSPSTAT
    goto I2C_idle0             
; le bit R_W n'est pas nul
    return
    

; ---------------------------------    Ecriture d'
un octet
;Octet à écrire dans l'accumulateur (W) avant de lancer la routine I2C_write :
;movlw B'
XXXXXXXX'             ; (XXXXXXXX) sont les 8 bits à écrire, MSB en premier
;call I2C_write

I2C_write
    call I2C_idle             ; on attend que le bus I2C soit prêt
    movwf SSPBUF
    return
    
; ---------------------------------    On attends le ACK de l'
esclave
I2C_ACK_slave_to_master
    call I2C_idle             
; on attend que le bus I2C soit prêt
I2C_ACK_slave_to_master0
    btfsc SSPCON2 
, ACKSTAT
    goto I2C_ACK_slave_to_master0     
; on attend la réception du bit ACK
    return

; ---------------------------------
I2C_Repeated_Start
    call I2C_idle             
; on attend que le bus I2C soit prêt
    bsf SSPCON2 
, RSEN         ; RSEN = 1 (lancement d'une opération Repeated Start)
    return

; ---------------------------------
;call I2C_read
;movwf REGISTRE ; les 8 bits lus sont transférés dans un registre d'
usage général
I2C_read
    call I2C_idle             
; on attend que le bus I2C soit prêt
    bsf SSPCON2 
, RCEN         ; on lance la réception
I2C_read0
    btfsc SSPCON2 
, RCEN
    goto I2C_read0             
; on attend la fin de la réception
    movf SSPBUF 
, W
    return

; ---------------------------------
I2C_ACK_master_to_slave
    call I2C_idle             
; on attend que le bus I2C soit prêt
    bcf SSPCON2 
, ACKDT         ; ACKDT = 0
    bsf SSPCON2 
, ACKEN         ; ACKEN = 1 (lancement d'une opération Acknowledge)
    return

; ---------------------------------
I2C_NOACK
    call I2C_idle             ; on attend que le bus I2C soit prêt
    bsf SSPCON2 , ACKDT         ; ACKDT = 1
    bsf SSPCON2 , ACKEN         ; ACKEN = 1 (lancement d'
une opération Not Acknowledge)
    return

; ---------------------------------
I2C_stop
    call I2C_idle             
; on attend que le bus I2C soit prêt
    bsf SSPCON2 
, PEN         ; PEN = 1 (lancement d'une opération Stop)
    return




----------------------------------------- Le code des esclaves, il suffit juste de changer l'adresse dans Init.asm
Fichier Fusibles.asm

Code : Tout sélectionner



        Errorlevel
-302                 ; Supprime le message "Ensure that bank bits are correct" 
        list            p
=18f2525        ; processeur utilisé 
        
#include        <p18f2525.inc>        ; Définitions des constantes PIC
    ;#include    <LCD_18F.inc>        ; définitions des constantes LCD
    
 CONFIG OSC 
= INTIO67                         ; Oscillateur interne 8MHz 
 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)


Fichier Init.asm

Code : Tout sélectionner

;**********************************************************************
;
                                                                    
;                      I2C esclave 2525
;                      F6FCO - aout 2024           
;                                                                     
;**********************************************************************

#include <Fusibles_18F2525.asm>

    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
    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 MSSP
    btfss    PIR1,SSPIF        ; <3>
    bra    restorereg        
    call    intMSSP            ; on vient d'
avoir une int MSSP, on la traite
        
    
;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

intMSSP
    movff    SSPBUF,PORTB
    bsf    SSPCON1,CKP        ; on relâche l'
horloge
    bcf    PIR1
,SSPIF        ; <3> raz flag d'interrupt                         
    return
    
    
    
; ------------------------ Init

init
    clrf    EEADR            ; diminue la consommation
    ; init oscillateur
    movlw    0xff            ; Horloge interne 8Mhz
    movwf    OSCCON

        ; init ports
        movlw     0xff
          movwf     ADCON1                ; mode digital
          bcf    ADCON0,ADON        ; <0> CAN désactivé
          
          movlw    0x07
          movwf    CMCON            ; mode comparateur désactivé

    movlw    b'
00000000'        
    movwf    TRISB
    clrf    PORTB
    clrf    LATB
    
    movlw    b'
0000110000'        ; rc3/rc4 I2C        
    movwf    TRISB
    clrf    PORTB
    clrf    LATB

    ; init interruptions
    bsf    RCON,IPEN
    bsf    INTCON,GIE        ; <7> int non masquées activées
    bsf    INTCON,PEIE        ; <6> int périphériques non masquées activées
    bsf    PIE1,SSPIE        ; <3> MSSP activé
    bcf    PIR1,SSPIF        ; <3> flag interrupt à zéro
    bsf    SSPCON1,SSPEN        ; <5> rb0 et rb1 en mode SDA/SCL
    
        
    ; mode esclave 7 bits avec interruptions
    bsf    SSPCON1,SSPEN        ; <5>
    bsf    SSPCON1,CKP        ; <4>

    bcf    SSPCON1,SSPM0        ; <0>        
    bsf    SSPCON1,SSPM1        ; <1>
    bsf    SSPCON1,SSPM2        ; <2>
    bcf    SSPCON1,SSPM3        ; <3>

    bsf    SSPCON2,SEN        ; <0> Etirement horloge activé

    ; adresse esclave
    movlw    b'
01110000'    
    movwf    SSPADD
    
    bsf    SSPSTAT,S        ; <3> startbit
    


    
tempo100ms
; Délai 200 000 Cycles de la machine
; Durée du délai 100 millisecond
; Fréquence de l'
oscillateur 8 MHZ

            movlw       .186
            movwf       Reg_1
,1
            movlw       .4
            movwf       Reg_2
            movlw       .2
            movwf       Reg_3
            decfsz      Reg_1
,F,1
            bra         
$-2
            decfsz      Reg_2
            bra         
$-6
            decfsz      Reg_3
            bra         
$-.10
            nop


    
; vers main
; -----------------------------------
            



Fichier main.asm

Code : Tout sélectionner


    
#include    <I2C_2525_esclave_Init.asm>

main

    bra    main

    END                          

Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par F6FCO le dim. 18 août 2024 10:56, modifié 4 fois.
Une porte nand prend 2 bits en entrée... :eek:

[TUTO] CNC gravure PCB double-face
gwion
Expert
Expert
Messages : 1122
Enregistré en : février 2022

#23 Message par gwion » dim. 18 août 2024 10:43

Une question pour Maître JC : où te fournis-tu en époxy stp ?

[TUTO] CNC gravure PCB double-face
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#24 Message par F6FCO » dim. 18 août 2024 10:50

J'ai eu deux sources, la première quand j'étais au pro j'ai pu récupérer une grande plaque de double-face de 2x1m un peu oxydée (celle que j'utilise ici) mais toujours utilisable en frottant à l'Ajax, et pour la deuxième c'était un gars qui vendait pas cher des chutes d'usine sur le bon coin il y a une dizaine d'années, je me suis fait un stock.
A chaque fois c'est l'occasion qui a fait le larron.
Une porte nand prend 2 bits en entrée... :eek:

[TUTO] CNC gravure PCB double-face
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 2846
Âge : 99
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

#25 Message par F6FCO » dim. 18 août 2024 11:05

J'ai réparé mon oubli en intégrant les deux résistances pullup 4.7k dans le support 40pins.

Schéma platine I2C.JPG


Implantation platine I2C.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:


Retourner vers « Coin Fourre-tout »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 2 invités