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
<RESOLU>UART2 et UART1 en interrupt avec 18F47K42
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour à tous,
j'utilise un PIC 18F47K42 en DIP 40
pour tester l' UART2 ET l'UART1 en mode interrupt
le PIC est en mode oscillateur interne FOSC 64MHz
Hardware:
UART1 en RC6 TX et RC7 RX => cordon prolific TTL/USB terminal YAT
UART2 en RB5 TX et RB2 RX => cordon prolific TTL/USB terminal YAT
1 led en RA4 ave cpull up de 2,7K
et 1R de 10K en pullup sur pin 1 MCLR
2 pins -> alim VDD +4.5V
2 pins -> to Gnd
et l'ICSP connecté au Pickit4
MPLABX IDE pour charger le programme dans le PIC
et je suis confronté à une phenomene bizarre :
Test avec 2 terminaux , un sur COM25 et un sur COM26 ( liaisons UARTx via cordon prolific au PC)
l'ecriture (envoi) de chaque UART est aiguillé sur un terminal
les 2 ecrans terminaux affichent bien les envois de chaque UART.... OK
MAIS dans le sens Envoi depuis un terminal
com UART2 ... on observe l'echo terminal (ecriture en bleu) et le retour de la reception
via le message recu 2 : xxxxxxxx <- message envoyé ..OK
mais là ou ça ce corse ( j'ai rien contre l'ile de beauté !)
c'est lorsque j'envoie un message du terminal (UART1)
j'ai l'echo du message envoyé (en bleu)
MAIS c'est sur UART2 que le message apparait en retour !
et j'ai sur UART1 recu 1 : ( RIEN !, pas de message)
je suis pourtant bien rentré dans l'interruption RX UART1 !
pourquoi UART2 me renvoi ce que UART1 devrait renvoyer ?
la capture des 2 ecrans montre le probleme ( avec TimeStamp activé pour le synchronisme des evenements)
mon projet mikroC
Ce PIC donne pas mal de fil à retordre ( rien ne vaut le 18F46K22 qui est declaré obsoltète)
tout comme ma Megane 100ch ... et on me propose à la place une Zoe de 135ch Ecologique ????? à 30 000€ et 245kms d'autonomie en hiver
pour l'instant je fais de la resistance ...mais avec un vignette Crit'Air type 4 ???
2 Zoe (+ 1 bout de centrale nucleaire) = 1 Mustang ?
j'utilise un PIC 18F47K42 en DIP 40
pour tester l' UART2 ET l'UART1 en mode interrupt
le PIC est en mode oscillateur interne FOSC 64MHz
Hardware:
UART1 en RC6 TX et RC7 RX => cordon prolific TTL/USB terminal YAT
UART2 en RB5 TX et RB2 RX => cordon prolific TTL/USB terminal YAT
1 led en RA4 ave cpull up de 2,7K
et 1R de 10K en pullup sur pin 1 MCLR
2 pins -> alim VDD +4.5V
2 pins -> to Gnd
et l'ICSP connecté au Pickit4
MPLABX IDE pour charger le programme dans le PIC
et je suis confronté à une phenomene bizarre :
Test avec 2 terminaux , un sur COM25 et un sur COM26 ( liaisons UARTx via cordon prolific au PC)
l'ecriture (envoi) de chaque UART est aiguillé sur un terminal
les 2 ecrans terminaux affichent bien les envois de chaque UART.... OK
MAIS dans le sens Envoi depuis un terminal
com UART2 ... on observe l'echo terminal (ecriture en bleu) et le retour de la reception
via le message recu 2 : xxxxxxxx <- message envoyé ..OK
mais là ou ça ce corse ( j'ai rien contre l'ile de beauté !)
c'est lorsque j'envoie un message du terminal (UART1)
j'ai l'echo du message envoyé (en bleu)
MAIS c'est sur UART2 que le message apparait en retour !
et j'ai sur UART1 recu 1 : ( RIEN !, pas de message)
je suis pourtant bien rentré dans l'interruption RX UART1 !
pourquoi UART2 me renvoi ce que UART1 devrait renvoyer ?
la capture des 2 ecrans montre le probleme ( avec TimeStamp activé pour le synchronisme des evenements)
mon projet mikroC
Ce PIC donne pas mal de fil à retordre ( rien ne vaut le 18F46K22 qui est declaré obsoltète)
tout comme ma Megane 100ch ... et on me propose à la place une Zoe de 135ch Ecologique ????? à 30 000€ et 245kms d'autonomie en hiver
pour l'instant je fais de la resistance ...mais avec un vignette Crit'Air type 4 ???
2 Zoe (+ 1 bout de centrale nucleaire) = 1 Mustang ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par paulfjujo le mar. 1 sept. 2020 17:15, modifié 2 fois.
UART2 et UART1 en interrupt avec 18F47K42
UART2 et UART1 en interrupt avec 18F47K42
Salut paulfjujo, pspic et a tous.
tu rencontre toujours des trucs. Décidément, l'électronique est très très complexe. D'un composant a un autre rien ne va plus. Je ne serais t'aider désolé.
Pour ce qui est des voitures électriques, je suis d'accord avec ta résonance.
Voiture électrique = moins polluante. Mais avec le nucléaire en amont je n'en suis pas si sûr.
@++
tu rencontre toujours des trucs. Décidément, l'électronique est très très complexe. D'un composant a un autre rien ne va plus. Je ne serais t'aider désolé.
Pour ce qui est des voitures électriques, je suis d'accord avec ta résonance.
Voiture électrique = moins polluante. Mais avec le nucléaire en amont je n'en suis pas si sûr.
@++
UART2 et UART1 en interrupt avec 18F47K42
UART2 et UART1 en interrupt avec 18F47K42
Bonjour à tous,
j'ai fait quelques essais avec un 18F27K42 et MpLabX.
avec MVECEN = 0 et IPEN = 0, on est compatible 16F, une seule ISR, relogeable
avec MVECEN = 0 et IPEN = 1, on est compatible 18F standard, 2 ISR high et low priority, relogeables.
avec MVECEN = 1, on a une table relogeable de 81 vecteurs, et chaque type d'interruption a sa propre ISR, et sa priorité high ou low.
En testant les 2 ports série, pas de problème rencontré en compatibilité 16F, et 18F high priority.
J'ai essayé de passer l'int série en low priority avec IPEN à 1, mais elle ne répond pas.
Autre problème, si rien n'est connecté sur l'uart, il y a parfois des tas de réceptions parasites, j'ai vu que tu mets des pullups sur les pins série, c'est utile ?
Par contre pas eu le temps de regarder l'I2C.
j'ai fait quelques essais avec un 18F27K42 et MpLabX.
avec MVECEN = 0 et IPEN = 0, on est compatible 16F, une seule ISR, relogeable
avec MVECEN = 0 et IPEN = 1, on est compatible 18F standard, 2 ISR high et low priority, relogeables.
avec MVECEN = 1, on a une table relogeable de 81 vecteurs, et chaque type d'interruption a sa propre ISR, et sa priorité high ou low.
En testant les 2 ports série, pas de problème rencontré en compatibilité 16F, et 18F high priority.
J'ai essayé de passer l'int série en low priority avec IPEN à 1, mais elle ne répond pas.
Autre problème, si rien n'est connecté sur l'uart, il y a parfois des tas de réceptions parasites, j'ai vu que tu mets des pullups sur les pins série, c'est utile ?
Par contre pas eu le temps de regarder l'I2C.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
UART2 et UART1 en interrupt avec 18F47K42
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Bonsoir Satinas,
Merçi pour ton aide,
En fait , je n'ai pas testeé l'UART2 sur le 18F27K42 en DIP28 mais uniquement sur le 18F47K42 en dip 40
Dans ton test , tu renvoies immedatement le caractere reçu sur la sortie TX
L'UART2 repond bien sur IT rx2
le message envoyé est bien stocké dans mon Buffer2
mais c'est l'UART1 qui me pose soucis,
Hors si dans l'IT reception je renvois , comme toi, le caractere reçu c1 ,
via U1TXB=c1 ; je recupere bien mon message envoyé sur le terminal !
mais rien n'est stocké dans mon Buffer1
par contre , je ne vois pas du tout comment fait l'UART2 pour envoyer sur le TX UART2 ce qui vient de RX UART1 ?
gros mystere ..
si j'utilise uniquement l'UART1 , NO problemo !
les 2 interrupts sont vraiment symetriques , au numero de port uart pres.
=======================================================================
Ce matin , TEST de ton programme UART1 RC6 RC7 et UART2 RB1 RB2 avec 18F27K42
Avec ISR et sans buffer de reception
ça ne peut pas suivre un flux contigu de datas ,
surtout à 38400 bds .. je pense que c'est NORMAL
test avec envoi d'un seul caractere:
lettre A envoyé sur chaque terminal
en retour sur les 2 terminaux,
je retrouve la lettre C au lieu de la lettre A => normal ( test avec use_ISR) renvoi c+2 => 'A'+2='C'
je vais tester ensuite , avec buffer de reception .... à suivre
Merçi pour ton aide,
En fait , je n'ai pas testeé l'UART2 sur le 18F27K42 en DIP28 mais uniquement sur le 18F47K42 en dip 40
Dans ton test , tu renvoies immedatement le caractere reçu sur la sortie TX
L'UART2 repond bien sur IT rx2
le message envoyé est bien stocké dans mon Buffer2
mais c'est l'UART1 qui me pose soucis,
Hors si dans l'IT reception je renvois , comme toi, le caractere reçu c1 ,
via U1TXB=c1 ; je recupere bien mon message envoyé sur le terminal !
mais rien n'est stocké dans mon Buffer1
par contre , je ne vois pas du tout comment fait l'UART2 pour envoyer sur le TX UART2 ce qui vient de RX UART1 ?
gros mystere ..
si j'utilise uniquement l'UART1 , NO problemo !
les 2 interrupts sont vraiment symetriques , au numero de port uart pres.
=======================================================================
Ce matin , TEST de ton programme UART1 RC6 RC7 et UART2 RB1 RB2 avec 18F27K42
Avec ISR et sans buffer de reception
ça ne peut pas suivre un flux contigu de datas ,
surtout à 38400 bds .. je pense que c'est NORMAL
test avec envoi d'un seul caractere:
lettre A envoyé sur chaque terminal
en retour sur les 2 terminaux,
je retrouve la lettre C au lieu de la lettre A => normal ( test avec use_ISR) renvoi c+2 => 'A'+2='C'
(11:50:51.837) A
(11:50:51.851) aC111111111111111
(11:50:55.026) A
(11:50:55.066) bC22222
je vais tester ensuite , avec buffer de reception .... à suivre
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
UART2 et UART1 en interrupt avec 18F47K42
Bonjour Paul
Dans mon exemple on a IPEN = 1, donc 2 ISR high et low, et on définit une priorité high/low pour chaque type d'interruption.
Par défaut U1RXIP et U2RXIP sont à 1, les 2 int sont donc en priorité high, et elles exécutent l'ISR high, qui renvoie c+2.
Là ça marche.
J'ai essayé (voir lignes commentées) de mettre U1RXIP et U2RXIP à 0, ce qui met la priorité low aux 2 int uart.
Dans ce cas c'est l'ISR low qui est appelée, et elle renvoie c+3.
MAIS CELA NE MARCHE PAS, le pic ne renvoie plus rien !
J'ai essayé de debugger, mais les breakpoints MpLabX 5.35 marchent très mal, il ne s'arrête pas, quelle plaie ce truc.
Et en version 5.40 plus de full asm, il faudra passer par un programme C et y intégrer de l'asm.
Dans mon exemple on a IPEN = 1, donc 2 ISR high et low, et on définit une priorité high/low pour chaque type d'interruption.
Par défaut U1RXIP et U2RXIP sont à 1, les 2 int sont donc en priorité high, et elles exécutent l'ISR high, qui renvoie c+2.
Là ça marche.
J'ai essayé (voir lignes commentées) de mettre U1RXIP et U2RXIP à 0, ce qui met la priorité low aux 2 int uart.
Dans ce cas c'est l'ISR low qui est appelée, et elle renvoie c+3.
MAIS CELA NE MARCHE PAS, le pic ne renvoie plus rien !
J'ai essayé de debugger, mais les breakpoints MpLabX 5.35 marchent très mal, il ne s'arrête pas, quelle plaie ce truc.
Et en version 5.40 plus de full asm, il faudra passer par un programme C et y intégrer de l'asm.
UART2 et UART1 en interrupt avec 18F47K42
Les int low priority ne marchaient pas parce que j'avais oublié de les activer avec GIEL, donc
Code : Tout sélectionner
INTCON0bits.IPEN = 1; // int priority enabled
INTCON0bits.GIEL = 1; // int low priority enabled
INTCON0bits.GIEH = 1; // int high priority enabled
UART2 et UART1 en interrupt avec 18F47K42
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
Resultats du test 2 uarts avec IT en mode High interrupt
avec buffers de reception
presque OK
presque car j'ai à chaque envoi message sur UART2
un CR qui manque en fin de message Buffer2 (reception UART2)
et un CR qui apparait sur l'autre UART1
extrait du main
A suivre ... la version 18F47K42 !
Resultats du test 2 uarts avec IT en mode High interrupt
avec buffers de reception
presque OK
presque car j'ai à chaque envoi message sur UART2
un CR qui manque en fin de message Buffer2 (reception UART2)
et un CR qui apparait sur l'autre UART1
(19:14:57.894) <LF>
(19:14:58.601) hello, ici COM26
(19:14:58.885)
(19:14:58.885) <LF> UART1 Reçu : hello, ici COM26 <---- OK
(19:14:58.919) <LF> TEST UART1 sur COM26
(19:14:58.919) <LF> TEST UART1 sur COM26
(19:14:59.910) <LF> TEST UART1 sur COM26
(19:15:00.926) <LF> TEST UART1 sur COM26
(19:15:01.932) <LF> <--- interfrence avec envoi sur UART2
(19:15:02.944) <LF> TEST UART1 sur COM26
(19:15:02.975) <LF> TEST UART1 sur COM26
(19:15:03.965) <LF> TEST UART1 sur COM26
(19:15:04.972) <LF> TEST UART1 sur COM26
(19:15:06.006) <LF> TEST UART1 sur COM26
(19:15:06.995) <LF> <--- interfrence avec envoi sur UART2
(19:15:08.010) <LF> TEST UART1 sur COM26
(19:15:08.010) <LF> TEST UART1 sur COM26
(19:15:09.019) <LF> TEST UART1 sur COM26
(19:15:10.033) <LF> TEST UART1 sur COM26
(19:15:11.042) <LF>
(19:15:11.172) hello, ici COM26
(19:15:12.039)
(19:15:12.039) <LF> UART1 Reçu : hello, ici COM26 <---- OK
(19:15:12.085) <LF> TEST UART1 sur COM26
(19:15:12.085) <LF> TEST UART1 sur COM26
(19:15:13.066) <LF> TEST UART1 sur COM26
(19:15:14.076) <LF> TEST UART1 sur COM26
(19:15:15.126) <LF> TEST UART1 sur COM26
(19:15:16.093) <LF>
===========================================================*
* (19:14:54.853) TEST UART2 sur COM25
(19:14:54.867) <LF> TEST UART2 sur COM25
(19:14:55.868) <LF> TEST UART2 sur COM25
(19:14:56.884) <LF> TEST UART2 sur COM25
(19:14:57.887) <LF> TEST UART2 sur COM25
(19:14:58.907) <LF> TEST UART2 sur COM25
(19:14:59.940) <LF> TEST UART2 sur COM25
(19:15:00.926) <LF> TEST UART2 sur COM25
(19:15:01.937) <LF>
(19:15:02.592) Hello, là COM25
(19:15:02.934)
(19:15:02.934) <LF> UART2 Reçu : Hello, là COM25 TEST UART2 sur COM25 <--- manque le CR !
(19:15:02.974) <LF> TEST UART2 sur COM25
(19:15:03.965) <LF> TEST UART2 sur COM25
(19:15:04.977) <LF> TEST UART2 sur COM25
(19:15:05.985) <LF> TEST UART2 sur COM25
(19:15:06.995) <LF>
(19:15:07.184) Hello, là COM25
(19:15:07.993)
(19:15:07.993) <LF> UART2 Reçu : Hello, là COM25 TEST UART2 sur COM25 <--- manque le CR !
(19:15:08.051) <LF> TEST UART2 sur COM25
(19:15:09.023) <LF> TEST UART2 sur COM25
(19:15:10.032) <LF> TEST UART2 sur COM25
(19:15:11.044) <LF> TEST UART2 sur COM25
(19:15:12.060) <LF> TEST UART2 sur COM25
(19:15:13.072) <LF> TEST UART2 sur COM25
(19:15:14.080) <LF> TEST UART2 sur COM25
(19:15:15.090) <LF>
*
extrait du main
Code : Tout sélectionner
while (1)
{
strcpy(Buffer1," TEST UART1 sur COM26 \r\n");
Print1(Buffer1);
strcpy(Buffer2," TEST UART2 sur COM25 \r\n");
Print2(Buffer2);
LATAbits.LATA4 = !LATAbits.LATA4;
RAZ_Buffer1();
RAZ_Buffer2();
__delay_ms(1000);
if ( Flag_Buffer1==1)
{
txt=&TEXTE[0];
strcpy(txt,"\r\n UART1 Reçu : ");
Print1(txt);
Print1(Buffer1);
Flag_Buffer1=0;
CRLF1();
}
if ( Flag_Buffer2==1)
{
txt=&TEXTE[0];
strcpy(txt,"\r\n UART2 Reçu : ");
Print2(txt);
Print2(Buffer2);
Flag_Buffer2=0;
CRLF2();
}
}
A suivre ... la version 18F47K42 !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Qui est en ligne
Utilisateurs parcourant ce forum : paulfjujo et 118 invités