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
2xUART en mode PPS ?
Il n'y a pas d'erreur, le cast parfait n'existe pas à mon avis.
Tu as bien un debugger, affiche les valeurs de l1 l2 l3 SP1BRG ci-dessous juste après leur calcul.
Tu as bien un debugger, affiche les valeurs de l1 l2 l3 SP1BRG ci-dessous juste après leur calcul.
Code : Tout sélectionner
void Uart1_Init(unsigned long baudrate)
{
unsigned long l1 = 64000000/4/baudrate-1;
unsigned long l2 = 64000000UL/4/baudrate-1;
unsigned long l3 = (unsigned long)64000000/4/baudrate-1;
BAUD1CON = 0x08; // uart, brg16=1
SP1BRG = 64000000/4/baudrate-1; // uart, speed
TX1STA = 0x24; // uart, tx on, brgh=1
RC1STA = 0x90; // uart on, rx on
}
2xUART en mode PPS ?
2xUART en mode PPS ?
64000000 c'est 0x3D09000
il travaille par défaut en 16 bits, donc il a pris 0x9000, et c'est 4*9216.
S'il est pas capable de voir que 64000000 rentre pas dans 16 bits, il faut consulter ...
Tout ça doit dépendre du réglage du compilateur, tu as dû avoir un warning, il ne faut jamais les négliger.
essaie ces 2 trucs
64000000UL/4/baudrate-1;
(unsigned long)64000000/4/baudrate-1;
il travaille par défaut en 16 bits, donc il a pris 0x9000, et c'est 4*9216.
S'il est pas capable de voir que 64000000 rentre pas dans 16 bits, il faut consulter ...
Tout ça doit dépendre du réglage du compilateur, tu as dû avoir un warning, il ne faut jamais les négliger.
essaie ces 2 trucs
64000000UL/4/baudrate-1;
(unsigned long)64000000/4/baudrate-1;
2xUART en mode PPS ?
-
Jérémy
Administrateur du site- Messages : 2727
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Re,
Aucun warning, j'ai du faire une fausse manip lors de débug car maintenant ca calcul presque bien si je fais :
test = ((64000000)>>2)/9600;
La valeur de test est bien 1666 .
Par contre si je fais ;:
void Uart1_Init(unsigned long baudrate)
{
test = ((64000000)>>2)/baudrate;
}
LA valeur de test est de : 4294967295 ???
SI je fais :
C'est bon j'ai bien 1666 .
J'en déduis que la valeur baudrate n'est pas bonne . je n'arrive à localiser cette variable locale dans le debugger
Aucun warning, j'ai du faire une fausse manip lors de débug car maintenant ca calcul presque bien si je fais :
test = ((64000000)>>2)/9600;
La valeur de test est bien 1666 .
Par contre si je fais ;:
void Uart1_Init(unsigned long baudrate)
{
test = ((64000000)>>2)/baudrate;
}
LA valeur de test est de : 4294967295 ???
SI je fais :
Code : Tout sélectionner
void Uart1_Init(unsigned long baudrate)
{
baudrate = 9600;
test = 64000000/4/baudrate;
}
C'est bon j'ai bien 1666 .
J'en déduis que la valeur baudrate n'est pas bonne . je n'arrive à localiser cette variable locale dans le debugger
2xUART en mode PPS ?
-
Jérémy
Administrateur du site- Messages : 2727
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Avec ca :
test2 reste à zero ????
Code : Tout sélectionner
void Uart1_Init( unsigned long baudrate)
{
test2 = baudrate;
test = 64000000/4/baudrate;
}
test2 reste à zero ????
2xUART en mode PPS ?
baudrate n'est pas le problème c'est un paramètre de la fonction.
Le problème est expliqué plus haut. En théorie il faut indiquer que la constante est de type long, en ajoutant un suffixe, ou en castant. Je suis surpris que tu n'aie pas de warning, car le compilo a certainement rouspété avant de tronquer une constante arbitrairement.
Pour la seconde fois (seconde car y aura pas de troisième :) ) essaye :
SPB1RG = 64000000UL/4/baudrate-1;
SPB1RG = (unsigned long)64000000/4/baudrate-1;
Le problème est expliqué plus haut. En théorie il faut indiquer que la constante est de type long, en ajoutant un suffixe, ou en castant. Je suis surpris que tu n'aie pas de warning, car le compilo a certainement rouspété avant de tronquer une constante arbitrairement.
Pour la seconde fois (seconde car y aura pas de troisième :) ) essaye :
SPB1RG = 64000000UL/4/baudrate-1;
SPB1RG = (unsigned long)64000000/4/baudrate-1;
2xUART en mode PPS ?
-
Jérémy
Administrateur du site- Messages : 2727
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Aucun warning je confirme.
Avec
Sp1BRG = 65534 pour les deux calculs !
SP1BRGH = 255 et SP1BRGL = 254
Avec
Code : Tout sélectionner
void Uart1_Init( unsigned long baudrate)
{
SP1BRG = 64000000UL/4/baudrate-1;
SP1BRG = (unsigned long)64000000/4/baudrate-1;
//test = 64000000/4/baudrate;
}
Sp1BRG = 65534 pour les deux calculs !
SP1BRGH = 255 et SP1BRGL = 254
2xUART en mode PPS ?
là je suis paumé, alors allons-y pour ça :
unsigned long fosc = 64000000UL;
SP1BRG = fosc/4/baudrate-1;
ou
unsigned long u = 64000000UL;
u = u/4/baudrate-1;
SP1BRG = u;
Si tu n'as pas un vrai debugger pas à pas, passe à MpLab ...
test2 il est déclaré ou ?
renomme toutes les fonctions Uart1_xxx() en U1_xxx(), idem pour Uart2_xxx()
unsigned long fosc = 64000000UL;
SP1BRG = fosc/4/baudrate-1;
ou
unsigned long u = 64000000UL;
u = u/4/baudrate-1;
SP1BRG = u;
Si tu n'as pas un vrai debugger pas à pas, passe à MpLab ...
test2 il est déclaré ou ?
renomme toutes les fonctions Uart1_xxx() en U1_xxx(), idem pour Uart2_xxx()
2xUART en mode PPS ?
2xUART en mode PPS ?
Identifiers
Identifiers are arbitrary names of any length given to functions, variables, symbolic constants, user-defined data types and labels. All these program elements will be referred to as objects throughout the help (don't get confused with the meaning of object in object-oriented programming).
Case Sensitivity
The mikroC PRO for PIC identifiers aren't case sensitive by default, so that Sum, sum, and suM represent an equivalent identifier. Case sensitivity can be activated or suspended in Output Settings window. Even if case sensitivity is turned off Keywords remain case sensitive and they must be written in lower case.
Identifiers are arbitrary names of any length given to functions, variables, symbolic constants, user-defined data types and labels. All these program elements will be referred to as objects throughout the help (don't get confused with the meaning of object in object-oriented programming).
Case Sensitivity
The mikroC PRO for PIC identifiers aren't case sensitive by default, so that Sum, sum, and suM represent an equivalent identifier. Case sensitivity can be activated or suspended in Output Settings window. Even if case sensitivity is turned off Keywords remain case sensitive and they must be written in lower case.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 117 invités