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

RUB1K
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1727
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#11 Message par Gérard » mar. 21 mai 2024 19:58

Je vais suivre votre discussion mais impossible pour moi de participer.
Nul en asm, nul en C et nul en méca... :cry:
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1671
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#12 Message par F6FCO » mer. 22 mai 2024 12:24

Pas grave, reste quand même.

Je suis en train de bosser sur la routine de gestion du module GY31. Selon la couleur analysée il fournit une fréquence variable, maxi de 600KHz. On peut diminuer cette fréquence à 120KHz ou 12Khz en jouant sur ses pins.
Principe:
Timer0 en compteur
Timer1 en minuterie
Une fenêtre de mesure avec le Timer1 et à l'intérieur de cette fenêtre on compte sur ce qui arrive sur T0CKI du Timer0 (RA4).

Je vais essayer de faire tourner ce module mais à priori il y a quelques petits trucs qui me dérangent, j'attends les résultats sinon je testerai un montage perso avec leds RGB.

Datasheet TCS3200.pdf
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:

RUB1K
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1727
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#13 Message par Gérard » mer. 22 mai 2024 14:00

Sûr que je reste, je vais sûrement apprendre des trucs.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1671
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#14 Message par F6FCO » mer. 22 mai 2024 19:00

Hello les gens,

Premier essai du GY31 sans programmation.
D'abord une petite explication sur la bonne manière d'utiliser ce module.
Le chip TMC3200 comporte toute une série de photodiodes divisées en 4 groupes:
- des photodiodes avec un filtre rouge
- des photodiodes avec un filtre vert
- des photodiodes avec un filtre bleu.
- des photodiodes sans filtre.
Les 4 grosses leds sont justes des lumineuses qui servent à illuminer la scène. çà fonctionne comme le principe du radar, les 4 leds envoient une lumière crue, lumière qui est réfléchie par la surface à analyser,le TMC3200 la reçoit et en laisse passer une certaine quantité sur chaque groupe à cause des filtres colorés.

Pour analyser une couleur on sélectionne d'abord un groupe et on relève la fréquence retournée (par ex: le groupe de photodiodes rouges)
Puis on sélectionne un deuxième groupe et on reléve la frq retournée (par ex: les vertes).
Pareil pour le troisième (par ex: les bleues)
Pour finir pour le quatrième (par ex: les blanches)
Donc quatre variables pour caractériser une couleur donnée.
Ces 4 groupes sont sélectionnables par les pins sur le module, donc facilement par programmation selon la table de vérité donnée par le datasheet.

Quand pour un montage les fréquences couleurs sont connues une fois pour toutes il suffit de faire des comparaisons pour savoir quelle est la couleur du cube.

------------------------------------------------------

Pour ce premier essai rapide, pressé que j'étais j'ai fais bien plus simple, sans sélection de groupe. J'ai juste alimenté le module et regardé ce qui sortait (tous les groupes validés) avec mon petit oscillo et un fréquencemètre. Et déjà comme çà, sans code çà fonctionne bien pour les couleurs bien tranchée d'un Rubik :wink:
A noter que la fréquence varie suivant la distance entre le module et la surface à analyser.

Ici j'ai fais l'essai avec un cube résolu et l'analyse du module semble couvrir une surface assez large, il faudra peut-être utiliser un tube ou un truc du genre pour isoler le mini-cube à analyser.

Reste plus qu'à pondre un peu de code pour faire une analyse par groupe.

P1060897.JPG


Exemples de fréquences trouvées.

avec le module à 1cm de la surface:
Rouge 1450Hz
Orange 2455Hz
Jaune 2130Hz
Blanc 1600Hz
Bleu 283Hz
Vert 633Hz

Avec le module à 3cm de la surface:
rouge 778Hz
Orange 1289Hz
Jaune 990Hz
Blanc 825Hz
Bleu 283Hz
Vert 633Hz

