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 ---
- 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 ---
Modérateur : Jérémy
SPI Hardware sur PIC18F27K42
- paulfjujo
Expert- Messages : 2737
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
J'ouvre ici un nouveau post consacré au 18F27K42 (serie 18Fxxk42 )
et au SPI , specifique aussi par rapport au classique
( 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
j'ai aussi 20cm de fillasse pour les connections !
J'ouvre ici un nouveau post consacré au 18F27K42 (serie 18Fxxk42 )
et au SPI , specifique aussi par rapport au classique
![siffleur :sifflotte:](./images/smilies/icon_sifflotte.gif)
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 oops](./images/smilies/CASJ1XDY.png)
SPI Hardware sur PIC18F27K42
- paulfjujo
Expert- Messages : 2737
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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
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é ...
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é ...
Qui est en ligne
Utilisateurs parcourant ce forum : Google [Bot] et 8 invités