Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

SPI Hardware sur PIC18F27K42
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3261
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#1 Message par paulfjujo » mer. 18 nov. 2020 10:00

bonjour,

J'ouvre ici un nouveau post consacré au 18F27K42 (serie 18Fxxk42 )
et au SPI , specifique aussi par rapport au classique
:sifflotte: ( et easy ) 18F26K22
J'ai adapté mon programme de gestion LCD ILLI9341 18F26K22 comme exemple
à développer ici , si il y a des utilisateur de ce PIC costaud .

Le point clé etant UNIQUEMENT la gestion de base du SPI ( protocole de dialogue avec le LCD)
Le code global etant quasiment le meme qu'avec le 18F26K22
à noter que , pour une fois, la lib SPI mikroC serait plus performante qu'avec
MPLABX , si j'en crois le forum Microchip. et les problemes remontés au sujet du (complex) 18F27K42.

il me reste un petit bug à trouver ? ..
petit cra cra se rajoutant sur certains caracteres (visible de pres!)
mais oops j'ai aussi 20cm de fillasse pour les connections !
Aide toi, le ciel ou FantasPic t'aidera

SPI Hardware sur PIC18F27K42
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3261
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » jeu. 30 nov. 2023 16:40

Bonjour ,

je reviens sur ce post , suite à d'autres test sur le SPI1 Hardware du 18F27K42

modif :
suppression du petit cra cra observé sur affichage texte

void DrawText(uint16_t x, uint16_t y, unsigned char * s, uint16_t color)
{
int currx;
int m;
unsigned int k,l;
currx = x;
l=strlen(s);
if (l>= cfont.MaxC) l= cfont.MaxC;
// Print every character in string
for (k = 0; k < l; k++)
{
m= DrawChar(currx, y, *(s+k), color);
// currx=currx + m + 1; <---- was
currx=currx + m;
}
}

================================================

De plus les applications OLED displays n'etaient pas concernées par la LECTURE SPI !

Difficlutés de transcrire mon application MikroC avec 18F45K22 concernant la gestion d'un lecteur de carte RFID RC222
en version MPLAXB XC8 ....
Malgré une sequence d' init idem sur la trame emision SPI MOSI RC5, ( observée via mon analyser logique SQA)
je ne recupere pas les bonnes données en MISO RC4 .. et donc pas de reponse du lecteur RFID.
Apres maintes recherches , et surtout , apres une relecture de la Datasheet 18F27K42 section SPI ...
J'ai finalement constaté que le SPI était par défaut en FULL DUPLEX
=> émission relue sur la reception !


Passage du SPI Full Duplex en SIMPLE TRANSFERT // on emet..puis on ecoute
=> dialogue OK
On revient à l'equivalent du simple MSSP du 18F45K22
.. et comportement OK du lecteur de carte
Version 18F27K42 MPLABX XC8 avec details sur ma page web (a vec code complet).

Je mets néamoins l'essentiel ici:

Init SPI

Code : Tout sélectionner

 #define MFRC522_CS LATBbits.LATB5 
    RC3PPS  =0x1E;      //RC3  (SCK)
    RC5PPS = 0x1F;      //RC5->MOSI SPI1:SDO1; 
    SPI1SDIPPS = 0x14;  //RC4->MISO  SPI1:SDI1;   was 0x14
    SPI1SSPPS = 0x12; //RC2->SS1
    RC2PPS = 0x20; //RC2->SS1    


Code : Tout sélectionner

    CPrint(" Init SPI1  clock 1 Mhz \r\n");
    SPI1CLK = 0x00;     // SPI Clock Source Fosc (64MHz)
    SPI1BAUD = 31;      // SPI Clock = 64MHz / (2*(BAUD+1)) = 1MHz;
    //SPI1BAUD = 15;      // SPI Clock = 64MHz / (2*(BAUD+1)) = 2MHz;
    SPI1TWIDTH = 0x00;  // 8b wide
    SPI1CON1 = 0b11000000;//  SMP=1, CKE=1, CKP=0, FST=0, SS/SDI/SDO act hi
    SPI1CON2 = 0x03;    // SS don't care, TXR=1, RXR=1 (legacy mode)
    SPI1CON0= 0x83;     // En SPI1, MSB, Master, BMODE=1    