Même si ce n'est pas la meilleure façon d'utiliser le module les différences sont suffisantes pour effectuer des comparaisons.
Donc que du bonheur, le projet va pouvoir continuer :-D
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par F6FCO le mer. 22 mai 2024 19:23, modifié 10 fois.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

RUB1K
venom
Avatar de l’utilisateur
Expert
Expert
Messages : 1044
Âge : 38
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#15 Message par venom » mer. 22 mai 2024 19:12

Ça va les résultats sont bien différents.
Donc dans l'idée tu va analyser les "9 cases" des 6 faces ?








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

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1671
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#16 Message par F6FCO » mer. 22 mai 2024 19:28

Donc dans l'idée tu va analyser les "9 cases" des 6 faces ?

C'est çà, pour connaître la config de départ du cube mélangé. Si c'est facile d'analyser les couronnes extérieures en faisant pivoter le cube, il y a le souci d'arriver à analyser les couronnes du centre qui ne seront jamais en face du module.
Soit on fait un système pour déplacer en translation le module GY31, soit on fait du fixe et on en utilise deux. Vu le prix la solution est toute trouvée...
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1671
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#17 Message par F6FCO » mer. 22 mai 2024 19:31

En fait c'est peut-être même pire que çà si le module nécessite d'être bien face du mini-cube. On verra çà aux essais.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1671
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#18 Message par F6FCO » mer. 22 mai 2024 20:51

Une solution élégante serait de se faire son propre PCB comportant 3 chips bien placés en face des mini-cubes (sais pas trop comment les nommer). Deux sur l'arête et un sur le centre, on pourrait ainsi explorer toute une face entière en 4 rotations.

Alors là ce serait nickel mais çà fait beaucoup de pins 3x6pins = 18pins. Trouver le moyen soit de les multiplexer mais çà complique le code, soit de les commuter, plus simple, pour n'avoir que six pins utilisées sur le PIC.

Ou alors utiliser un 18F8722 qui aura assez de pins.

https://fr.aliexpress.com/item/10050051 ... ry_from%3A

capteurs.png
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:

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1671
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#19 Message par F6FCO » jeu. 23 mai 2024 11:16

Hello les gens,

Ca fonctionne bien. Je suis heureux d'être content et je vais continuer à persister.

Le code pour la gestion du GY31, finalement pas eu besoin du Timer1 comme je l'avais cru au départ, une simple boucle de 10ms sert de fenêtre de mesure. pour une analyse de surface j'active les filtres de couleurs chacun à leur tour en sauvegardant les données reçues dans trois variables rouge, vert et bleu. Comme je ne savais pas trop ou je mettais les pieds j'avais définies ces variables en 16bits mais finalement 8bits suffisent. Tout dépend de la fréquence choisie sur le module et de la durée de la fenêtre de mesure. Ici j'ai choisi 2% de la frq maxi et une fenêtre d'analyse de 10ms. C'est un choix arbitraire.

Code : Tout sélectionner

;**********************************************************************
;
                                                                    
;             Gestion module GY31 avec TIMER0
;                  F6FCO - mai 2024                                                                   
;                                                                     
;**********************************************************************

        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)

; --------- module GY31
#define s0    PORTA,0    
#define s1    PORTA,1
#define s2    PORTA,2
#define s3    PORTA,3
#define out    PORTA,4
#define leds    PORTA,5
         
#define préload_L 0x30    
#define préload_H 0xF8

    CBLOCK 0x00C               
    w_temp         :1        ; Sauvegarde du registre W
    status_temp     :1        ; Sauvegarde du registre STATUS
    Reg_1
    Reg_2
    conchita    :2        ; registre à tout faire
    rouge        :2
    vert        :2
    bleu        :2
    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 TIMER0
    btfsc    INTCON
,TMR0IE        ; bit5. interrupt timer0 autorisée ?
    btfss    INTCON,TMR0IF        ; bit2. si oui, tester si interrupt timer en cours
    bra     restorereg
    call    inttimer0        
; vers routine interrupt timer0
    bcf    INTCON
,TMR0IF        ; effacer flag interrupt timer0
    
    
    
