La Raspberry Pi pico et ses 10 cores !

J’imagine que vous connaissez déjà le microcontrôleur à 4$ de la fondation RaspberryPi. En effet, un microcontrôleur dual cores cadencé à 133Mhz ça ne passe pas inaperçu.

Dual cores ? Vous êtes sûr ? Regardez bien la datasheet. Le processeur principal est bien constitué de 2 cœurs ARM Cortex-M0 ça c’est certain. Mais en lisant dans le détail on découvre un curieux périphérique nommé PIO state machine (chapitre 3) :

Qui permet d’exécuter des instructions assembleurs stockée dans une mémoire d’instructions spécifique.

2×4 véritables petits cœurs de processeurs qui accèdent directement aux GPIO du micro.

Voila des petits cœurs très intéressant dans le domaine de l’embarqué, surtout pour des application temps réel «dur».

La pico Pi n’est donc pas Dual-core mais 10-cores !

Publié dans Non classé | Marqué avec , , , | Laisser un commentaire

Longan Nano avec le JTAG et openocd

Dans l’article précédent sur le sujet j’utilisai exclusivement le connecteur USB-C de la longan nano pour tout faire : alimenter la carte, communiquer et télécharger le firmware via le dfu.

Ça permet de faire beaucoup de choses, mais il serait intéressant de pouvoir poser des points d’arrêt dans son code pendant le développement au moyen d’une sonde JTAG par exemple. Or la carte possède un header avec les signaux JTAG. C’est le moment de rentabiliser la sonde Sipeed USB-JTag commandée en même temps que la longan.

Le branchement de la sonde sur la longannano est très simple il suffit de brancher les signaux du même nom entre eux avec des câbles dupont femelle:

L’adaptateur jtag de sipeed sipeed-rv-debugger branché sur la longan nano

Tout d’abord, installons et compilons openocd pour le riscv :

$ git clone https://github.com/bukinr/riscv-openocd
$ cd riscv-openocd
$ ./bootstrap
$ ./configure
$ make

Pour la suite de mes tests je me suis inspiré du projet riscv-rust, même si l’objectif premier n’est pas de faire du rust (c’est juste l’objectif second), le projet donne toutes les configurations utiles pour openocd.

$ cd ..
$ git clone https://github.com/riscv-rust/longan-nano
$ cd logan-nano
$ ../riscv-openocd/src/openocd -f sipeed-jtag.cfg -f openocd.cfg &
Open On-Chip Debugger 0.10.0+dev-00924-g03cde8a0b (2021-01-14-21:26)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
adapter speed: 8000 kHz

Info : clock speed 8000 kHz
Error: Can't run cJTAG reset escape sequences: TCK signal is not defined
Error: Can't run cJTAG reset escape sequences: TCK signal is not defined
Error: Can't run cJTAG reset escape sequences: TCK signal is not defined
Info : JTAG tap: riscv.cpu tap/device found: 0x1e200a6d (mfg: 0x536 (Nuclei System Technology Co.,Ltd.), part: 0xe200, ver: 0x1)
Info : JTAG tap: auto0.tap tap/device found: 0x790007a3 (mfg: 0x3d1 (GigaDevice Semiconductor (Beijing)), part: 0x9000, ver: 0x7)
Warn : AUTO auto0.tap - use "jtag newtap auto0 tap -irlen 5 -expected-id 0x790007a3"
Info : datacount=4 progbufsize=2
Info : Examined RISC-V core; found 1 harts
Info :  hart 0: XLEN=32, misa=0x40901105
Info : Listening on port 3333 for gdb connections
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections

Une fois le serveur openocd lancé on peu s’y connecter avec telnet par exemple :

$ telnet localhost 4444
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Info : accepting 'telnet' connection on tcp/4444
Open On-Chip Debugger
> riscv.cpu curstate
halted
> scan_chain
   TapName             Enabled  IdCode     Expected   IrLen IrCap IrMask
-- ------------------- -------- ---------- ---------- ----- ----- ------
 0 riscv.cpu              Y     0x1e200a6d 0x1e200a6d     5 0x01  0x03
 1 auto0.tap              Y     0x790007a3 0x00000000     5 0x01  0x03

Voila ça semble marcher sur l’ordinateur. Mais pour aller plus loin j’ai préféré faire avec vscode.

Pour l’utiliser avec VScode il y a quelques tricks à savoir.

Tout d’abord les dépendances :

sudo apt install libhidapi-dev

Puis le problème de la librairies manquante :

 cd /usr/lib/x86_64-linux-gnu; sudo ln -s libmpfr.so libmpfr.so.6

Et voila, vous devriez pouvoir faire de l’exécution pas à pas de votre programme sur la Longan Nano désormais.

Publié dans électronique, embarqué, informatique, Non classé | Marqué avec , , , , | Laisser un commentaire

Rhaaa les listes en python !

Parfois python laisse dubitatif :

In [1]: alist = [{"pouet": 0, "prout":1},]*12                                                                                                                                                                      

In [2]: alist                                                                                                                                                                                                      
Out[2]: 
[{'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1}]

In [3]: alist[4]["pouet"] = 12                                                                                                                                                                                     

In [4]: alist                                                                                                                                                                                                      
Out[4]: 
[{'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 12, 'prout': 1}]

Donc quand on crée une liste par multiplication, ([1]*12) l’objet n’est pas dupliqué, juste le pointeur vers l’objet.

Cette méthode résout le problème:

In [5]: alist = [{"pouet": 0, "prout":1} for _ in range(12)]                                                                                                                                                       

In [6]: alist                                                                                                                                                                                                      
Out[6]: 
[{'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1}]

In [7]:  alist[4]["pouet"] = 12                                                                                                                                                                                    

In [8]: alist                                                                                                                                                                                                      
Out[8]: 
[{'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 12, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1},
 {'pouet': 0, 'prout': 1}]

Voila c’est tout, mais ça m’a bouffé une heure.

Publié dans programmation | Marqué avec , , , , | 2 commentaires

Réseau de micros de la MaixGo

Après avoir reçu la MaixGo et l’avoir montée, il faudrait commencer à faire quelque chose avec.

Tout d’abord, comme ça fait un an et demi qu’elle traine sur mon étagère, une bonne idée serait de la mettre à jour.

Mise à Jour

Les commandes brutes :

$ git clone https://github.com/sipeed/MaixPy
$ cd MaixPy
$ wget http://dl.cdn.sipeed.com/kendryte-toolchain-ubuntu-amd64-8.2.0-20190409.tar.xz
$ sudo tar -Jxvf kendryte-toolchain-ubuntu-amd64-8.2.0-20190409.tar.xz -C /opt
$ cd projects/hello_world
$ python3 project.py menuconfig
$ python3 project.py build
$ python3 project.py flash -B dan -b 1500000 -p /dev/ttyACM0 -t

6+1 micros

Mais à quoi peuvent bien servir autant de micros sur une même carte électronique ?

À faire de la localisation de source sonore pardi. Pour faire cela, je n’invente rien. Il suffit de reprendre le script proposé par chegewara sur son github (avec quelques suppressions de lignes inutiles dans le cas du MaixGo):

from Maix import MIC_ARRAY as mic
import lcd

lcd.init()
mic.init()

while True:
    imga = mic.get_map()
    b = mic.get_dir(imga)
    a = mic.set_led(b,(0,0,255))
    imgb = imga.resize(240,160)
    imgc = imgb.to_rainbow(1)
    a = lcd.display(imgc)
mic.deinit()

Pour reproduire la manipulation, on se connecte à la carte via le script proposé dans mon intro:

$ python sipeedcom.py 
--- forcing DTR inactive
--- forcing RTS inactive
--- Miniterm on /dev/ttyACM0  115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---

[MAIXPY]Pll0:freq:832000000
[MAIXPY]Pll1:freq:398666666
[MAIXPY]Pll2:freq:45066666
[MAIXPY]cpu:freq:416000000
[MAIXPY]kpu:freq:398666666
[MAIXPY]Flash:0xc8:0x17
open second core...
gc heap=0x802ee440-0x8036e440(524288)
[MaixPy] init end

 __  __              _____  __   __  _____   __     __
|  \/  |     /\     |_   _| \ \ / / |  __ \  \ \   / /
| \  / |    /  \      | |    \ V /  | |__) |  \ \_/ /
| |\/| |   / /\ \     | |     > <   |  ___/    \   /
| |  | |  / ____ \   _| |_   / . \  | |         | |
|_|  |_| /_/    \_\ |_____| /_/ \_\ |_|         |_|

Official Site : https://www.sipeed.com
Wiki          : https://maixpy.sipeed.com

MicroPython v0.5.0-104-gbbd4c9880 on 2020-07-26; Sipeed_M1 with kendryte-k210
Type "help()" for more information.
>>> 

On peut bien sur copier/coller les lignes du script une par une. Mais c’est très pénible, surtout que la moindre erreur de frappe ne peut pas être corrigée.

Non pour se simplifier la vie on peut passer en mode «paste» avec Ctrl+e. un peu comme dans vim, il ne prendra le texte que de manière «brute» sans mise en forme. On termine sa session de collage avec la touche Ctrl+d.

>>> 
paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== from Maix import MIC_ARRAY as mic
=== 
import lcd
=== 

=== 
lcd.init()
=== 
mic.init()
=== 

=== 
while True:
=== 
    imga = mic.get_map()
=== 
    b = mic.get_dir(imga)
=== 
    a = mic.set_led(b,(0,0,255))
=== 
    imgb = imga.resize(240,160)
=== 
    imgc = imgb.to_rainbow(1)
=== 
    a = lcd.display(imgc)
=== 
mic.deinit()
=== 

Microphone Array Arithmetic, Developed by Canaan, Port by Sipeed
True

Ce qui donne ça :

Le programme s’arrête avec un simple Ctrl+C

Microphone Array Arithmetic, Developed by Canaan, Port by Sipeed
True
Traceback (most recent call last):
File "", line 13, in
KeyboardInterrupt:

Publié dans Non classé | Laisser un commentaire

À fond sur la marche arrière !

Pour fêter l’arrêt de la centrale de Fessenheim en Alsace, l’Allemagne met en service une centrale à charbon.

Le tout à peu près au même moment puisque la mise en service de cette centrale à charbon a été faite le 30 mai 2020 et l’arrêt de Fessenheim le 28 juin 2020.

Donc on arrête une centrale qui fait de l’électricité (presque) sans CO2 pour la remplacer par la pire source fossile pour produire de l’électricité : le charbon.

Quel beau modèle écologique allemand ! Mais que fait Greenpeace ?

Publié dans Non classé | Laisser un commentaire

Clavier orthogonal Monster2, le fail !

Suite à mon article sur les claviers orthogonaux et ma bafouille sur LinuxFR, je pensais avoir trouvé LE clavier orthogonal à tarif raisonnable (40€ avec les frais de port) chez LDLC

Sauf que je ne m’étais pas méfié du nom.

Ça m’apprendra à ne pas lire les dimensions avant d’acheter 😉

Il porte bien son nom en effet: C’est un monstre ! Et donc d’un intérêt discutable pour une utilisation «normal».

Dommage, je croyais avoir enfin trouvé un clavier avec les touches alignés.

Publié dans Non classé | Laisser un commentaire

QrOfLife

Mon article de LinuxFR sur la libération des FPGA en 2020 m’ayant fait gagner le livre de C.Delannoy «Programmer en C++ moderne», il me fallait un projet «bac à sable» pour mettre en œuvre un peu de C++.

Le décès de John Conway et mon activité actuelle chez Armadeus Systemm’ont donné un sujet tout trouvé : QrOfLife.

Petit aperçu de QrOfLife qui génère le QrCode du text «QrOfLife» puis le fait évoluer sur le thème du jeux de la vie

Le principe est simple, on prend un texte en argument de la commande. On génère le QrCode correspondant puis on le fait évoluer avec les règles du jeu de la vie.

… application totalement inutile.

Mais à l’image du blinking led project pour les FPGA; Le QrOfLife permet de mettre en pratique tout un tas d’outils pour développer en C++. Il permet également de prendre en mains certaines bibliothèques ainsi que des outils de compilation comme cmake.

Dans un futur plus ou moins proche j’essayerais d’ajouter la génération de GIF animé ainsi que la lecture des QrCode via la camera.

Publié dans Non classé | Laisser un commentaire

Alignez les touches !

Savez vous pourquoi la disposition des touches de votre clavier est toute biscornue ?

Je ne parle pas ici de l’organisation des lettres – il y a beaucoup à dire aussi là dessus – , mais juste de la disposition physique des touches.

Exemple de clavier pris au pif sur le net (ici un clavier apple)

Pourquoi sont-elles disposées en quinconce ?

Le célèbre clavier «clic» d’IBM

Vu l’âge du concept de clavier qui remonte à la fin XIXème début XXème, on pourrait se dire que c’est bien étudié. Qu’on a atteint la perfection niveau optimisation des touches pour le confort de frappes.

Vous noterez que ça n’a rien à voir avec la langue, c’est toujours en quinconce !

Hein, n’est-ce pas ?

Et bien non, cette stupide disposition des touches nous vient des machines à écrire mécaniques. En effet, si on veut garder droite la tige reliant le marteau à la touche, il est nécessaire de décaler les rangées. Si on avait voulu aligner les touches il aurait fallu tordre ces tiges à chaque rangée. Ce qui aurait sans doute été faisable, mais aurait affaibli la mécanique et complexifié la fabrication.

Les touches doivent être décalées à chaque rangée pour garder les tiges droites

Cette disposition, qui était bien commode pour les machines à écrire mécanique, a été gardée pour le passage à l’électrique. Alors qu’il n’y avait aucune raison de rester comme ça. Et l’habitude a été gardé sur les claviers d’ordinateur.

Pourtant, non seulement ça n’est pas ergonomique, mais en plus ça n’est pas optimum pour le placement des touches. On met moins de touches dans une même surface avec un clavier quinconce. Pour les appareils portable c’est une très mauvaise idée…

Tiens c’est marrant, quand il a fallu rajouter un pavé numérique les concepteurs n’ont pas poussé le masochisme jusqu’à les mettre en quinconce 🙂

Malgré ça, il n’existe pas d’ordinateur portable avec un clavier orthogonale (ortholinear). Tous ont gardé cette antique disposition anti-ergonomique et complexe à mettre en œuvre en production …

Est-ce que l’alignement des rangées révolutionnerait les habitudes des utilisateurs ?

Non.

Est-ce que ça implique un surcoût en fabrication ?

Non.

Est-ce qu’on y perd en utilisabilité ?

Non. Au contraire !

Est-ce qu’on y perd en compatibilité ?

Bin non un clavier orthogonale pourrait être exactement identique à un clavier «quinconce» d’un point de vue électronique.

Alors pourquoi on trouve pas de p#*$! de clavier orthogonal sur le marché bordel ?

Il n’est pas tout à fait vrai de dire qu’on n’en trouve pas. Il en existe très peu et très cher. Voici une petite liste :

  • Typematrix: C’est celui que j’utilise personnellement. Il est cher ($110) et un peu fragile. J’ai du en racheter quelques uns pour ne pas tomber en rade. Pour le confort d’utilisation par contre il est bien. Pour la compatibilité je n’ai pas de problème, mais ça n’est pas tout à fait un clavier standard.
  • Thingiverse: Lui l’a bricolé en reprenant les touches d’un clavier standard pour les aligner.
  • Ergodox: celui là est orthogonal en colonnes, mais les lignes ont été changées pour s’adapter aux mains. Cependant on est pas du tout dans le low cost (J’ai acheté le miens plus de 200€) et la compatibilité n’est pas géniale dans la mesure où il faut se coltiner un programme de configuration. Perso j’ai du mal avec certaines touches de fonctions.
  • Plank: Là on n’est plus dans le clavier classique, et il y a une phase d’apprentissage. Mais ça semble intéressant, l’idée est de virer 60% des touches d’un clavier classique pour se concentrer sur l’essentiel et réduire la taille du clavier sans perdre en fonctionnalités.
  • Atomic Keyboard: Je crois qu’il n’est plus possible de le trouver en commande sur le web celui là.

Tous ces exemples sont réservés à une élite (dont moi bien sûr:). Mais pourquoi aucun constructeurs n’osent simplement sortir un clavier classique à 20€ en alignant les touches ?

Il n’y aurait rien à changer. Et je suis convaincu que même l’utilisateur moyen ne serait pas contre. Ça ne changerait pas fondamentalement son expérience.

Et pourtant ça fait des dizaines d’années que tout le monde sait que c’est mieux mais qu’on ne voit toujours rien venir …

[Edit 10 mai 2020]

J’ai peut être trouvé le clavier orthogonal à moins de 40€ avec ce clavier USB pour enfant :

Clavier orthogonal à 34€ chez LDLC : Le Accuratus Monster 2

On le trouve décliné pour vieux et pour handicapés sur le site LDLC pour 34€. Les frais de ports sont un peu élevé par contre, mais ça reste moins cher que amazon.

Publié dans Non classé | Laisser un commentaire

Sos ordi & consoles = Arnaques ?

Le site de vente en ligne nommé Sos Ordi & Consoles vend des pièces détachées de différentes consoles rétro.

J’y ai commandé des connecteurs de manettes super nes à souder le 9 novembre 2019. Et depuis, je n’ai aucune nouvelles … impossible de les appeler puisqu’il n’y a pas de numéro de téléphone. L’adresse donnée sur la page des mentions légales est celle de l’hébergeur 1&1.

Et le mail de contact ne donne évidement aucune réponse …

Pourtant le payement fonctionne puisque j’ai été débité de la facture !

Si quelqu’un a des infos sur ce site ?

[Edit]

Je n’ai toujours pas réussi à contacter quelqu’un, par contre j’ai pu obtenir l’adresse postale via les coordonnées de payement :

4 lieu dit Coulin, 33690 Lavazan

Les mentions légales parle d’un certain Stéphane Bernier pourtant l’adresse semble correspondre à un dénommé Jérome Laurent. Personne qui semble avoir ouvert plusieurs entreprises fermées aujourd’hui.

L’adresse postale semble correspondre également à une entreprise nommée Studio-Sha creation. Une entreprise de création de site internet, mais que les mentions légales situe hors de France (à HongKong).

Faire attention également : le site enregistre votre carte bleue ! J’ai voulu faire une nouvelle simulation d’achat (câble HDMI) et la commande est partie.

[Edit2 (9 décembre 2019)]

À force de râler sur tous les canaux possibles que j’ai pu trouver, il y a eu une modification de ma commande sur mon «compte» disant qu’ils m’envoient la commande … il y a une semaine et demi. Et je n’ai toujours rien reçu.

Et toujours personne pour répondre à leur mail de contact.

[Edit3 (6 janvier 2020)]

Je viens de recevoir les commandes passées. Les connecteurs ainsi que la seconde commande dont j’avais demandé l’annulation et le remboursement.

Mon adresse est écrite à la main avec des ronds sur les i … Et la facture comporte tout un tas de fôtes de participe passé. Bref, visiblement ce site est une coquille vide très mal maintenu par une personne unique.

Trois mois pour être livré (alors que le site annonce fièrement 48h) et toujours personne pour répondre à leur mail de contact.

Publié dans Non classé | Laisser un commentaire

Il est possible d’utiliser libreoffice en ligne de commande pour convertir un dessin en pdf.

$ libreoffice --headless --convert-to pdf mondessin.odp

Pratique pour mettre dans un makefile quand on fait du markdown, sphinx ou latex.

Publié le par admin | Laisser un commentaire