Code : Tout sélectionner


char SPI1_Read_Byte 
(void)
{
   char rep=0;
    SPI1TCNTH=0;
    SPI1TCNTL=1;   
    SPI1CON2bits
.TXR=0;
    SPI1CON2bits.RXR=1;
    while (!PIR2bits.SPI1RXIF)// Check for any SPI Receive Interrupts;
    {__asm("NOP");
    }; 
    rep
=SPI1RXB;
  return (rep); // Return data from SPI Receive Buffer Register;
}


void  SPI1_WriteByte(char bb) 
{
    SPI1STATUSbits.CLRBF = 1;   // clearing the RXFIFO and TXFIFO buffers
    SPI1TCNTH = 0;
    SPI1TCNTL = 1;         // One byte transfert counter
    SPI1CON2bits.RXR=0;
    SPI1CON2bits.TXR=1;
    SPI1CON0bits.EN = 1;   // enable SPI1 peripheral
    SPI1TXB =bb;        // write the data into the output buffer
     while (SPI1CON2bits.BUSY)
     { __asm("NOP");
     }; // wait until completed
 }


je voulais utiliser aussi l'OLED CG9A01 , mais le format ROND n'est pas optimum pour cela..
un ecran LCD 2 (ou 4 ) lignes (en SPI!) serait mieux approprié ...
Aide toi, le ciel ou FantasPic t'aidera

SPI Hardware sur PIC18F27K42
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3261
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » dim. 1 févr. 2026 10:07

bonjour,


je reviens sur ce fil pour signaler ce cas libidineux :

Reprise de Tests avec une Application gérant un bus I2C2 RB1 RB2 .. sur RTC, LCD,BMP280, PCF8754, 24LC256 , + UART1 (en XC8 !)
sur laquelle je rajoute un OLED GCA en SPI1 HW sur 18F47K42


Probleme:
AUCUN affichage sur OLED (avec ma version 2024 qui etait OK avec 18F27K42) ..
meme config PIN pour SPI ...

3 jours à chercher coté Soft et tout remettre en cause ..init SPI, ini GCA ..
L'init SPI vue par mon SQA Analyser etant OK ...

alors que j'alimentais le tout en 5V ( 4,85V exactement)
AUCUN EFFET visible sur le LCD ... apres init, allumage de pixels ou rectangle de couleur
le simple fait d'alimenter avec ma batterie LMi-ion 3.7V au lieu de mon alim reglable 5V
(nota : mon alim reglable ne descendant pas en dessous de 4.8V)
..tout devient alors OK !



Probleme RESOLU !
Bon dieu mais c'est bien sur ! comme dirait l'inspecteur Bourrel
...je parle d'un temps (sans X) que les moins de 20 ans ne peuvent pas connaitre ...
c'etait pourant maqué dessus ...comme le Port Salut !
.. dans le commentaire au debut de mon main de 2024 ...

Code : Tout sélectionner

  #define VERSION "2024-0210"
//#define VERSION "2023-1116"
// modif  fontes
//#define VERSION "2023-1114"
// usage OLED CG9A01 en 3,3V ! liaison SP  
I

quel Bourrain je fais ..
bon à ma décharge, à bientot 76ans, j'ai perdu déja pas mal de neurones

J'alimentais à 5V car j'avais deja connecté sur mon proto un LCD4x20 I2C ,
une RTC et un BMP280 sur le bus I2C2 RB1 RB2 ... tout est OK de ce coté
Alim en 5V ,car le LCD 4x20 5V ne marche pas en dessous de 4V !
J'ai rajouté ensuite un OLED GCA9A91 en SPI RC3,RC4,RC5 CS RST CD

Nota : le CGA9A01 n'a pas eu de sequelles..

contre mesure :
* reseter sur alim. en 5V
mais rajouter un regulateur ASM3117 pour un 3,3V local
et driver 5V/3,3V su le bus SPI OLED
* ou faire l'impasse sur le LCD4x20 et rester avec 3,7V.

il me reste juste quelques details à peaufiner.
..l'espace RAM ROM ayant dimminué avec l'usage de tout ce qui concerne l'I2C2.

