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 ---
Modérateur : mazertoc
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
L'avantage c'est que je n'aurai pas à me lever pour la changer la nuit
Je vous ai livré le programme brut comme çà mais après reflexion çà mérite quelques explications.
Pour l'instant il n'y a que quatre procédures pour assurer le fonctionnement de base, ces quatres procédures sont toutes appelées par le tronc de programme dans le main, ce tronc de programme assurant la gestion de découpage des trains de données et la vérification de la fin du gcode.
Ces quatre procédures sont appelées entre chaque train de données pour mouvoir les axes (juste le X pour l'instant).
1/ Procédure conversion_ascii_hexa:
En premier lieu on reçoit les données sous forme ascii sur 4 octets (j'ai finalement décidé de tout faire en 32bits), sous cette forme :
ex: 1234mm = 0x31 0x32 0X33 0x34, on voit que c'est inexploitable dans l'état et il faut convertir çà en une seule valeur hexa sur deux octets pour pouvoir l'utiliser.
Pour avoir une valeur hexa il faut multiplier les termes par leur poids et les ajouter les uns aux autres, multiplications lourdes à coder en assembleur, j'ai préféré utiliser une table pré-calculée
2/ procédure soustractX:
La machine gère tous ses déplacements par rapport à son origine 0 (ici X=0). Par exemple si on s'est déjà déplacé de 30mm et qu'il faut aller à 100mm il ne faudra parcourir que 100-30=70mm, donc on soustrait new_position-old_position. Mais si on est à 100mm et qu'il faut revenir à 30mm il faudra effectuer old_position-new_position pour ne pas se retrouver avec une valeur négative. Il faut donc choisir dans quel sens on va faire la soustraction. Cette procédure gère aussi le sens de rotation des moteurs pas à pas.
3/ procédure génération_pulses:
Les moteurs pas à pas fonctionneront en 1/4pas, c'est des moteurs qui font 200pas par tour en 1pas entier, donc il feront 800pas en 1/4pas. Il faut donc multiplier la valeur hexa à parcourir par 800 et appeler à chaque pas la sous-procédure de base de génération d'un pas (une alternance haute et une alternance basse dont les tempos ont été calculées pour avoir une fréquence idéale de 4,6khz déterminée d'après moults essais).
4/ procédure sauvegarde de la valeur actuelle:
Pour pouvoir effectuer la soustraction pour connaitre la distance réelle à parcourir il faut sauvegarder la distance actuelle en _old pour pouvoir l'utiliser dans le prochain train.
Je vous ai livré le programme brut comme çà mais après reflexion çà mérite quelques explications.
Pour l'instant il n'y a que quatre procédures pour assurer le fonctionnement de base, ces quatres procédures sont toutes appelées par le tronc de programme dans le main, ce tronc de programme assurant la gestion de découpage des trains de données et la vérification de la fin du gcode.
Ces quatre procédures sont appelées entre chaque train de données pour mouvoir les axes (juste le X pour l'instant).
1/ Procédure conversion_ascii_hexa:
En premier lieu on reçoit les données sous forme ascii sur 4 octets (j'ai finalement décidé de tout faire en 32bits), sous cette forme :
ex: 1234mm = 0x31 0x32 0X33 0x34, on voit que c'est inexploitable dans l'état et il faut convertir çà en une seule valeur hexa sur deux octets pour pouvoir l'utiliser.
Pour avoir une valeur hexa il faut multiplier les termes par leur poids et les ajouter les uns aux autres, multiplications lourdes à coder en assembleur, j'ai préféré utiliser une table pré-calculée
2/ procédure soustractX:
La machine gère tous ses déplacements par rapport à son origine 0 (ici X=0). Par exemple si on s'est déjà déplacé de 30mm et qu'il faut aller à 100mm il ne faudra parcourir que 100-30=70mm, donc on soustrait new_position-old_position. Mais si on est à 100mm et qu'il faut revenir à 30mm il faudra effectuer old_position-new_position pour ne pas se retrouver avec une valeur négative. Il faut donc choisir dans quel sens on va faire la soustraction. Cette procédure gère aussi le sens de rotation des moteurs pas à pas.
3/ procédure génération_pulses:
Les moteurs pas à pas fonctionneront en 1/4pas, c'est des moteurs qui font 200pas par tour en 1pas entier, donc il feront 800pas en 1/4pas. Il faut donc multiplier la valeur hexa à parcourir par 800 et appeler à chaque pas la sous-procédure de base de génération d'un pas (une alternance haute et une alternance basse dont les tempos ont été calculées pour avoir une fréquence idéale de 4,6khz déterminée d'après moults essais).
4/ procédure sauvegarde de la valeur actuelle:
Pour pouvoir effectuer la soustraction pour connaitre la distance réelle à parcourir il faut sauvegarder la distance actuelle en _old pour pouvoir l'utiliser dans le prochain train.
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Bonsoir tout le monde,
Mes trois axes X,Y et Z sont valides virtuellement, j'ai câblé les drivers et commencé à coder la routine de JOG (déplacement manuel).
Mais voilà, je suis coincé, je bloque sur cette routine toute simple depuis le début de la soirée:
Un poussoir relié sur RA0 et un autre sur RA1, resistance de pull-up sur chaque, état 1 au repos, état 0 poussé, vérifié par mesures.
Mesures faites directement sur les pins A0 et A1, elles sont bien reliées aux poussoirs, relevés à l'état haut, quand on appuie sur l'un ou l'autre poussoir les pins A0 ou A1 passent bien à l'état bas, donc les poussoirs sont bien câblés et font bien leur boulot.
Si je fais du pas à pas à la première ligne btfss PORTA,0 au lieu de skipper je passe directement à bra Xmoins.
Bouton appuyé ou relâché ne change rien.
En désespoir de cause j'ai essayé de changer les btfss par des btfsc 'pour voir'. Bien que les niveaux changent sur les pins concernées par appui des poussoirs, cette fois je saute d'un btfss à l'autre en boucle sans fin.
Le portA est bien en input. Je pensais à un mauvais réglage des registres de config mais je pense bien avoir désactivé le mode analogique et tout passé en digital et je ne vois rien d'autre à faire à mon niveau.
Une idée ?
Mes trois axes X,Y et Z sont valides virtuellement, j'ai câblé les drivers et commencé à coder la routine de JOG (déplacement manuel).
Mais voilà, je suis coincé, je bloque sur cette routine toute simple depuis le début de la soirée:
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
;---------------------------------------------------------------------------------------------
CONFIG OSC = XT ; Oscillateur ext 4MHz
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
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 = ON ; 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)
;--------------------------------- adresse de depart après reset -----------------------------
ORG H'0'
bra init
;--------------------------------------- interruptions ---------------------------------------
ORG H'08'
interrupt btfss PIR1,RCIF ; registre plein ? si oui on saute à réception
bra int1 ; sinon on sort de l'interrupt
reception
nop
movff RCREG,POSTINC0 ; lecture de RCREG et mise en mem
incf ptr_train_RCIF ; on a reçu qq chose donc on incrémente le compteur de trains
btfss RCSTA,OERR ; test d'une erreur d'overrun
goto int1
; traitement de l'erreur d'overrun
bcf RCSTA,CREN ; on efface le bit OERR
bsf RCSTA,CREN ; on relance la réception
int1 ; traitement des autres interruptions
retfie
;----------------------------------- Initialisations -------------------------------------------------
init
bcf ADCON0,ADON ; convertisseur a/n dévalidé
movlw 0xFF
movwf ADCON1,PCFG3 ; on passe tout en digital
movlw b'11000000' ; INTCON (activation des int GIE/GIEH=1, PEIE/GIEL=1)
movwf INTCON
movlw b'10000000' ; RCON (priorités int activées IPEN=1,)
movwf RCON
movlw b'00100000' ; IPR1 (Rx en haute priorité RCIP=1)
movwf IPR1
movlw b'00100000' ; PIE1 (int RX activée RCIE=1)
movwf PIE1
movlw b'00100100' ; TXSTA (Emission USART activée TXEN=1, et mode asynchrone haute vitesse BRGH=1)
movwf TXSTA
movlw b'10010000' ; RCSTA (Utilisation du port série activée SPEN=1, Réception USART activée CREN=1)
movwf RCSTA
movlw d'25' ; 9600bauds avec sync=O, brgh=1, brg16=0, xtal=4Mhz
movwf SPBRG
bcf BAUDCON,BRG16 ; réglé à 8bits
movlw B'11111111'
movwf TRISA
movlw B'00000111'
movwf TRISB
movlw B'11001100'
movwf TRISC
movlw B'10000011'
movwf TRISD
movlw B'10000011'
movwf TRISE
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
; -------------------------------------- Programme principal --------------------------------------
main
JogX
btfss PORTA,0 ; Bouton poussoir inerte=1, appuyé=0, si ra0=1 on saute
bra xmoins
btfss PORTA,1 ; Bouton poussoir inerte=1, appuyé=0, si ra1=1 on saute
bra xplus
bra JogX
xmoins bcf drv_dirX ; on jog en arrière
;call Xpulse_base
bra JogX
xplus bsf drv_dirX ; on jog en avant
;call Xpulse_base
bra JogX
Un poussoir relié sur RA0 et un autre sur RA1, resistance de pull-up sur chaque, état 1 au repos, état 0 poussé, vérifié par mesures.
Mesures faites directement sur les pins A0 et A1, elles sont bien reliées aux poussoirs, relevés à l'état haut, quand on appuie sur l'un ou l'autre poussoir les pins A0 ou A1 passent bien à l'état bas, donc les poussoirs sont bien câblés et font bien leur boulot.
Si je fais du pas à pas à la première ligne btfss PORTA,0 au lieu de skipper je passe directement à bra Xmoins.
Bouton appuyé ou relâché ne change rien.
En désespoir de cause j'ai essayé de changer les btfss par des btfsc 'pour voir'. Bien que les niveaux changent sur les pins concernées par appui des poussoirs, cette fois je saute d'un btfss à l'autre en boucle sans fin.
Le portA est bien en input. Je pensais à un mauvais réglage des registres de config mais je pense bien avoir désactivé le mode analogique et tout passé en digital et je ne vois rien d'autre à faire à mon niveau.
Une idée ?
Soft de commande CNC en asm
Bonsoir
.... Tu viens d'inventer 2 nouveaux bits (page 224 du datasheet)
Deux choses à savoir.
Désactiver ton convertisseur et une chose, mais le configurer pour que tes pattes soit en entrée analogique en est une autre.
Dans ta config, rien n'indique que tes pattes sont en analogique, si tu vois ce que je veux dire, pour résumé.
A vérifier car il est très tard, et il faut que je me lève demain, mais je pense que sa doit fonctionner si tu rajoute ceci en début programme.
Toujours vérifier les pattes quand utilise dans le début du datasheet, pour voir si il y a pas des comparateur, ou autre chose
qui pourrais te nuire.
Bonne continuation
A+
.... Tu viens d'inventer 2 nouveaux bits (page 224 du datasheet)
Code : Tout sélectionner
movwf ADCON1,PCFG3 ; on passe tout en digital
movlw b'11000000' ; INTCON (activation des int GIE/GIEH=1, PEIE/GIEL=1)
Deux choses à savoir.
Code : Tout sélectionner
bcf ADCON0,ADON ; convertisseur a/n dévalidé
Désactiver ton convertisseur et une chose, mais le configurer pour que tes pattes soit en entrée analogique en est une autre.
Dans ta config, rien n'indique que tes pattes sont en analogique, si tu vois ce que je veux dire, pour résumé.
Code : Tout sélectionner
movlw B'00001111' ; mode entrée/sortie
movwf ADCON1
movlw B'00000111' ;
movwf CMCON ; éteindre les comparateurs
A vérifier car il est très tard, et il faut que je me lève demain, mais je pense que sa doit fonctionner si tu rajoute ceci en début programme.
Toujours vérifier les pattes quand utilise dans le début du datasheet, pour voir si il y a pas des comparateur, ou autre chose
qui pourrais te nuire.
Bonne continuation
A+
Modifié en dernier par Temps-x le jeu. 25 oct. 2018 17:40, modifié 1 fois.
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Bonjour,
Dis-donc tu veilles tard avant d'aller au boulot
J'ai fais les modifs que tu préconises mais toujours pareil, le PIC ne réagit pas aux simulis du poussoir. J'ai essayé également sur ma platine école pour dédouaner le montage de la CNC mais les symptômes sont les mêmes, c'est donc bien un pbm de config.
J'ai essayé le code montré en exemple 9.1 page 91 du datasheet mais çà n'a rien changé.
D'ailleurs un truc m'interpelle dans ce code: la ligne "movwf 07h ; configure comparators" me perturbe (dit-il du haut de sa grande expérience )
J'ai donc essayé avec un movlw mais de toutes façons çà n'a rien changé.
Dis-donc tu veilles tard avant d'aller au boulot
J'ai fais les modifs que tu préconises mais toujours pareil, le PIC ne réagit pas aux simulis du poussoir. J'ai essayé également sur ma platine école pour dédouaner le montage de la CNC mais les symptômes sont les mêmes, c'est donc bien un pbm de config.
J'ai essayé le code montré en exemple 9.1 page 91 du datasheet mais çà n'a rien changé.
D'ailleurs un truc m'interpelle dans ce code: la ligne "movwf 07h ; configure comparators" me perturbe (dit-il du haut de sa grande expérience )
J'ai donc essayé avec un movlw mais de toutes façons çà n'a rien changé.
Soft de commande CNC en asm
Bonsoir,
C'est vrai, mais je suis toujours à l'heure quand j'arrive au boulot, debout 6h30 du matin, à l'heure que je me couche,
il suffit de lire l'heure en haut du post.
Normalement par défaut le comparateur est éteint, mais par prudence c'est mieux de le refaire.
C'est surement une copie dans une adresse, pas une valeur, les variables ne sont que des adresses.
Peux tu mettre tout le code avec la déclaration des variables, je regarde demain car le vendredi je suis chez moi plutôt.
A+
F6FCO a écrit :Source du message Dis-donc tu veilles tard avant d'aller au boulot
C'est vrai, mais je suis toujours à l'heure quand j'arrive au boulot, debout 6h30 du matin, à l'heure que je me couche,
il suffit de lire l'heure en haut du post.
Normalement par défaut le comparateur est éteint, mais par prudence c'est mieux de le refaire.
F6FCO a écrit :Source du message D'ailleurs un truc m'interpelle dans ce code: la ligne "movwf 07h ; configure comparators" me perturbe
C'est surement une copie dans une adresse, pas une valeur, les variables ne sont que des adresses.
Peux tu mettre tout le code avec la déclaration des variables, je regarde demain car le vendredi je suis chez moi plutôt.
A+
Modifié en dernier par Temps-x le ven. 26 oct. 2018 13:12, modifié 2 fois.
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Une erreur de leur part je pense car l'adresse 0x07h en question est ABDOVF, le bit 7 du registre BAUDON, et remplacer movwf par un movlw ne sert à rien car le registre W est déjà chargé à 0x07 deux lignes plus haut. Bon, pas grave
En tout cas merci de te pencher sur mon cas car je suis bloqué dans le développement d'4L1C3 avec cette histoire de poussoirs inactifs.
Le code à bien été bidouillé hier pour arriver à faire marcher le truc, j'ai essayé plein de trucs, et l'anglais du datasheet ne m'aide pas trop . Voici la dernière version avec le bout de code du datasheet, poussoirs sur PORTA toujours aussi inactifs.
J'ai d'autres poussoirs sur les PORTC et PORTD qui fonctionnent parfaitement, seuls ceux sur le PORTA ne veulent rien savoir.
En tout cas merci de te pencher sur mon cas car je suis bloqué dans le développement d'4L1C3 avec cette histoire de poussoirs inactifs.
Le code à bien été bidouillé hier pour arriver à faire marcher le truc, j'ai essayé plein de trucs, et l'anglais du datasheet ne m'aide pas trop . Voici la dernière version avec le bout de code du datasheet, poussoirs sur PORTA toujours aussi inactifs.
J'ai d'autres poussoirs sur les PORTC et PORTD qui fonctionnent parfaitement, seuls ceux sur le PORTA ne veulent rien savoir.
Code : Tout sélectionner
;----------------------------------------------------------------------------------------------
; 4L1C3 - F6FC0
; 24 octobre 2018
; réception trains et stockage valeur en mem ok
; axes X, Y et Z fonctionnels en virtuel
; faire un reset du code, une déco/reco de teraterm avant de lancer chaque processus.
;----------------------------------------------------------------------------------------------
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
list p=18f4525 ; processeur utilisé
#include <p18f4525.inc> ; Définitions des constantes
;---------------------------------------------------------------------------------------------
CONFIG OSC = XT ; Oscillateur ext 4MHz
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
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 = ON ; 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 ------------------------------------------
#define btn_jog_Xmoins PORTA,0 ; 1
#define btn_jog_Xplus PORTA,1 ; 1
#define btn_jog_Ymoins PORTA,2 ; 1
#define btn_jog_Yplus PORTA,3 ; 1
#define btn_jog_Zmoins PORTA,4 ; 1
#define btn_jog_Zplus PORTA,5 ; 1
#define capteur_pomZ PORTB,0 ; 1
#define capteur_pomX PORTB,1 ; 1
#define capteur_pomY PORTB,2 ; 1
#define led_pomZ PORTB,3 ; 0
#define led_pomY PORTB,4 ; 0
#define cts PORTB,5 ; 0
#define nc0 PORTB,6 ; x
#define nc1 PORTB,7 ; x
#define led_popY PORTC,0 ; 0
#define led_popZ PORTC,1 ; 0
#define btn_run PORTC,2 ; 1
#define btn_popX PORTC,3 ; 1
#define drv_stepY PORTC,4 ; 0 pulse Y
#define drv_dirY PORTC,5 ; 0 direction Y
#define Tx PORTC,6 ; 1
#define Rx PORTC,7 ; 1
#define btn_popY PORTD,0 ; 1
#define btn_popZ PORTD,1 ; 1
#define drv_stepX PORTD,2 ; 0 pulse X
#define drv_dirX PORTD,3 ; 0 direction X
#define drv_stepZ PORTD,4 ; 0 pulse Z
#define drv_dirZ PORTD,5 ; 0 direction Z
#define led_pomX PORTD,6 ; 0
#define btn_pom PORTD,7 ; 1
#define btn_ctrl PORTE,0 ; 1
#define btn_btn_fn PORTE,1 ; 1
#define led_popX PORTE,2 ; 0
;------------------------------ déclaration des variables -------------------------------------
CBLOCK H'0'
ptr_train_RCIF
ENDC
CBLOCK H'80'
ENDC
; ---------------------------------------- macros --------------------------------------------
qrt macro ; demande au PC d'arreter l'émission
bsf cts
endm
qrv macro ; demande au PC de relancer l'émission
bcf cts
endm
;--------------------------------- adresse de depart après reset -----------------------------
ORG H'0'
bra init
;--------------------------------------- interruptions ---------------------------------------
ORG H'08'
interrupt btfss PIR1,RCIF ; registre plein ? si oui on saute à réception
bra int1 ; sinon on sort de l'interrupt
reception
nop
movff RCREG,POSTINC0 ; lecture de RCREG et mise en mem
incf ptr_train_RCIF ; on a reçu qq chose donc on incrémente le compteur de trains
btfss RCSTA,OERR ; test d'une erreur d'overrun
goto int1
; traitement de l'erreur d'overrun
bcf RCSTA,CREN ; on efface le bit OERR
bsf RCSTA,CREN ; on relance la réception
int1 ; traitement des autres interruptions
retfie
;----------------------------------- Initialisations --------------------------------------------
init
movlw b'11000000' ; INTCON (activation des int GIE/GIEH=1, PEIE/GIEL=1)
movwf INTCON
movlw b'10000000' ; RCON (priorités int activées IPEN=1,)
movwf RCON
movlw b'00100000' ; IPR1 (Rx en haute priorité RCIP=1)
movwf IPR1
movlw b'00100000' ; PIE1 (int RX activée RCIE=1)
movwf PIE1
movlw b'00100100' ; TXSTA (Emission USART activée TXEN=1, et mode asynchrone haute vitesse BRGH=1)
movwf TXSTA
movlw b'10010000' ; RCSTA (Utilisation du port série activée SPEN=1, Réception USART activée CREN=1)
movwf RCSTA
movlw d'25' ; 9600bauds avec sync=O, brgh=1, brg16=0, xtal=4Mhz
movwf SPBRG
bcf BAUDCON,BRG16 ; réglé à 8bits
movlw B'00000111'
movwf TRISB
movlw B'11001100'
movwf TRISC
movlw B'10000011'
movwf TRISD
movlw B'10000011'
movwf TRISE
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
; ----------------- initialisation du PORT A
clrf PORTA
clrf LATA
movlw 0x07
movwf ADCON1
movwf CMCON
movlw 0xff
movwf TRISA
; -----------------
; -------------------------------------- Programme principal --------------------------------------
main
; poussoirs sur Ra0 et Ra1, résistances pull-up 10kohm. Relevé=1, enfoncé=0
JogX
btfss PORTA,0 ; Bouton poussoir inerte=1, appuyé=0, si ra0=1 on saute
bra xmoins
btfss PORTA,1 ; Bouton poussoir inerte=1, appuyé=0, si ra1=1 on saute
bra xplus
bra JogX
xmoins bcf drv_dirX ; jog en arrière
;call Xpulse_base
bra JogX
xplus bsf drv_dirX ; jog en avant
;call Xpulse_base
bra JogX
END
Soft de commande CNC en asm
Bonjour F6FCO, et tout le forum,
movlw 0x07 mets moi ça en binaire 8 bits avec les zéros, et après tu regardes la page 224 du datasheet
Faire une configuration en hexadécimal je conseille pas trop, car on se retrouve avec ce genre de problème
De toute façon je fais un essai en réelle avec le même pic que toi, mais je pense que tu as la solution maintenant
Microchip fait très souvent des erreurs sur des schémas ou du code, comme certain...
Attention car l'erreur de Microchip est de taille, il y a pas que le movwf 07h
Regarde ce schéma, et trouve moi les 2 erreurs de Microchip, cherche pas la complication.
A+
movlw 0x07 mets moi ça en binaire 8 bits avec les zéros, et après tu regardes la page 224 du datasheet
Faire une configuration en hexadécimal je conseille pas trop, car on se retrouve avec ce genre de problème
De toute façon je fais un essai en réelle avec le même pic que toi, mais je pense que tu as la solution maintenant
Microchip fait très souvent des erreurs sur des schémas ou du code, comme certain...
Attention car l'erreur de Microchip est de taille, il y a pas que le movwf 07h
Regarde ce schéma, et trouve moi les 2 erreurs de Microchip, cherche pas la complication.
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Temps-x a écrit :Bonjour F6FCO, et tout le forum,
et après tu regardes la page 224 du datasheet
Non, pas sur la tête
Pfffttt !! bloquer plusieurs jours sur une erreur aussi simple que çà J'ai mis 0xF (oopps, pardon b'00001111') et maintenant çà marche au poil. En plus j'avais déjà réglé çà sur le 877, aucune excuse.
Un grand merci, tu m'as tiré une fière chandelle du pied.
Pour ton schéma je ne suis pas trop expérimenté en brushless, pas de souci de compréhension pour C0 à C5 qui amènent les signaux de commande mais je ne sais pas trop ce qui doit arriver sur C6, je dirai que si A est relié à ce circuit, B et C devraient l'être aussi.
J'ai bon dis, j'ai bon ?
Soft de commande CNC en asm
Bonsoir F6FCO, et tout le forum,
Alors ou !!
Et pourtant en psot 225 j'avais déjà fais.
Moi s'appelle cela une étourderie, mais tu es excusable, car entre ta rénovation qui j'espère avance, et ton robot ça fait
beaucoup.
Maintenant tu vas pourvoir avancé.
Non c'est pas ça pour le schéma, tu cherches beaucoup trop loin.
Ne t’inquiète pas, j'ai fait passé ce teste à des personnes comme : DAUDET78, Neptune qui étaient
ingénieur en électronique qui son à la retraite maintenant, et ils n'ont pas trouvés.
Pourtant c'est gros comme une maison, on va voir sur ce forum, si il en a qui trouve, je rappelle qu'il faut pas chercher loin.
A+
F6FCO a écrit :Source du message Non, pas sur la tête
Alors ou !!
F6FCO a écrit :Source du message J'ai mis 0xF
Et pourtant en psot 225 j'avais déjà fais.
Moi s'appelle cela une étourderie, mais tu es excusable, car entre ta rénovation qui j'espère avance, et ton robot ça fait
beaucoup.
Maintenant tu vas pourvoir avancé.
F6FCO a écrit :Source du message J'ai bon dis, j'ai bon ?
Non c'est pas ça pour le schéma, tu cherches beaucoup trop loin.
Ne t’inquiète pas, j'ai fait passé ce teste à des personnes comme : DAUDET78, Neptune qui étaient
ingénieur en électronique qui son à la retraite maintenant, et ils n'ont pas trouvés.
Pourtant c'est gros comme une maison, on va voir sur ce forum, si il en a qui trouve, je rappelle qu'il faut pas chercher loin.
A+
Modifié en dernier par Temps-x le ven. 26 oct. 2018 20:40, modifié 1 fois.
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Temps-x a écrit :Bonsoir F6FCO, et tout le forum,F6FCO a écrit :Source du message Non, pas sur la tête
Alors ou !!
Pas le droit de dire sur un forum non dédié.
Temps-x a écrit :
Et pourtant en psot 225 j'avais déjà fais.
Moi s'appelle cela une étourderie, mais tu es excusable, car entre ta rénovation qui j'espère avance, et ton robot ça fait
beaucoup.
Moi s'appelle Jean-Claude.
Les entrées 8 et 9, une normale et l'autre inverseuse reliées ensemble ? Ca peut être possible, il faudrait juste étudier ce qu'il y a derrière dans le chip.
Modifié en dernier par F6FCO le ven. 26 oct. 2018 20:53, modifié 1 fois.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 34 invités