Gamoover

[move]Bienvenue sur Gamoover, portail francophone de l'arcade.

[WIP] DMD clock by F4brice - NEW : lecture des GIF animées en natif !

Démarré par f4brice, Dimanche 04 Décembre 2016, 20:19:46 PM

wikee

Felicitations pour tout le taff abattu ! la réalisation est impressionnante
^-^


New Astro City & Jeutel

Iro

Chapeau !! Et le webserver est encore en place  =:))
:fleche:
"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF - Ma collec' de panels

LES TUTOS DE GAMO   

D_D

Je n'ai qu'un reproche à faire, il est où le bon de commande ???  ^-^
Recherche toute pièce opération wolf et borne opération thunderbolt.

_n3o_

Vraiment trop bien cette DMD clock, F4brice t'assure trop ! ! !

Petite fonction qui pourrait etre cool (pour les pros), ajouter un compteur de Like sur FB (ouais je sais facebook c'est le mal)

http://www.freetronics.com.au/blogs/news/7868561-diy-arduino-powered-facebook-like-counter#.WIC0vLbhC34



Iro

Houla, le contrarie pas , c'est presque fini !  =:))

"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF - Ma collec' de panels

LES TUTOS DE GAMO   

marcus600

ah voila le fameux projet que aganyte me parle ,

ouai il est ou le bon de commande ? je prend direct :)

f4brice

Bonsoir.

Petite mise à jour de ce topic.  :)

En fait, il n'y a rien de bien visible, sauf que j'ai modifié sérieusement dans mon logiciel la manière donc le processeur de la carte de contrôle décode les trames infra-rouge émises par la télécommande.

Avant, c'était fait au marteau et au burin, à la hache et au lance-flamme.
Du coup, la fiabilité n'était pas là, et il arrivait régulièrement que le décodage de la trame (la trame est basée sur des durées de pulse) était perturbé par le rafraîchissement de l'écran, bien plus prioritaire.
Si j'augmentais la priorité du décodage de trame IR, c'est l'affichage qui déconnait.

Je me suis donc lancé - sur les conseils de spectroman - sur l'étude approfondie de composants hardware intégrés au processeur : les timers.

Ces trucs, ça permet de compter à une certaine fréquence, et de faire un peu ce qu'on veut.
Or, il existe une possibilité avancée (parmi d'autre) : la capture d'un événement.
Le timer compte tranquillement dans son coin, et dès qu'un événement survient, sa valeur est recopiée dans un tampon hardware et on peut la relire tranquillement un peu plus tard sans grosse contrainte temps réel.
Et dans mon cas, l'événement, c'est le début du pulse IR (et donc aussi la fin du pulse précédent).

En faisant une simple soustraction de 2 échantillons consécutifs, j'ai l'info qu'il me faut : la durée d'un pulse IR. Le décodage est donc quasi-cadeau !  :D
J'ai divisé par 10 la complexité de décodage, et la fiabilité est maintenant au rendez-vous !


Du coup, vu que j'ai maintenant compris comment fonctionnent de manière détaillée ces timers, je vais pouvoir m'attaquer à la 2e modification du logiciel : le bus 1-wire.
C'est via ce bus que je vais lire la température mesurée par un capteur spécifique.
Et le problème de ce bus, c'est que les timings sont ultra-serrés (à quelques micro-secondes près).
Du coup, pour que ce soit fiable, je n'avais pas eu le choix : je coupe tout dans le processeur et il ne fait que de s'occuper du bus.
Résultat : lors de la lecture de la température, on voit un léger glitch d'image (elle se coupe et revient immédiatement).

Ce n'était pas vraiment gênant, mais pour autant ça ne me satisfaisait pas.
Vu l'énorme puissance fonctionnelle des timers hardware du processeur, je me suis dit qu'il devait bien être possible de remplacer mon algo de lecture / écriture sur le bus 1-wire par une utilisation judicieuse d'un timer...

Et c'est prometteur :



En bleu clair, c'est mon signal "témoin". Il change d'état à chaque début de cycle.
En jaune, c'est le futur bus 1-wire. Il faut faire des pulses à la masse d'une certaine durée, et ensuite le laisser à l'état haut une autre certaine durée.
Ce qui est cool, c'est que maintenant le signal jaune est généré par un timer sans aucune intervention logicielle.
Je peux donc à la micro-seconde près avoir le pulse à la masse de mon choix et une durée totale de mon choix aussi.
J'utilise là une fonction proche de la génération d'un signal PWM.

La cerise sur le gâteau, c'est le signal mauve.
Il change d'état exactement un certain temps après le début du cycle.
Ca correspond à l'instant où il faut échantillonner le bus 1-wire pour lire le bit écrit par le périphérique.
Pour le moment, je fais changer d'état le signal mauve.
Très bientôt, je vais pouvoir automatiquement lire le bus 1-wire sans interruption ni intervention logicielle : transfert DMA !

À suivre...


olschool

Winner's Don't Use Drug mais ça aide quand même pour finir Ghost & Goblins.



Citation de: ducatman1098 le Lundi 05 Novembre 2018, 22:45:37 PM
En rentrant le camion au garage,  je me suis aperçu que j avais récupérer une after burner  ;D

Little_Rabbit

Salut,

Ils sont forts Spectro et F4brice !!  ^-^

C'est cool ça : j'ai basé une partie de mon installation domotique sur un bus 1-wire, j'aurai une quinzaine de capteurs de température type DS18B20, je vais pouvoir utiliser ma "DMD clock by Fabrice" pour afficher la température de toutes les pièces de la maison !  :D
(bon, je déconne ;))