exemple :
plus assez de place pour afficher une image (Ladybug) stockée en flash
:0:: error: (1347) can't find 0xC34 words (0xc34 withtotal) for psect "text6" in class "CODE" (largest unused contiguous range 0x320)

mon but annexe est de rajouter la gestion FatFs SPI avec un SDC 2Gb
pour etre tranquille .

la situation actuelle
avec i2C2 activé
LCD_20260124_b.jpg


pinout ;
_18F47K42_I2C2_SP1I_UART_PDIP40_pins.jpg


situation soft actuelle
_18F47K42_SPI1.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

SPI Hardware sur PIC18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2905
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » dim. 1 févr. 2026 15:47

Bonjour paulfjujo, et tout le forum,

paulfjujo a écrit :Source du message quel Bourrain je fais ..


:roll: Bon, maintenant nous sommes 3, avec l'âge on s'améliore du côté obscur :sifflotte:

C'est vrai que reprendre un projet laissé dans un coin pendant plusieurs mois demande une remise en forme d'au moins 2 à 3 jours.

Pour afficher tout ça, un petit écran d'une taille de 2.0 aurait été parfait, dommage d'avoir fait ça avec un écran 4 lignes

==> Bonne continuation

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

SPI Hardware sur PIC18F27K42
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3261
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » dim. 1 févr. 2026 18:46

bonsoir,


Temps-x a écrit :.... dommage d'avoir fait ça avec un écran 4 lignes


le LCD 4x20 (en I2C) est installé accessoirement ...uniquement pour tester l' I2C2 HW sur port RB1 et RB2
c'est bien sur l'OLED qui est mon objectif
dont les capacités d'affichage sont bien plus grandes ..
et l'ajout d'une SDCARD... et en conservant la partie I2C2
Aide toi, le ciel ou FantasPic t'aidera

SPI Hardware sur PIC18F27K42
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2905
Enregistré en : juillet 2016
Localisation : Terre

#6 Message par Temps-x » lun. 2 févr. 2026 16:03

Bonsoir,

paulfjujo a écrit :Source du message c'est bien sur l'OLED qui est mon objectif


Tu utilises quoi comme logiciel pour convertir tes images en R5G6B5 (65k couleur) ou R6G6R6 (262K couleur) :?:

Pour mon écran c'est du R5G6B5 (65k couleur), il ne fait pas R6G6R6 (262K couleur)

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

SPI Hardware sur PIC18F27K42
venom
Avatar de l’utilisateur
Expert
Expert
Messages : 1623
Âge : 40
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#7 Message par venom » mar. 3 févr. 2026 00:04

Temps-x a écrit :Tu utilises quoi comme logiciel pour convertir tes images en R5G6B5 (65k couleur) ou R6G6R6 (262K couleur) :?:

Pour mon écran c'est du R5G6B5 (65k couleur), il ne fait pas R6G6R6 (262K couleur)

==> A+


Bonjour Temps-X, paulfjujo, et tout le forum.

Je viens de coder ça sur un coin de table. (j e ne sais pas si ça peut te dépanner) j'ai expérimenter la conversion Image -> RGB565 et RGB565 -> Image ça sort un .bin (je ne sais pas si ce format t'interesse ?)

Ne pas regarder de prêt c'est coder avec les pieds a l'arrache :oops: :lol:







@++
Mon site web
Mon discord : venom#4888

SPI Hardware sur PIC18F27K42
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3261
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#8 Message par paulfjujo » mer. 4 févr. 2026 17:24

Bonsoir


Temps-x a écrit :.... pour convertir tes images en R5G6B5 (65k couleur) ou R6G6R6 (262K couleur) :?:




as -tu un exemple d'image en R6G6R6 (262K couleur) ?


-----------------------------------------------------------------------------------------------
quelques notes à ce sujet :

https://thesolaruniverse.wordpress.com/ ... 2-wroom-32
-------------------------
Coccinella magnifica
https://commons.wikimedia.org/w/index.php?curid=7694675
image originale 2521*1688
-----------------------------
In the photo editor program
step 1: scale and crop until a 240*240 pixel image remains, 72 dpi.
step 2: export as .BMP with 16-bit color depth (“True Color” in Windows). PNG
is supported in the chain as well.
Resulting after all the photo editing was a 173 kB BMP image file (‘ladybug.bmp’)
with dimensions 240*240 and in True Color = R5G6B5, 16-bit color depth (64k colors).

