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
RUB1K
RUB1K
- F6FCO
Expert- Messages : 2621
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : 5 parsecs au nord de Klyntar
- Contact :
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.
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.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
RUB1K
RUB1K
- F6FCO
Expert- Messages : 2621
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : 5 parsecs au nord de Klyntar
- Contact :
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
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.
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
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

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.
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

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.
RUB1K
Ça va les résultats sont bien différents.
Donc dans l'idée tu va analyser les "9 cases" des 6 faces ?
@++
Donc dans l'idée tu va analyser les "9 cases" des 6 faces ?
@++
RUB1K
- F6FCO
Expert- Messages : 2621
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : 5 parsecs au nord de Klyntar
- Contact :
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...
RUB1K
RUB1K
- F6FCO
Expert- Messages : 2621
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : 5 parsecs au nord de Klyntar
- Contact :
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
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
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
RUB1K
- F6FCO
Expert- Messages : 2621
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : 5 parsecs au nord de Klyntar
- Contact :
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.
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
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
RUB1K
- F6FCO
Expert- Messages : 2621
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : 5 parsecs au nord de Klyntar
- Contact :
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'
.
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.

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.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Google [Bot] et 7 invités