;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

    ;  Routine d'
interruption TIMER 0                            
inttimer0    return
    
    
; ------------------------ Init

init
    clrf    EEADR            
; diminue la consommation
    
    
; init Timer0
    movlw    h
'A8'            ; compteur 16bits sur pin TOCKI sans prescaler
    movwf    T0CON        
    
    
; init TMR0
    clrf    TMR0L
    clrf    TMR0
            
        
; inti ports
    clrf    PORTA            
    clrf    PORTB            
        movlw     0Fh
          movwf     ADCON1                
; mode digital
    movlw    b
'00010000'
    movwf    TRISA
    movlw    b
'00000000'
    movwf    TRISB

    movlw    b
'10100000'        ; masque interruption
    movwf    INTCON            
; charger interrupt control
    
    
; init module GY31
    bcf    s0
    bsf    s1            
; 2% de la fréquence (12000Hz)
    bsf    leds            ; leds module actives
    clrf    rouge
    clrf    rouge
+1
    clrf    vert
    clrf    vert
+1
    clrf    bleu
    clrf    bleu
+1

; -----------------------------------
main
    call    analyse_couleur
    bra     main            
    
analyse_couleur
    bcf    s0            
; capteur actif à 2% de la frq
    bsf    s1        
    
; filtre rouge
    bcf    s2            
    bcf    s3            
    call    Fenêtre_analyse        
    movff    TMR0L
,rouge
    movff    TMR0H
,rouge+1
    clrf    TMR0L            
    clrf    TMR0H
    
; filtre vert
    bsf    s2            
    bsf    s3            
    call    Fenêtre_analyse         
    movff    TMR0L
,vert
    movff    TMR0H
,vert+1
    clrf    TMR0L
    clrf    TMR0H
    
; filtre bleu
    bcf    s2            
    bsf    s3            
    call    Fenêtre_analyse        
    movff    TMR0L
,bleu
    movff    TMR0H
,bleu+1
    clrf    TMR0L
    clrf    TMR0H
    
;
    return    
    
Fenêtre_analyse
    
; 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,1
    movlw       .26
    movwf       Reg_2
    decfsz      Reg_1,F,1
    bra         $-2
    decfsz      Reg_2
    bra         $-6
    nop
    return

    

    END                




Un chose à préciser: les 4 grosses leds doivent être orientées pour faire un seul halo lumineux concentré sur la surface à analyser, et les données sont cohérentes et répétitives pour les couleurs bien tranchées du cube.

Avec le module placé à environ 2cm du cube:

JAUNE:
R 5C
V 3F
B 2B

ORANGE:
R 67
V 1F
B 22

BLANC:
R 45
V 3C
B 49

ROUGE:
R 44
V 12
B 1B

BLEU:
R 14
V 1A
B 2D

VERT:
R 20
V 36
B 23
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

RUB1K
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1671
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#20 Message par F6FCO » jeu. 23 mai 2024 19:02

L'étape de la reconnaissance des couleurs étant réglée je vais pouvoir réfléchir à la suite. Avant de partir sur la mécanique il faut plancher sur l'électronique, on est encore loin de 'pisser du code' :lol: .

Minimum vital si je reste dans la config de mon premier projet.
3 drivers pap -> 2 fils x 3 = 6 pins (CW et CLK par moteur)
3 servos pour translater les moteurs -> 3 fils
3 TMC3200 pour la phase de reconnaissance des couleurs -> 6 fils x 3 = 18 fils
Compter un poussoir ou deux pour l'utilisation - > 2 fils
Ce qui nous fait 29 pins pour la config minimale.

Et la-dessus je n'ai pas encore réfléchi à la manière de pincer efficacement le cube qui nécessitera peut-être trois autres servos montés sur les pinces.
Je me tâte pour un 18F 40pins ou un 18F8722 à 80 pins histoire de rajouter les feux d'artifice et les jets d'eau.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:


Retourner vers « Langage ASM »

Qui est en ligne

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