rs-dht-pio/readme_fr.md

24 lines
2 KiB
Markdown
Raw Normal View History

2023-09-09 12:02:14 +00:00
# DHT PIO Rust Library
_[english version](readme.md)_
## Pourquoi ?
Les DHT (22 ou 11) utilisent un protocole 1-Wire, qui n'est pas compatible avec le protocole du même nom de [Dallas Semicondutors](https://en.wikipedia.org/wiki/1-Wire). Le [Raspberry Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/) (comme d'autres microcontrôleurs) ne possède pas de périphérique dédié à ce protocole.
De nombreuses crates existes pour utiliser le DHT via un pin digital, mais après en avoir testée plusieurs, leur fonctionnement n'est pas fiable. Le problème vient de l'implémentation de la [embedded_hal](https://crates.io/crates/embedded-hal) par [rp2040_hal](https://crates.io/crates/rp2040-hal). La manipulation de l'état et de la direction d'une pin, prend trop de temps (j'ai pu mesure entre 2µs et 6µs suivant l'action demandée). Venant, entre autre, de l'impossibilité de mettre une pin en drain ouvert ("open drain"), ce qui nécessite de "simuler" ce comportant.
## Le PIO ❤️
Le chip RP2040 (utilisé pour le Pico), possède un périphérique un peu atypique nommée PIO (Programmable Input/Output), [Chapitre 3 de la DataSheet](https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf). En simplifiant, le principe est de pouvoir faire tourner un petit programme (32 instruction max), qui s'éxécutera de manière indépendante. Il peut manipuler les GPIO et partager des informations avec le programme principal.
Le PIO se programme à l'aide d'un assembleur nommé `pioasm`, il ne comporte que quelques instructions très basiques. Le plus intéressant est que chaque instruction prends (en général), 1 cycle pour s'exécute. De plus il est possible de diviser la clock à laquelle le programme s'éxécute. Dans le notre cas, on disive la clock principale, de 125 MHz, par 125, ce qui nous donne une instruction par microsecondes.
## Exemple
`todo!()`
## Support
### Board
Pour le moment le crates n'a été testé que sur un Raspberry Pico.
### DHT
✅ DHT22
❌ DHT11