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

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#91 Message par F6FCO » mar. 22 mai 2018 19:40

Bonsoir tous,
Je vois que çà bosse dur, de mon coté je n'ai pas avancé d'un pouce, trop occupé avec du hors-loisirs mais je vais m'y remettre rapidement.
Je reste sur l'idée de la RS232.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#92 Message par Temps-x » mer. 23 mai 2018 02:48

Bonsoir

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.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Soft de commande CNC en asm
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#93 Message par satinas » mer. 23 mai 2018 05:40

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

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#94 Message par F6FCO » mer. 23 mai 2018 12:19

Pour ma part dans un premier temps ce sera uniquement liaison série, je ne suis pas aussi avancé que Temps-X :wink: 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.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#95 Message par Temps-x » jeu. 24 mai 2018 01:49

Bonsoir F6FCO, satinas,

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++ :langue:

J’aimerais avancé dans ce projet, donc, je vous dit à samedi soir..

Merci

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#96 Message par F6FCO » jeu. 24 mai 2018 13:37

Temps-x a écrit : il ne se suive pas forcément, la fragmentation à pour bute
de réunir les secteurs contenant le même fichier,.

Tu veux dire la "défragmentation" :wink:
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#97 Message par F6FCO » jeu. 24 mai 2018 15:44

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.

Capture1.JPG

Capture2.JPG


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.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#98 Message par satinas » jeu. 24 mai 2018 17:19

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.

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
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#99 Message par F6FCO » jeu. 24 mai 2018 18:20

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.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#100 Message par paulfjujo » jeu. 24 mai 2018 19:48

bonsoir,


je regarde de temps en temps, ce qui se passe dans la section ASM, bien que les C ne soient pas les bienvenus ..

humour!!
citation:
Bon, le langage pratiqué sera ASM, tout autre langage ne sera pas toléré, comme le C++ :langue:
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
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage ASM »

Qui est en ligne

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