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
Soft de commande CNC en asm
Bonsoir
On est d'accord dessus.
Pour info, mon programme CNC fonctionne depuis longtemps sur port série, donc pour moi, c'est du déjà fait.
Voici l'ancien protocole qui fonctionne sur mon programme CNC, et qui sera remplacé par le Gcode
Mais ça c'est pas sur, donc je revois tout, enfin pas la fonction contour et échelle qui fonctionne parfaitement
Nos source vont pas d'être d'une grande utilité pour uart, car chacun peu faire son propre protocole.
Par exemple, et vu la lenteur d'une CNC qui peu se permettre d'attendre, on peu très bien envoyer 2 octet, c'est ta dire 16 bits, si
les deux bits sont identiques, ça veut dire qu'il n'y à pas d'erreur de transmission.
Seule un octet est prie en considération
Si une erreur et détecter, le Pic envoie au PC un E(erreur), si sais bon le pic envoie au PC B(Bon) et en boucle.
Je voie cela comme cela
A+
Code : Tout sélectionner
satinas à écrit :
Je vois ce projet comme la réunion de plusieurs intervenants dans un objectif commun.
On est d'accord dessus.
satinas a écrit :
Source du message vous devez démarrer avec la liaison série
Pour info, mon programme CNC fonctionne depuis longtemps sur port série, donc pour moi, c'est du déjà fait.
Voici l'ancien protocole qui fonctionne sur mon programme CNC, et qui sera remplacé par le Gcode
' moteur 1 longueur aller 1 impulsion
' moteur 1 longueur retour 2 impulsion
' moteur 2 largeur aller 3 impulsion
' moteur 2 largeur retour 4 impulsion
' moteur 3 hauteur aller 5 impulsion
' moteur 3 hauteur retour 6 impulsion
' moteur 1 et 2 sélectionner en diagonal à gauche en haut 7 impulsion
' moteur 1 et 2 sélectionner en diagonal à droit en haut 8 impulsion
' moteur 1 et 2 sélectionner en diagonal à gauche en bas 9 impulsion
' moteur 1 et 2 sélectionner en diagonal à droit en bas 10 impulsion
' mettre en marche le moteur de la fraiseuse 11 impulsion
' mettre à l'arrêt le moteur de la fraiseuse 12 impulsion
' mettre tous les moteurs pas à pas hors tension 13 impulsion
' mettre tous les moteurs pas à pas sous tension 14 impulsion
' programmation du temps d'extinction des moteurs 15 impulsion
' lecture du temps d'extinction des moteurs 16 impulsion
Mais ça c'est pas sur, donc je revois tout, enfin pas la fonction contour et échelle qui fonctionne parfaitement
Nos source vont pas d'être d'une grande utilité pour uart, car chacun peu faire son propre protocole.
Par exemple, et vu la lenteur d'une CNC qui peu se permettre d'attendre, on peu très bien envoyer 2 octet, c'est ta dire 16 bits, si
les deux bits sont identiques, ça veut dire qu'il n'y à pas d'erreur de transmission.
Seule un octet est prie en considération
Si une erreur et détecter, le Pic envoie au PC un E(erreur), si sais bon le pic envoie au PC B(Bon) et en boucle.
Je voie cela comme cela
A+
Modifié en dernier par Temps-x le mer. 23 mai 2018 17:46, modifié 1 fois.
Soft de commande CNC en asm
Bonjour à tous
Comment choisissez-vous depuis le pic le fichier de la sdcard à envoyer à la machine ?
Faut-pas répondre depuis le PC en série, car dans ce cas à quoi sert la sdcard :)
On peut avoir un nom de fichier unique, mais je trouve dommage, vu le travail que cela représente, de finir avec une telle limitation. Enfin, on peut commencer comme-ça. Dans ce cas la solution évoquée au départ, formatage et un seul fichier m'aurait économisé 90% du boulot, mais elle ne me plaît pas trop, parce que c'est trop simple :) La sdcard devrait supporter les formatages multiples.
Pour les délais,Temps-x sache que je suis en plein dedans, que c'est loin d'être fini, car le plus long c'est de tester tous les cas de figure, dus à la fragmentation. Plus je lirai de code à interfacer et plus j'aurais les idées claires. Le fait d'être dans le flou me pousse à faire une bibliothèque complète, et dans ce cas les délais seront décuplés pour raison d'attente de validation par le contrôle qualité :)
Il me semble avoir lu que tu as déjà programmé sur PC. Avec quel langage ?
On peut imaginer une routine NextSector qui lit un secteur du fichier , le place dans 2 pages ram de 256 octets du 18F, et met à jour une variable 16 bits nombre d'octets lus :
- 512 si lecture d'un secteur plein
- 1 à 511 si lecture du dernier secteur non plein
- 0 si lecture terminée
- > 512 problème de lecture sd
Comment choisissez-vous depuis le pic le fichier de la sdcard à envoyer à la machine ?
Faut-pas répondre depuis le PC en série, car dans ce cas à quoi sert la sdcard :)
On peut avoir un nom de fichier unique, mais je trouve dommage, vu le travail que cela représente, de finir avec une telle limitation. Enfin, on peut commencer comme-ça. Dans ce cas la solution évoquée au départ, formatage et un seul fichier m'aurait économisé 90% du boulot, mais elle ne me plaît pas trop, parce que c'est trop simple :) La sdcard devrait supporter les formatages multiples.
Pour les délais,Temps-x sache que je suis en plein dedans, que c'est loin d'être fini, car le plus long c'est de tester tous les cas de figure, dus à la fragmentation. Plus je lirai de code à interfacer et plus j'aurais les idées claires. Le fait d'être dans le flou me pousse à faire une bibliothèque complète, et dans ce cas les délais seront décuplés pour raison d'attente de validation par le contrôle qualité :)
Il me semble avoir lu que tu as déjà programmé sur PC. Avec quel langage ?
On peut imaginer une routine NextSector qui lit un secteur du fichier , le place dans 2 pages ram de 256 octets du 18F, et met à jour une variable 16 bits nombre d'octets lus :
- 512 si lecture d'un secteur plein
- 1 à 511 si lecture du dernier secteur non plein
- 0 si lecture terminée
- > 512 problème de lecture sd
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Pour ma part dans un premier temps ce sera uniquement liaison série, je ne suis pas aussi avancé que Temps-X Mais la SD-card m'intéresse beaucoup car pour les applications à microcontroleur elle est incontournable et tu auras un client quand tu auras fini ta prog.
Soft de commande CNC en asm
Bonsoir F6FCO, satinas,
Les essais doivent être fait avec cordon RS232 pour la mise au point, après il faut s'affranchir de celle-ci.
On n’envoie rien à la machine, à par les coordonnées de x, y, z, A, ce n'est plus le PC qui pilote la CNC, c'est Le Pic qui exécute
les données qui son sur la carte SD(Gcode)
Oui j'ai lu qu'une information pouvait se trouver sur un autre secteur, il ne se suive pas forcément, la fragmentation à pour bute
de réunir les secteurs contenant le même fichier, c'est pas toujours possible, surtout si il y a beaucoup de fichier.
C'est pourquoi dans un premier temps qu'il ne faudra pas mettre plusieurs fichier, on peu commencer par 1.
QuickBasic, visual basic, TASM, RapidQ, Je ne pratique pas sur PC le C++
J’aimerais avancé dans ce projet, donc, je vous dit à samedi soir..
Merci
A+
satinas a écrit :
Source du message Comment choisissez-vous depuis le pic le fichier de la sdcard à envoyer à la machine ?
Faut-pas répondre depuis le PC en série, car dans ce cas à quoi sert la sdcard :)
Les essais doivent être fait avec cordon RS232 pour la mise au point, après il faut s'affranchir de celle-ci.
On n’envoie rien à la machine, à par les coordonnées de x, y, z, A, ce n'est plus le PC qui pilote la CNC, c'est Le Pic qui exécute
les données qui son sur la carte SD(Gcode)
satinas a écrit :
Source du messagecar le plus long c'est de tester tous les cas de figure, dus à la fragmentation
Oui j'ai lu qu'une information pouvait se trouver sur un autre secteur, il ne se suive pas forcément, la fragmentation à pour bute
de réunir les secteurs contenant le même fichier, c'est pas toujours possible, surtout si il y a beaucoup de fichier.
C'est pourquoi dans un premier temps qu'il ne faudra pas mettre plusieurs fichier, on peu commencer par 1.
satinas a écrit :
Source du message Il me semble avoir lu que tu as déjà programmé sur PC. Avec quel langage ?
QuickBasic, visual basic, TASM, RapidQ, Je ne pratique pas sur PC le C++
J’aimerais avancé dans ce projet, donc, je vous dit à samedi soir..
Merci
A+
Soft de commande CNC en asm
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Re,
J'ai enfin trouvé le temps de me remettre à la prog. Premiers essais RS232, pour cela j'ai commencé petit avec un 16F (le 18F suivra quand je maîtriserai, un seul problème à la fois) en m'aidant du site de Fabrice Sincère.
Ca fonctionne mais pas parfaitement, je reçois bien mon message de Teraterm vers le PIC, je le transfère du buffer réception dans le buffer emission et je le renvoie sur Teraterm.
Le souci c'est que j'ai des erreurs de recopie et que l'émission est remplie de la valeur ASCII "zéro" en plus du message. Je tourne autour depuis ce matin.
J'ai enfin trouvé le temps de me remettre à la prog. Premiers essais RS232, pour cela j'ai commencé petit avec un 16F (le 18F suivra quand je maîtriserai, un seul problème à la fois) en m'aidant du site de Fabrice Sincère.
Ca fonctionne mais pas parfaitement, je reçois bien mon message de Teraterm vers le PIC, je le transfère du buffer réception dans le buffer emission et je le renvoie sur Teraterm.
Le souci c'est que j'ai des erreurs de recopie et que l'émission est remplie de la valeur ASCII "zéro" en plus du message. Je tourne autour depuis ce matin.
Code : Tout sélectionner
; Usart 16F628
;********************************************************************
ERRORLEVEL-302
;****************************************************************
list p=16F628A ;liste directive du 16F628
#include "p16F628A.inc" ;variables specific du processeur
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;*********************** Assignations *******************************
DRAM EQU 0x20 ;début Mémoire Ram banque0
FRAM EQU 0X7F ;fin Mémoire Ram banque0
;*********************** Définitions variables en RAM PAGE0 *********
CBLOCK 0x20
W_TEMP
STATUS_TEMP
Tampon_RECEPTION
Tampon_EMISSION
ENDC
;*********************** Macro **************************************
Bank0 macro
bcf STATUS,RP0 ;Acces bank0
bcf STATUS,RP1
endm
Bank1 macro
bsf STATUS,RP0 ;Acces bank1
bcf STATUS,RP1
endm
Bank2 macro
bcf STATUS,RP0 ;acces bank2
bsf STATUS,RP1
endm
Bank3 macro
bsf STATUS,RP0 ;Acces bank4
bsf STATUS,RP1
endm
;********************************************************************
ORG 0x00
goto init
;********************************************************************
; Gestion des interruptions *
;********************************************************************
org 0x0004 ; vecteur d'interruption (directive du compilateur MPLAB)
movwf W_TEMP
swapf STATUS ,W
movwf STATUS_TEMP
Bank1
btfss PIE1, RCIE
goto int1
Bank0
btfsc PIR1, RCIF
goto reception
int1
Bank1
btfss PIE1, TXIE
goto int2
Bank0
btfsc PIR1, TXIF
goto emission
int2
; traitement des autres interruptions
;...
;...
goto restauration
reception
Bank0
movf RCREG , W
movwf Tampon_RECEPTION ; les 8 bits de données sont transférés dans un registre d'usage général
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
goto int1
emission
movf Tampon_RECEPTION,w ; on tranfère la valeur reçue dans le registre d'émission pour la renvoyer à Teraterm
movwf Tampon_EMISSION
;...
;...
; les 8 bits de données à transmettre sont dans le registre d'usage général Tampon_EMISSION
movf Tampon_EMISSION , W
bcf STATUS , RP0 ; passage en banque 0
movwf TXREG
goto int2
restauration
swapf STATUS_TEMP , W ; restauration des registres STATUS puis W
movwf STATUS
swapf W_TEMP , f
swapf W_TEMP , W
retfie ; retour d'interruption
;*******************************************************************
; Debut du Programme
init
;*********************** Mise a zéro de la mémoire RAM banque0 ******
movlw DRAM
movwf FSR
boucleram
clrf INDF
incf FSR,F
btfss FSR,7
goto boucleram
;*********************** Initialisation *******************
Bank1 ; passage en banque 1
movlw B'11111111' ;
movwf TRISB ;
; -------------- init SPRBG
movlw D'25'
movwf SPBRG ; (SPBRG) = D'25'
;-------------- init TXSTA
movlw b'00100100'
movwf TXSTA
; bit 7 (CSRC) = 0 (non utilisé : 0 par exemple)
; bit 6 (TX9) = 0 : 8 bits de transmission
; bit 5 (TXEN) = 1 : autorise la réception
; bit 4 (SYNC) = 0 : mode asynchrone
; bit 3 = 0 (non implémenté)
; bit 2 (BRGH) = 1 : mode asynchrone haute vitesse
; bit 1 (TRMT) = 0 (en lecture seule)
; bit 0 (TX9D) = 0 (non utilisé : 0 par exemple)
;------------- init RCSTA
Bank0
movlw b'10010000'
movwf RCSTA
; bit 7 (SPEN) = 1 : utilisation du port série
; bit 6 (RX9) = 0 :8 bits reception
; bit 5 (SREN) = 0 (non utilisé : 0 par exemple)
; bit 4 (CREN) = 1 autorise la reception
; bit 3 (ADEN) = 0 (non utilisé : 0 par exemple)
; bit 2 (FERR) = 0 (non utilisé : 0 par exemple)
; bit 1 (OERR) = 0 (non utilisé : 0 par exemple)
; bit 0 (RX9D) = 0 (non utilisé : 0 par exemple)
; désactivation des comparateurs analogiques
movlw 0x007
movwf CMCON
; init interruptions
Bank1
bsf INTCON,GIE ; autorisation globale des interruptions
bsf INTCON ,PEIE ; autorisation des interruptions des périphériques
bsf PIE1 , RCIE ; autorisation de l'interruption de réception de l'USART
bsf PIE1 , TXIE ; autorisation de l'interruption d'émission de l'USART
Bank0
main
END ;fin programme
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Soft de commande CNC en asm
Bonjour,
Désolé, mais je peux pas suivre, avec tous ces changements de bank, ces lignes en trop, ...
La com série, c'est pareil sur 16F et 18F, tu devrais commencer avec l'exemple de Temps-x.
viewtopic.php?p=9373&sid=217efd38314d7750bea310a07ebcef18#p9373
Ensuite tu ajoutes l'init du port série, et une réception par boucle, pas par irq. Tu renvoies vers le PC ce que tu reçois, sans stocker, après avoir incrémenté l'octet, on sait jamais avec l'écho. Que ce soit pour envoyer ou recevoir, on doit tester un flag avant d'écrire ou lire le registre du port série.
Ensuite tu rajoutes ...
Désolé, mais je peux pas suivre, avec tous ces changements de bank, ces lignes en trop, ...
La com série, c'est pareil sur 16F et 18F, tu devrais commencer avec l'exemple de Temps-x.
viewtopic.php?p=9373&sid=217efd38314d7750bea310a07ebcef18#p9373
Ensuite tu ajoutes l'init du port série, et une réception par boucle, pas par irq. Tu renvoies vers le PC ce que tu reçois, sans stocker, après avoir incrémenté l'octet, on sait jamais avec l'écho. Que ce soit pour envoyer ou recevoir, on doit tester un flag avant d'écrire ou lire le registre du port série.
Code : Tout sélectionner
boucle
attendre que RCIF passe à 1
RCREG -> byte
incrementer byte
attendre que TXIF soit à 1
byte -> TXREG
goto boucle
Ensuite tu rajoutes ...
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Hello,
L'exemple de Temps-X c'est juste pour faire clignoter une led, pas de liaison série, je m'en inspirerais pour la config quand je passerai sur 18F mais auparavant j'aimerai finaliser la liaison série sur ce 16F628, histoire de ne pas rester sur un échec et parfaire ma culture. Dés que çà marche je migre sur le 18F4525.
Me reste à trouver la raison de tous ces zéros sur le TX.
Je vais essayer sans les interruptions comme tu le suggères mais je pense qu'il faudra y revenir ensuite car le soft sera assez étoffé et j'ai peur qu'il ne soit trop lent.
L'exemple de Temps-X c'est juste pour faire clignoter une led, pas de liaison série, je m'en inspirerais pour la config quand je passerai sur 18F mais auparavant j'aimerai finaliser la liaison série sur ce 16F628, histoire de ne pas rester sur un échec et parfaire ma culture. Dés que çà marche je migre sur le 18F4525.
Me reste à trouver la raison de tous ces zéros sur le TX.
Je vais essayer sans les interruptions comme tu le suggères mais je pense qu'il faudra y revenir ensuite car le soft sera assez étoffé et j'ai peur qu'il ne soit trop lent.
Soft de commande CNC en asm
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
je regarde de temps en temps, ce qui se passe dans la section ASM, bien que les C ne soient pas les bienvenus ..
citation:
Bon, le langage pratiqué sera ASM, tout autre langage ne sera pas toléré, comme le C++
D'ailleurs MikroC C ce n'est pas du C++
on peut mettre un peu d' ASM sous mikro C .. mais pas l'inverse .
Ma question:
je trouve curieux, la tournure , façon d'ecrire le main (boucle principale) .. sans boucle d'attente
Apres l'init effectuée, et armement des interruptions, que fait le MCU ?
je pense qu tu as raison de'utiliser les interrupts ,
car le pooling , ça ne marchera que si la liaison n'est pas trop rapide ( en bauds)
surtout lorsqu'on envoie , en une seule salve, tout un string (pas la ficelle!) de plusieurs bytes contigus
sans espace temporel entre les bytes .. ça va planter.
mais taper au clavier et renvoyer sur l'ecran, dans ce cas , la methode pooling peut suivre aisement vu le delai existant entre chaque envoi de caractere..
et un main qui ne fait rien
je regarde de temps en temps, ce qui se passe dans la section ASM, bien que les C ne soient pas les bienvenus ..
citation:
Bon, le langage pratiqué sera ASM, tout autre langage ne sera pas toléré, comme le C++
D'ailleurs MikroC C ce n'est pas du C++
on peut mettre un peu d' ASM sous mikro C .. mais pas l'inverse .
Ma question:
je trouve curieux, la tournure , façon d'ecrire le main (boucle principale) .. sans boucle d'attente
Apres l'init effectuée, et armement des interruptions, que fait le MCU ?
Code : Tout sélectionner
main
END ;fin programme
je pense qu tu as raison de'utiliser les interrupts ,
car le pooling , ça ne marchera que si la liaison n'est pas trop rapide ( en bauds)
surtout lorsqu'on envoie , en une seule salve, tout un string (pas la ficelle!) de plusieurs bytes contigus
sans espace temporel entre les bytes .. ça va planter.
mais taper au clavier et renvoyer sur l'ecran, dans ce cas , la methode pooling peut suivre aisement vu le delai existant entre chaque envoi de caractere..
et un main qui ne fait rien
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 67 invités