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
PIC16F84A + XC8 = écrire sur le port série
Bonjour tout le monde,
Je continue ma découverte du monde PIC :)
Je cherche un exemple simple qui tourne en C façon XC8 pour envoyer des messages vers un port série d'un PC (câble FTDI).
Autant on en trouve partout en assembleur, autant cela semble rare en C.
Si vous avez un lien, je vous en remercie !
Bruno
Je continue ma découverte du monde PIC :)
Je cherche un exemple simple qui tourne en C façon XC8 pour envoyer des messages vers un port série d'un PC (câble FTDI).
Autant on en trouve partout en assembleur, autant cela semble rare en C.
Si vous avez un lien, je vous en remercie !
Bruno
Modifié en dernier par gwion le mer. 14 déc. 2022 16:38, modifié 1 fois.
PIC16F + XC8 = écrire sur le port série
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
il faudrait definir sur quel type de MCU ?
exemple avec 16F1619
Apparament le Zip complet 1,5MO ne peut pas etre chargé ..trop gros ?
j'ai donc mis uniquement le main et les fichier generés par MCC
tu peux virer la partie qui ne t'interesse pas..
contrairement à MikroC, XC8 demande beaucoup plus de ressources eu tout un tas de fichiers
surtout si on utilise MCC !
J'ai beaucoup d'exempes sur maPageweb ,mais principalement en MikroC ..
un exemple MikroC est aisement adaptable en XC8 ( sans utiliser MCC)
sinon l'essentiel
pour PIC16F1827.
il faudrait definir sur quel type de MCU ?
exemple avec 16F1619
Apparament le Zip complet 1,5MO ne peut pas etre chargé ..trop gros ?
j'ai donc mis uniquement le main et les fichier generés par MCC
tu peux virer la partie qui ne t'interesse pas..
contrairement à MikroC, XC8 demande beaucoup plus de ressources eu tout un tas de fichiers
surtout si on utilise MCC !
J'ai beaucoup d'exempes sur maPageweb ,mais principalement en MikroC ..
un exemple MikroC est aisement adaptable en XC8 ( sans utiliser MCC)
sinon l'essentiel
Code : Tout sélectionner
#include <xc.h>
#include <stdio.h>
#include "usart.h"
void
putch(unsigned char byte)
{
/* output one byte */
while(!TXIF) /* set when register is empty */
continue;
TXREG = byte;
}
unsigned char
getch() {
/* retrieve one byte */
while(!RCIF) /* set when register is not empty */
continue;
return RCREG;
}
unsigned char
getche(void)
{
unsigned char c;
putch(c = getch());
return c;
}
pour PIC16F1827.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
PIC16F84A + XC8 = écrire sur le port série
PIC16F84A + XC8 = écrire sur le port série
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
dans ce cas, il faut un UART SOFTWARE
avec un peu d'assembleur !
exemple à adapter ( difference d'appelation MikroC et XC8 pour les registres du PIC)
nota MikroC propose une librairie SoftUart !
avec un peu d'assembleur !
exemple à adapter ( difference d'appelation MikroC et XC8 pour les registres du PIC)
Code : Tout sélectionner
//declarations
// la Pin de sortie est definie dans le main program
sbit TX3_Pin at LATA.B2;
sbit TX3_Pin_Direction at TRISA.B2;
unsigned char c3 absolute 0x0020;
unsigned char RS_Count;
unsigned char RS_tmp;
unsigned char RS_Delay
void UART3_Write_CText(const char *txt3)
{
while (*txt3)
{
UART3_Write(*txt3++);
// Delay_us(500);
}
}
void UART3_Write_Text(unsigned char *T) // at adress 0x002 taille 42 bytes
{
while(*(T)>0) // verif sur VBRAY en mode ASCII
{
UART3_Write(*(T++)); // c3 variable globale
}
}
void CRLF3()
{
UART3_Write(CR);
UART3_Write(LF);
}
void UART3_Write(unsigned char cc) // 16MHz 19200 bauds
{
c3=~cc; // complement du caractere !
// avec TX3_PIN => RA2
_asm{
RSsend2:
movlw 8 ; 8 bits
movwf _RS_Count ; compteur de bits envoyés
bcf LATA,2 ; bit de start
call RSdelai2 ; tempo
// rrf _c1,f ; on recupere dans C le bit à envoyer
// syntaxe à revoir en fonction du PIC utilisé rrcf avec 18F87J50
L00:
rrcf _c3,1 ; on recupere dans C le bit à envoyer
btfsc STATUS,C ; bit à envoyer = 1 ?
goto L10 ; oui
bsf LATA,2 ; sinon 0
goto L20 ; on continue sur la tempo
L10:
bcf LATA,2 ; bit à 1
L20:
call RSdelai2 ; tempo
decfsz _RS_Count,1 ; on decremente le compteur de bits envoyés
goto L00 ; on continue sur les bits suivants
bsf LATA,2 ; bit de stop
call RSdelai2 ; tempo pour bit de stop
call RSdelai2 ; tempo pour bit de stop
goto LA1
RSdelai2: // 52µS / bit at 19200 bauds
MOVLW 28 ;
MOVWF _RS_tmp ;
RS00:
NOP; ; fait parti de la tempo!
NOP;
NOP;
NOP;
// NOP;
DECFSZ _RS_tmp,F ;
GOTO RS00 ;
NOP;
NOP;
NOP;
RETURN ;
LA1: nop;
}
}
void main()
{
....
PORTA = 0b00000011;
ANSELA=0;
ANSELA.ANSA0=1; // analog input on Port A voir page 154
ANSELA.ANSA1=1;
TRISA = 0b00000011 ; // PORTA is RA0,1= analog input RA2=sortie DAC RA3,4,5=Digital output
PORTA=0;
Led_On_RA4_Direction=0;
Led_On_RA4=OFF;
TX3_Pin_Direction=0;
..
c3=0;
RS_Count=0;
RS_tmp=0;
RS_Delay=0;
p1=0;
Step=0;
...
CRLF3();
UART3_Write_CText(" UART3 bit bang 19200 bds Tx sur RA2 --> terminal YAT \r\n");
.... etc
}
nota MikroC propose une librairie SoftUart !
PIC16F84A + XC8 = écrire sur le port série
PIC16F84A + XC8 = écrire sur le port série
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
gwion a écrit :Ah c'est vraiment nickel, merci Paul
J'avais vu que MikroC est plus complet que XC8, et c'était mon choix de départ. Mais finalement il m'a semblé que XC8 se marie mieux avec MPLAB X et PROTEUS. Mais je me trompe peut-être ? Si c'est le cas il n'est pas trop tard pour changer
pour un 16F84, 16F628 ou 16F88
MikroC est ideal et Gratuit ( si code < 2Ko)
et aussi bien plus simple que XC8 , et prend nettement moins de place ...
par contre pour pouvoir utiliser les PIC derniere generation il faut passer par XC8
car MikroC ne les gere plus ..meme avec la (derniere) version Pro 7.60 payante !
il faut Necto Studio .. qui est aussi une usine à gaz ! (payante !)
C'est pourquoi je suis passé moi aussi à XC8 pour le 18F27K42 ou 18F47Q10 ..
PIC16F84A + XC8 = écrire sur le port série
Bonjour,
Merci encore pour toutes ces explications Paul.
En attendant de tester MikroC, je tente de porter ton exemple pour XC8. Le moins que je puisse dire est que je ne suis pas très à l'aise, et que je joue un peu à l'apprenti sorcier
J'ai une erreur de compilation sur : asm ("btfsc STATUS , C") ; //bit à envoyer = 1 ?
Est-ce que je peux par exemple remplacer comme dans mon extrait de code ou alors je n'ai rien compris du tout ?
Si c'est bon dans le raisonnement une autre approche serait de supprimer le test et de faire juste : RA2 = STATUSbits.CARRY;
Merci encore pour toutes ces explications Paul.
En attendant de tester MikroC, je tente de porter ton exemple pour XC8. Le moins que je puisse dire est que je ne suis pas très à l'aise, et que je joue un peu à l'apprenti sorcier
J'ai une erreur de compilation sur : asm ("btfsc STATUS , C") ; //bit à envoyer = 1 ?
Est-ce que je peux par exemple remplacer comme dans mon extrait de code ou alors je n'ai rien compris du tout ?
Si c'est bon dans le raisonnement une autre approche serait de supprimer le test et de faire juste : RA2 = STATUSbits.CARRY;
Code : Tout sélectionner
asm("L00:");
asm("rrcf _c3 , 1") ; //on recupere dans C le bit à envoyer
// asm("btfsc STATUS , C") ; //bit à envoyer = 1 ?
if (STATUSbits.CARRY==1) {
RA2 = 1;
}
else {
RA2 = 0;
}
// asm("goto L10") ; //oui
//asm("bsf PORTA , 2") ; //sinon 0
asm("goto L20") ; //on continue sur la tempo
PIC16F84A + XC8 = écrire sur le port série
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
ou
"btfsc STATUS , 0"
le C est le bit 0
je refais actuellement ce projet XC8 16F84
il me faut ressortir mon programmateur POK508 + DB9/USB TSU-9 + ICProgr 105D
et montage sur Carte BlueElektronics Electronics ( avec un filtre 4MHz)
pas encore testé en reel
testé OK ce matin !
UART à 4800bds, car j'ai un filtre ceramique 4MHz sur ma carte
#define _XTAL_FREQ 4000000
soft prevu pour 16MHz 19200 ! ..mais divisé par 4 => 4800bds
test Carry OK nota : MikroC reconnait le Carry C !
__asm(" btfsc STATUS,0 ");
nota led sur RA4 pour verifier que le programme tourne
envoi sur l'uart (RA2) en sequence de '0' à '9' chaque seconde
Avec ce PIC on ne va pas pouvoir en envoyer des tonnes sur l'UART !
on est Rick Rack en RAM..
un 16F88 apporterait déja un confort avec un Uart hardware
ou mieux 16F1847
avant de passer au 18Fxxxxxx
resultat sur terminal
test avec analyser SQA
"btfsc STATUS , 0"
le C est le bit 0
je refais actuellement ce projet XC8 16F84
il me faut ressortir mon programmateur POK508 + DB9/USB TSU-9 + ICProgr 105D
et montage sur Carte BlueElektronics Electronics ( avec un filtre 4MHz)
pas encore testé en reel
testé OK ce matin !
UART à 4800bds, car j'ai un filtre ceramique 4MHz sur ma carte
#define _XTAL_FREQ 4000000
soft prevu pour 16MHz 19200 ! ..mais divisé par 4 => 4800bds
test Carry OK nota : MikroC reconnait le Carry C !
__asm(" btfsc STATUS,0 ");
nota led sur RA4 pour verifier que le programme tourne
envoi sur l'uart (RA2) en sequence de '0' à '9' chaque seconde
Avec ce PIC on ne va pas pouvoir en envoyer des tonnes sur l'UART !
on est Rick Rack en RAM..
un 16F88 apporterait déja un confort avec un Uart hardware
ou mieux 16F1847
avant de passer au 18Fxxxxxx
resultat sur terminal
test avec analyser SQA
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
PIC16F84A + XC8 = écrire sur le port série
Bonjour Paul, bonjour tout le monde,
Merci encore pour toutes ces infos.
Ma version portée tourne en simulation
J'ai donc fait une maquette pour vérifier le fonctionnement réel. Le PIC est monté sur une breadboard car je n'ai pas (encore) de platine d'expérimentation. J'ai réussi à le programmer sans aucun souci, mais rien à faire pour le faire tourner. J'ai changé le PIC pour voir : même constat. J'ai vérifié que l'oscillateur fonctionne et j'ai bien un sinus à 4MHz. J'ai également une LED qui doit s'allumer/s'éteindre en appuyant sur un bouton-poussoir : elle ne veut rien savoir non plus
Par contre je trouve du 4MHz qui se balade un peu partout sur les pin's, et je me demande si la breadboard est judicieuse avec un oscillateur à quartz...
Merci encore pour toutes ces infos.
Ma version portée tourne en simulation
J'ai donc fait une maquette pour vérifier le fonctionnement réel. Le PIC est monté sur une breadboard car je n'ai pas (encore) de platine d'expérimentation. J'ai réussi à le programmer sans aucun souci, mais rien à faire pour le faire tourner. J'ai changé le PIC pour voir : même constat. J'ai vérifié que l'oscillateur fonctionne et j'ai bien un sinus à 4MHz. J'ai également une LED qui doit s'allumer/s'éteindre en appuyant sur un bouton-poussoir : elle ne veut rien savoir non plus
Par contre je trouve du 4MHz qui se balade un peu partout sur les pin's, et je me demande si la breadboard est judicieuse avec un oscillateur à quartz...
PIC16F84A + XC8 = écrire sur le port série
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
j'ai un doute sur le zip fourni precedement
voir sur ma page
Package exporté :
la led sur RA4 doit clignoter si le programme tourne..
no probleme avec un quartz sur bread board ..
testé ok jusqu'à meme Q=32Mhz ( avec d'autres PIC !)
il y a <1,2pF entre 2 lignes verticales breadboard
voir sur ma page
Package exporté :
la led sur RA4 doit clignoter si le programme tourne..
no probleme avec un quartz sur bread board ..
testé ok jusqu'à meme Q=32Mhz ( avec d'autres PIC !)
il y a <1,2pF entre 2 lignes verticales breadboard
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par paulfjujo le sam. 17 déc. 2022 09:12, modifié 3 fois.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 53 invités