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 ---
- 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 ---
[TUTO] CNC gravure PCB double-face
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.
Belle vidéo en tout cas. C'est vrai que c'est alléchant
@++
[TUTO] CNC gravure PCB double-face
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
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
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:
------------------- Le code du maître
Fichier Fusibles.asm
Fichier Init.asm
Fichier Main.asm
Fichier Routines.asm
----------------------------------------- Le code des esclaves, il suffit juste de changer l'adresse dans Init.asm
Fichier Fusibles.asm
Fichier Init.asm
Fichier main.asm
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:
------------------- 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.
[TUTO] CNC gravure PCB double-face
[TUTO] CNC gravure PCB double-face
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
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.
A chaque fois c'est l'occasion qui a fait le larron.
[TUTO] CNC gravure PCB double-face
Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités
