[Programmation] Programmation d'un écran graphic OLED par SPI. Ecrire, afficher sur un écran avec HAL_SPI_TRANSMIT
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Programmation d'un écran graphic OLED par SPI. Ecrire, afficher sur un écran avec HAL_SPI_TRANSMIT



  1. #1
    Lerchercheur

    Programmation d'un écran graphic OLED par SPI. Ecrire, afficher sur un écran avec HAL_SPI_TRANSMIT


    ------

    Bonjour à tous !!



    Je viens demander votre aide après plusieurs recherches et tests sans succès.

    En effet, je travaille sur un projet et une partie de ce dernier nécessite l'utilisation d'un écran OLED.

    Le microcontrôleur utilisé est un STM32F4 et pour le test des différentes fonctions, j'utilise l'équivalent en NUCLEO.

    Mon écran OLED est un 128x64 de Solomon.



    Mon problème actuellement est je n'arrive pas à afficher les informations les l'écran et pourtant tous les configurations ont bien été faites.

    Par contre, j'envoie très bien les commande les commandes au point d'allumer l'écran et le scroler.

    Pour l'envoie des commande, je le fais comme suit :

    Code:
    HAL_GPIO_WritePin(Mas_CS_GPIO_Port, Mas_CS_Pin,GPIO_PIN_RESET);
    	HAL_GPIO_WritePin(SPI1_D_C_GPIO_Port, SPI1_D_C_Pin, GPIO_PIN_RESET);
    	HAL_Delay(100);
    
    	HAL_SPI_Transmit(&hspi1, &WRITE_COMMAND[0], 1, 100);
    Sachant que j'ai crée un tableau de commande et ce qui semble très bien marcher car j'exécute les commandes telles ON/OFF et scroling.



    Pour l'écriture sur l'écran, je le fais comme suit :

    Code HTML:
    HAL_GPIO_WritePin(SPI1_Mas_CS_GPIO_Port, SPI1_Mas_CS_Pin,GPIO_PIN_RESET);
    		HAL_GPIO_WritePin(SPI1_Mas_D_C_GPIO_Port, SPI1_Mas_D_C_Pin, GPIO_PIN_SET);
    		char Message[] = "Hello word";
    		// la fonction strlen permet de calculer la longueur, exprimée en nombre de caractères, de la chaîne de caractères
    		HAL_SPI_Transmit(&hspi1, (uint8_t *)Message, strlen(Message), 1000); //Affichage
    		HAL_Delay(100);
    Pour les scroling qui semble très bien marcher, je le fais comme suit :

    Code HTML:
    // Partial screen horizontal right side scrolling with 1 column shift in every 5 frames
    void SSD1309Z_ScrollPartialRight()
    { 
    	HAL_SPI_Transmit(&hspi1, &SCROLL_COMMAND[0], 1, 1000);  // send 0x26 for Right horizontal scroll
    	HAL_SPI_Transmit(&hspi1, &SCROLL_COMMAND[1], 1, 1000);	// send dummy
    	HAL_SPI_Transmit(&hspi1, &SCROLL_COMMAND[2], 1, 1000);	// Define PAGE4 as start page address
    	HAL_SPI_Transmit(&hspi1, &SCROLL_COMMAND[3], 1, 1000);  // Set time interval between each scroll step as 5 frames
    	HAL_SPI_Transmit(&hspi1, &SCROLL_COMMAND[4], 1, 1000);	// Define PAGES7 as end page address
    	HAL_SPI_Transmit(&hspi1, &SCROLL_COMMAND[5], 1, 1000);	// Dummy byte
    	HAL_SPI_Transmit(&hspi1, &SCROLL_COMMAND[6], 1, 1000);	// Define SEG0 as start column address
    	HAL_SPI_Transmit(&hspi1, &SCROLL_COMMAND[7], 1, 1000);	// Define SEG 127 as end column address
    	HAL_SPI_Transmit(&hspi1, &SCROLL_COMMAND[8], 1, 1000);	// Activate scrolling 
    	
    													// end page address
    	
    }
    S'il vous est-ce qu'il y a des personnes qui pourraient m'apporter leurs aide sur ce sujet ?

    Je vous remercie d'avance et bon dimanche à tous !!

    Je reste bien-sûr disponible pour plus d'informations.

    -----

  2. #2
    umfred

    Re : Programmation d'un écran graphic OLED par SPI. Ecrire, afficher sur un écran avec HAL_SPI_TRAN

    c'est normal que dans un cas tu utilises dans un cas Mas_CS_GPIO_Port et SPI1_D_C_GPIO_Port, et dans l'autre SPI1_Mas_CS_GPIO_Port et SPI1_Mas_D_C_GPIO_Port ?

  3. #3
    Lerchercheur

    Re : Programmation d'un écran graphic OLED par SPI. Ecrire, afficher sur un écran avec HAL_SPI_TRAN

    Bonjour et merci pour ton intervention,

    Je vois très bien ce que tu dis et je l'ai rectifier mais seulement le résultat reste presque identique.

    J'arrive à écrie dans la RAM de l'écran mais je n'arrive pas à afficher exactement ce que j'ai écris. Par exemple lorsque je demande à écrire 0xFF, l'écran prend la couleur jaune pleine et je suis tenté de dire que c'est normal car lorsque j'envoie 0x00, l'écran est tout noir. Là où je ne comprend rien c'est lorsque j'écris une phrase comme "Hello World" et là j'obtient du n'importe quoi sur l'écran et qui commence parfois à scroller.

    J'ai vraiment besoin de comprendre ce qui ne va pas s'il vous plait !!

  4. #4
    paulfjujo

    Re : Programmation d'un écran graphic OLED par SPI. Ecrire, afficher sur un écran avec HAL_SPI_TRAN

    bonjour,


    tu utilises quelle fonte de caractere pour afficher du texte ?

    A priori
    HAL_SPI_Transmit(&hspi1, (uint8_t *)Message, strlen(Message), 1000); //Affichage

    tu envoies directement un caractere ascii ...
    je ne sais pas exactement ce que fait ta fonction , mais
    sur ces ecrans graphiques, il faut passer par l'envoi des lignes de pixels definis par la fonte du caratere à afficher



    code (MikroC 18F26K22) testé sur un OLED SSD1306 128x32
    du genre :

    Code:
    void Write_Char_At(unsigned char X,unsigned char Y, unsigned char C)
    { int i;
    unsigned char ca;
          OLED_SetPos(X,Y);
         if (C==176)     // caractere ° (degréC)  déplacé en codage 124 (124-32=92)
          {
          for(i=0;i<6;i++)   WriteDat(font_regular_6x8[92][i]) ;
          }
          else
          {
            if (C>=32)
            {
             ca=C-32;
             for(i=0;i<6;i++)   WriteDat(font_regular_6x8[ca][i]) ;
           }
         }
    }
    Dernière modification par paulfjujo ; 06/08/2020 à 18h58.

  5. A voir en vidéo sur Futura
  6. #5
    Lerchercheur

    Re : Programmation d'un écran graphic OLED par SPI. Ecrire, afficher sur un écran avec HAL_SPI_TRAN

    Merci beaucoup pour ton intervention qui m'apporte une précieuse explication.

    J'aimerais s'il te plait que que tu approfondisse un peu cette démarche de programmation des écran OLED.

    Moi j'utilise un écran 128x64 dont le contrôleur de l'écran est le SSD1609Z. Je le programme avec un STM32F446 et son application STM32CubeMx.


    Je reste disponible pour les informations complémentaires.

    Cordialement !!

  7. #6
    paulfjujo

    Re : Programmation d'un écran graphic OLED par SPI. Ecrire, afficher sur un écran avec HAL_SPI_TRAN


  8. #7
    ATdevice

    Re : Programmation d'un écran graphic OLED par SPI. Ecrire, afficher sur un écran avec HAL_SPI_TRAN

    Bonjour,

    Contrairement aux écrans alphanumériques (2 lignes de 16 caractères par exemple) auxquels on envoie les caractères directement en ASCII (sur 8 bits), les écrans graphiques ne traitent que les données brutes, donc c'est au programme de les mettre en forme.
    J'au utilisé le SH1106 mais j'imagine que le fonctionnement est le même :
    L'écran est divisé en 8 pages de 128 colonnes (1 pixel de large, 8 pixels de haut). Lorsque vous envoyez une donnée sur 8 bits, cela agit sur les 8 pixels de la colonne active (il me semble que le pixel du haut correspond au LSB et celui du bas au MSB, mais à vérifier), ainsi un '0' éteint le pixel, et '1' l'allume. Si vous envoyez 0xAA, il y aura un pixel sur deux qui sera allumé (0xAA = 0b10101010), si vous envoyez 0x33, 2 pixels ON, 2 pixels OFF, 2 pixels ON et 2 pixels OFF, etc.

    Pour écrire un caractère, il faut utiliser/créer une table de correspondance. Par exemple la taille standard d'un caractère est 7 pixels de haut sur 5 pixels de large (5 colonnes). Par exemple pour écrire '8' il faut envoyer ces 5 données consécutives : 0x6C, 0x92, 0x92, 0x92, 0x6C.

Discussions similaires

  1. écran OLED I2C et arduino nano
    Par guillaume55 dans le forum Électronique
    Réponses: 6
    Dernier message: 23/02/2015, 11h55
  2. Afficher valeur ecran LCD OLED
    Par bilet38 dans le forum Électronique
    Réponses: 15
    Dernier message: 10/06/2012, 19h47
  3. Projet Afficher Image ecran GLCD avec PIC16f88
    Par invitee8461bae dans le forum Électronique
    Réponses: 0
    Dernier message: 23/01/2011, 14h00
  4. afficher la barre des taches avec un programme en plein écran
    Par Brikkhe dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 29/04/2006, 13h05
Découvrez nos comparatifs produits sur l'informatique et les technologies.