Auteur Sujet: [WIP] DMD clock by F4brice  (Lu 26433 fois)

Hors ligne wikee

  • Scotché
  • *
  • Messages: 468
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #112 le: Jeudi 12 Janvier 2017, 21:27:32 pm »
Felicitations pour tout le taff abattu ! la réalisation est impressionnante
 ^-^


New Astro City & Jeutel

Hors ligne Iro

  • Alias le Rouston Masqué
  • Staff
  • Dieu de l' Arcade
  • *****
  • Messages: 17420
  • Iro, chevalier Judaï
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #113 le: Vendredi 13 Janvier 2017, 08:55:57 am »
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

LES TUTOS DE GAMO   

Hors ligne D_D

  • Pratiquement VIP
  • *
  • Messages: 1427
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #114 le: Vendredi 13 Janvier 2017, 17:24:33 pm »
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.

Hors ligne _n3o_

  • Arcade Kingmaster
  • *
  • Messages: 4201
  • 。◕‿◕。 rollingg starttttt !
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #115 le: Jeudi 19 Janvier 2017, 13:46:24 pm »
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


Hors ligne Iro

  • Alias le Rouston Masqué
  • Staff
  • Dieu de l' Arcade
  • *****
  • Messages: 17420
  • Iro, chevalier Judaï
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #116 le: Jeudi 19 Janvier 2017, 14:33:15 pm »
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

LES TUTOS DE GAMO   

Hors ligne marcus600

  • Dupont
  • Beta Testeur
  • *
  • Messages: 2208
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #117 le: Jeudi 19 Janvier 2017, 21:32:14 pm »
ah voila le fameux projet que aganyte me parle ,

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

Hors ligne f4brice

  • ✌(◕‿◕)✌ Donateur 2018
  • Arcade Kingmaster
  • *
  • Messages: 4052
  • « Matériel inconnu ? Touche à ton cul ! »
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #118 le: Jeudi 26 Janvier 2017, 22:58:12 pm »
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...


Hors ligne olschool

  • ✌(◕‿◕)✌ Donateur 2018
  • Level Buster
  • *
  • Messages: 2526
  • Le JR's est Immortel
    • Voir le profil
    • Le JR's
[WIP] DMD clock by F4brice
« Réponse #119 le: Jeudi 26 Janvier 2017, 23:36:18 pm »
J'ai pas tout compris

 :-\

mais cool

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


Recherche Bornes: Space  Invader/ Rolling Thunder/Dragon's Lair/Kung Fu Master et Karateka Champ et Lethal Enforcer.

Hors ligne Little_Rabbit

  • Arcade Myth
  • *
  • Messages: 4660
  • The early 80's : the arcade golden age !!
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #120 le: Jeudi 26 Janvier 2017, 23:54:12 pm »
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 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 : Xenon, Baby Pac Man, Gottlieb des années 80 (Spirit, Amazon Hunt, ...). Divers :  Ice Cold Beer
Trois fois rien quoi ! :D

Hors ligne f4brice

  • ✌(◕‿◕)✌ Donateur 2018
  • Arcade Kingmaster
  • *
  • Messages: 4052
  • « Matériel inconnu ? Touche à ton cul ! »
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #121 le: Vendredi 27 Janvier 2017, 08:11:39 am »
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.

Hors ligne f4brice

  • ✌(◕‿◕)✌ Donateur 2018
  • Arcade Kingmaster
  • *
  • Messages: 4052
  • « Matériel inconnu ? Touche à ton cul ! »
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #122 le: Mercredi 01 Février 2017, 21:52:19 pm »
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.

Hors ligne Maitre_Poulpi

  • ✌(◕‿◕)✌ Donateur 2018
  • Alien
  • *
  • Messages: 4793
  • Consoles au fil je suis, ordis aussi
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #123 le: Mercredi 01 Février 2017, 22:09:29 pm »
Ç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...

Hors ligne Stek

  • Level Buster
  • *
  • Messages: 2589
  • PCB Hunter !
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #124 le: Mercredi 01 Février 2017, 22:10:06 pm »
quand je me regarde dans la glace après avoir lu un post à Fabrice...



"Fun and nostalgia through gaming and beer is what we’re all about."

Hors ligne Oggy

  • Pilier
  • *
  • Messages: 646
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #125 le: Mercredi 01 Février 2017, 22:41:28 pm »
quand je me regarde dans la glace après avoir lu un post à Fabrice...



+1  :'(
Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors seulement vous vous apercevrez que l'argent ne se mange pas

Hors ligne olschool

  • ✌(◕‿◕)✌ Donateur 2018
  • Level Buster
  • *
  • Messages: 2526
  • Le JR's est Immortel
    • Voir le profil
    • Le JR's
[WIP] DMD clock by F4brice
« Réponse #126 le: Mercredi 01 Février 2017, 22:49:23 pm »
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.


Recherche Bornes: Space  Invader/ Rolling Thunder/Dragon's Lair/Kung Fu Master et Karateka Champ et Lethal Enforcer.

Hors ligne spectroman

  • alias Tondu
  • Beta Testeur
  • *
  • Messages: 2052
    • Voir le profil
[WIP] DMD clock by F4brice
« Réponse #127 le: Jeudi 02 Février 2017, 09:06:47 am »
Bravo, trop fort f4brice ^-^

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