"ladybug.bmp" , dimensions 240*240 en True Color = R5G6B5 ,
16-bit color depth (64k colors). 173 kB
Image convertie en une table compatible avec le format C ,

via l'appli lcd-image-converter

Options de Conversion : taille 16bits .
et ordre des octets dans le Mot : mode ‘Little Endian’
couleurs definies en Word (RGB565)
un fichier nommé "ladybug.c" est crée, en ascii , donc editable avec Notepad++
un pixel est codé par un mot de 16 bits
on a 240x240=56700 pixels x2 => 115200 bytes
Cette image , testée OK avec ESP32
voir ESP32WROOM32_240x240_ST7789_ladybug_external.ino

Du fait que MikroC ne peut pas gerer des Block de FLash > 64Ko,
La Table des datas a été scindée en 2 parties.
donc chaque partie est < 64Ko, la somme des 2 = 56700x2=115200 bytes
Avec le programme initial et le code existant pour gérer les Tests Grafiques : point , ligne ,rectangle ,cercle ..
Il ne reste pas assez de place en flash pour y inserer les 8 fontes de caracteres
et aussi , obligé de limité la 2em partie en rognant les 8 dernieres lignes de pixel
=> partie 1 ....LadyBug1 [] = 0 à 28800 mots => lignes 0 à 119
=> partie 2 ... LadyBug2 [] = 0 à 26880 mots => lignes 220 à 231

-----------------------------------------------------------------------
Autre test
Probleme : transformer une image en BMP 16bits RGB565 ?
PaintShopPro 5 , ou XNView ne le fait pas, connais <16 bits ou > 16 bits
..mais pas 16 bits
Heuresement il y a cet outil :

dispo ICI ...
http://www.pixfonter.net/bitmap-convert ... brary.html
LCD Bitmap Converter for Microchip Library v2.0
BMC4MLA_Setup.exe

Fichier original Airspeed.jpg, crée via Raytracing Moray + Povray (c) PF
Mis à l'echelle 240x240 , puis sauvegardé en BMP classique , via PSP5
Chargement du BMP sur LCD converter
choix du format de convertion : RGB 16 bits 565

Name airspeed_240x240.bmp
Size 172854 byte(s) (240x240px)
Type image/bmp
16bits (2byte/pixel) R5G6B5 RRRRRGGGGGBBBBB
Litle_endian

Convert => Generation d'un fichier compatible Microchip C

les datas sont organisé en lignes de 16 bytes
les couleurs sont representées par 2 bytes et non 1 mot de 16 bits.

1 ligne de data = 8 pixels
il ya 7200 lignes ! soit 7200x8 = 57600 pixels .....( =240x240)

Rappel:
1 ligne de pixel = 240x2=480 bytes
240 lignes = 480*240=> 115200 bytes

Problemos :
ajustements manuels du fichier ...
Diviser le fichier en 2 parties < 64K chacune
Attention : il faut inverser aussi le sens de lecture des datas MSB et LSB !
pour respecter les couleurs !
à croire que le choix (préconisé) Litle_Endian n'est pas le bon !
la premiere partie des datas affiche la partie basse de l'image !
Attention : direction bas-> haut!!
Attention : SetOrientation(2) Portrait\r\n"); ou Paysage (orientation=1) suivant l'image ...
#include "airspeed_565.h"

Au besoin , il faudra eventuellement supprimer quelques lignes d'affichage,
pour recuperer de la place dans la Flash pour la partie programme ..

Modif du programme MikroC pour pouvoir visualiser entierement le * .BMP
Compilation de l'application MikroC conditionnelle avec
#define With_BMP
permettant d'inhiber une grosse partie de code ..et laisser donc de la place pour l'image de 115200 bytes .
#include "airspeed_565.h"
Test Affichage Airspeed ... OK

avec des images en FLASH de 115Ko / 128K
la partie Application du PIC devient trop Rick-Rack !
=> donc il faut une SDCARD ou eeprom 128Kb
NOTA : XC8 gratuit mais bridé dispose moins de place en FLASH que MikroC !!!!


plus de details ICI
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité