Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
interface SPI avec un afficheur LED SURE3208
#1
Utilisation d'un dispositif d'affichage LED SURE3208 (32 X 256 Leds) controlé par un circuit HT1632C interfacé en SPI. J'y met actuellement une touche finale:
- j'ai commandé un convertisseur de niveau pour finaliser mon projet: la logique du PI est en 3,3 V , le Sure3208 fonctionne en 5V (ce qui pose problème si je lis la mémoire du dispositif d'affichage).
- Je dois contrôler l'intensité lumineuse des led en fonction de la luminosité ambiante; j'ai découvert le "Convertisseur de lumiére en fréquence TSL235R SFE" qui me permetterai de mesurer l'intensité lumineuse ambiante.

Mais:
Finalement, j'ai rencontré quelques pb avec le TSL235R : il fonctionne trop bien! la fréquence est trop élevée en pleine lumière et dépasse les capacités du Raspberrypi; pas grave, je vais me rabattre sur quelque chose de plus classique.
Je me passe également du convertisseur de niveau; je ne fais qu'envoyer une commande au HT1632C et ne reçois à priori aucun signal en 5v.
Vu la simplicité de l'interface entre le PI (SPI), j'utilise finalement uniquement les bibliothèques linux standard linux/spi/spidev et sys/ioctl ; je me passe des bibliothèques bcm2835 et wiringpi;

(extrait du code C++)

[ins]void
RASPI_SPI::init_spi() {

fd = open(string("/dev/spidev0.0").c_str(), O_RDWR);
if (fd<0) {
throw SPIException("Ouverture /dev/spidev0.0 impossible" );
}

if (ioctl(fd, SPI_IOC_WR_MODE, &mode)<0) {
throw SPIException("SPI_IOC_WR_MODE");
}

if(ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bitsPerWord) < 0) {
throw SPIException("SPI_IOC_WR_BITS_PER_WORD");
}

if(ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bitsPerWord) < 0) {
throw SPIException("SPI_IOC_RD_BITS_PER_WORD");
}

if(ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed) < 0) {
throw SPIException("SPI_IOC_WR_MAX_SPEED_HZ");
}

if(ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed) < 0) {
throw SPIException("SPI_IOC_RD_MAX_SPEED_HZ");
}
}[/ins]

et pour écrire une commande via le SPI
[ins]
void
RASPI_SPI::Write(unsigned char *data, int lg) {
if (write(fd, data, lg) < 1) {
throw SPIException("Write");
}
}
[/ins]

Si cela intéresse quelqu'un je publierai l'ensemble du code et le schéma de cablage.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)

A propos de Communauté francophone RPi

Communauté francophone RPi est un forum d'aide et de partage autour du Raspberry Pi et des micro-ordinateurs.