Ton transfert DMA se fait entre quoi et quoi ? Entre les registres du timer et la RAM du micro-contôleur ?  :-\

Vivement la suite  ^- !

A+
Recherche bornes dédiées ou PCB originaux: Miss Pacman, Dig Dug, Galaga, Mappy, Asteroids, Battlezone, Missile Command, Tempest, Star Wars, Donkey Kong (+ Jr), Mario Bros, Moon Patrol, Defender, Joust, Frogger, Gyruss, Pooyan, Space Tactics, Zaxxon, etc. Flip : Gottlieb des années 80 (Spirit, Amazon Hunt, ...), Baby Pac Man. Divers :  Ice Cold Beer => Trois fois rien quoi ! :D
Ma séance sur le divan : c'est grave Docteur ? :-\
Ma gaming room, ma storage room

f4brice

Le transfert DMA est prévu entre le port GPIO du bus 1-wire et la mémoire.
J'ai besoin que la lecture du port GPIO soit faite à un instant précis après le début du cycle.
Il n'y a qu'un unique demi-mot (16 bits) à transférer.
L'idée, c'est que la lecture du port GPIO soit faite à un instant très précis et sans le CPU ni interruption.
C'est le contrôler DMA qui le fera pour moi, sur stimuli du timer qui pilote le signal jaune.
Dans mon message précédent, ce stimuli est utilisé pour faire changer le signal mauve.

En fin de transfert DMA, j'ai une interruption "fin de DMA" et je peux retrouver l'état du port GPIO qui avait été capturé par le DMA au bon moment.

Voir cette page où sont sommairement présentés les lectures ou écritures d'un bit à 0 ou à 1 sur le bus 1-wire.

f4brice

Bonsoir.

Petite mise à jour "technique".
Je viens (enfin) de finir la modification de mon implémentation du bus 1-wire.
Ma première version était techniquement pauvre : je bloquais les interruptions du processeur et je faisais tout par logiciel.
Du coup il y avait un effet de bord sur le rafraîchissement des panneaux DMD.

Ça n'a pas été simple de faire une version techniquement "propre", car il y avait un détail de la doc du STM32F407 qui m'avait échappé.
Finalement, grâce à l'aide de spectroman qui m'a trouvé un bout de code où un type faisait tomber en marche ce qui plantait chez moi, j'ai pu trouver le détail :


Le processeur dispose de 2 contrôleurs DMA, et j'utilisais le contrôleur #1.
Or il ne sait accéder qu'à des périphériques présents sur le bus APB1 (chemin rouge) et moi je veux aller chatouiller un périphérique GPIO présent sur le bus AHB1.
Du coup, le contrôleur refusait de travailler et me répondait avec un "bus error".

J'ai basculé sur le contrôleur #2 et lui il sait faire le boulot (chemin vert).

Ensuite, j'ai fait générer les pulses nécessaires à la communication par un timer, et je n'ai plus besoin de tout bloquer le fonctionnement du processeur. C'est le hardware qui le fait pour moi.

Tadaaaaaa :


Voici une capture de trame 1-wire :


Le 1er pulse est un reset, et il doit faire 480 micro-secondes suivi de 480 autres micro-secondes de repos :


Voici l'écriture d'un bit à 1 : pulse de 6 micro-secondes suivi de 64 micro-secondes de repos :



C'est plus propre, ça n'utilise plus aucune interruption et ne bloque plus non plus le fonctionnement du CPU pour éviter les erreurs de mesure.  8)
Et en effet, le glitch de léger clignotement visible auparavant sur le menu de statut de la fonction "température" a 100% disparu.

Maitre_Poulpi

Ça paraît tellement simple quand tu l'explique comme ça  :D
May the Gamooforce be with you !
À partir du moment où un fou sait qu'il l'est, peut-on toujours le nommer ainsi ?
Boulot, rétro, dodo... et un peu (beaucoup) de TATC© (Touche A Tout Compulsif)...
Le WIP en slip et le hack Sega en Pijama !

Stek

quand je me regarde dans la glace après avoir lu un post à Fabrice...


Oggy

Citation de: Stek le Mercredi 01 Février 2017, 22:10:06 PM
quand je me regarde dans la glace après avoir lu un post à Fabrice...



+1  :'(

olschool

Mode menteur ON )

Non moi j'ai tout compris...  :?

Mode menteur Off )

si si je vous jure

:D =:)) :D

en tout cas ça veux dire.. que ça avance et ça...

^-^ c'est cool
Winner's Don't Use Drug mais ça aide quand même pour finir Ghost & Goblins.



Citation de: ducatman1098 le Lundi 05 Novembre 2018, 22:45:37 PM
En rentrant le camion au garage,  je me suis aperçu que j avais récupérer une after burner  ;D

spectroman

Bravo, trop fort f4brice ^-^

PS: C'est Mme f4brice qui va être contente, il n'y a plus de glitch  ;)