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 ---
Bluetooth Electronics et envoi de texte
- Gérard
Expert- Messages : 1661
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
pspic a écrit :Crée la Sub procedure interrupt suivante :Code : Tout sélectionner
'_______________________________________________________________________________
Sub procedure interrupt 'Interruption RCIF
if PIR1.RCIF = 1 then
if (UART1_Data_Ready() <> 0) then
UART1_READ_TEXT(Rec , "OK", 255)
end if
PIR1.RCIF = 0
end if
end sub
La variable Rec récupère la chaine reçue à condition qu'elle soit inférieure à 254 caractères.
Je vais tester ça.
Bluetooth Electronics et envoi de texte
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
[b]Diviser pour mieux regner [/b]
tu devrais d'abord tester avec un terminal ...
pour verifier que tout est correct
le terminal peut en sus, afficher les caracteres non imprimables < à 32 tell que CR ou LF
ou les afficher en hexadecimal
coté android , le codage des carateres est peut etre en UTF8 et non pas en ascii simple
les carateres bizaroides que tu captes sur ton LCD pourrait etre des codes ascii <32
tu devrais d'abord tester avec un terminal ...
pour verifier que tout est correct
le terminal peut en sus, afficher les caracteres non imprimables < à 32 tell que CR ou LF
ou les afficher en hexadecimal
coté android , le codage des carateres est peut etre en UTF8 et non pas en ascii simple
les carateres bizaroides que tu captes sur ton LCD pourrait etre des codes ascii <32
Bluetooth Electronics et envoi de texte
Bonsoir Gérard, paulfjujo, et tout le forum,
Hum... allumer 1 led ou même 10 ça pose pas de problème, parce que il suffit d'envoyer un code spécifique.
Si tu as un analyseur logique (6 euros pièces) tu pourrais voir pourquoi tu reçois pas tes données, ou si reçu pourquoi ils sont pas affichés.
Je pense aussi qu'il faut faire une conversion, à voir avec ton langage de programmation. sinon j'ai des fonctions toutes faite en ASM
Je sais... tu adores l'assembleur mais parfois ça rends bien service, un peu comme le C parfois ça rend un tout petit peu service, j'ai bien dit un tout petit peu... il faut pas en profiter.... Hein...
A+
Hum... allumer 1 led ou même 10 ça pose pas de problème, parce que il suffit d'envoyer un code spécifique.
Si tu as un analyseur logique (6 euros pièces) tu pourrais voir pourquoi tu reçois pas tes données, ou si reçu pourquoi ils sont pas affichés.
Je pense aussi qu'il faut faire une conversion, à voir avec ton langage de programmation. sinon j'ai des fonctions toutes faite en ASM
Je sais... tu adores l'assembleur mais parfois ça rends bien service, un peu comme le C parfois ça rend un tout petit peu service, j'ai bien dit un tout petit peu... il faut pas en profiter.... Hein...
A+
Modifié en dernier par Temps-x le lun. 4 mai 2020 13:06, modifié 2 fois.
Bluetooth Electronics et envoi de texte
- Gérard
Expert- Messages : 1661
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
paulfjujo a écrit :[b]Diviser pour mieux regner [/b]
tu devrais d'abord tester avec un terminal ...
pour verifier que tout est correct
le terminal peut en sus, afficher les caracteres non imprimables < à 32 tell que CR ou LF
ou les afficher en hexadecimal
coté android , le codage des carateres est peut etre en UTF8 et non pas en ascii simple
les carateres bizaroides que tu captes sur ton LCD pourrait etre des codes ascii <32
Aucune idée comment utiliser un terminal, je ne sais pas comment faire.
Comment savoir ce que code Serial bluetooth?
Paul, peux-tu m'expliquer ce que tu as écris en #3:
Code : Tout sélectionner
txt=&Texte[0];
c1 = RCREG;
Bluetooth Electronics et envoi de texte
- Gérard
Expert- Messages : 1661
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Temps-x a écrit :Bonsoir Gérard, paulfjujo, et tout le forum,
Hum... allumer 1 led ou même 10 ça pose pas de problème, parce que il suffit d'envoyer un code spécifique.
Si tu as un analyseur logique (6 euros pièce) tu pourrais voir pourquoi tu reçois pas tes données, ou si reçu pourquoi ils sont pas affichés.
Je pense aussi qu'il faut faire une conversion, à voir avec ton langage de programmation. sinon j'ai des fonctions toutes faite en ASM
Je sais... tu adores l'assembleur mais parfois ça rends bien service, un peu comme le C parfois ça rend un tout petit peu service, j'ai bien dit un tout petit peu... il faut pas en profiter.... Hein...
A+
Les transmissions se font mais des caractères se rajoutent.
J'ai déjà du mal avec le Basic alors l'asm...
C'est quoi tes fonctions?
Bluetooth Electronics et envoi de texte
Re
Avant d'aller plus loin, essai de rajouter 48 décimales sur chaque octets reçu, puis tu l'affiches sur LCD.
C'est du lourd, mais je te le mets quand même, il faut lire un caractère a la fois et l'envoyer sur cette conversion.
Code basic
Code de conversion ASM
Ne panique pas c'est hyper simple, par contre je sais pas comment tu déclares tes variables en basic
A+
Avant d'aller plus loin, essai de rajouter 48 décimales sur chaque octets reçu, puis tu l'affiches sur LCD.
C'est du lourd, mais je te le mets quand même, il faut lire un caractère a la fois et l'envoyer sur cette conversion.
Code basic
Code : Tout sélectionner
Dim chaine as string
Dim lettre as string
for x = 1 to len(chaine)
lettre = Mid$(chaine,x,1)
gosub conversion ' <<=== envoyer sur la convertion asm
gosub affiche_LCD
next x
Code de conversion ASM
Code : Tout sélectionner
;************************************** "convertion" *******************************************
conversion
clrf unité
clrf dizaine
clrf centaine
; "8 bits"
b8_7
btfss res8,7
goto b8_6
movlw D'1' ; 128
addwf centaine,F
movlw D'2' ; 28
addwf dizaine,F
movlw D'8' ; 8
addwf unité,F
b8_6
btfss res8,6
goto b8_5
movlw D'6' ; 64
addwf dizaine,F
movlw D'4' ; 4
addwf unité,F
b8_5
btfss res8,5
goto b8_4
movlw D'3' ; 32
addwf dizaine,F
movlw D'2' ; 2
addwf unité,F
b8_4
btfss res8,4
goto b8_3
movlw D'1' ; 16
addwf dizaine,F
movlw D'6' ; 6
addwf unité,F
b8_3
movlw B'00001111' ; 8, 4, 2, 1
andwf res8,W
addwf unité,F
;-----------------------------------------------------------------------------------------------
movlw D'3' ; 3 variables à traiter
movwf loop4
lfsr FSR0,unité-1 ; pointer à l'adresse de la variable "unité-1"
assembler
incf FSR0L,F ; variable suivante
movf INDF0,W ; récupérer la valeur dans W
movwf tmps ; transmettre dans la variable "tmps"
incf FSR0L,F ; variable suivante
movf INDF0,W ; récupérer la valeur dans W
movwf temps ; transmettre dans la variable "temps"
;***********************************************************************************************
tr0
movf tmps,W
sublw D'10' ; retir 10 de W
btfsc STATUS,Z ;
goto tr1 ;
btfss STATUS,C ;
goto tr1 ;
goto tr2 ;
tr1
movlw D'10' ;
subwf tmps,F ;
incf temps,F ;
bra tr0
;***********************************************************************************************
tr2
movf temps,W
movwf INDF0 ; nouvelle valeur à cette adresse
decf FSR0L,F
movf tmps,W
movwf INDF0 ; nouvelle valeur à cette adresse
movlw D'48' ; convertir en format ASCII
addwf INDF0,F
decfsz loop4,F ; variable suivante
goto assembler
return
Ne panique pas c'est hyper simple, par contre je sais pas comment tu déclares tes variables en basic
A+
Modifié en dernier par Temps-x le dim. 3 mai 2020 22:27, modifié 5 fois.
Bluetooth Electronics et envoi de texte
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
char *txt; // un pointeursur caractere
char TEXTE[255]; // une table pouvant contenir 255 chars ou un string de 254 chars + zero
txt=&TEXTE[0]; // init du pointeur sur le debut de la table
*(txt)='A'; // range le caractere A dans le debut de table
les pointeurs amenent une facilité d'ecriture ou lecture, pour se deplacer dans une table
exemple d'usage d'un pointeur p1 , pointe sur le buffer de reecpetion UART ( en mode interruption)
pour reconnaitre une commande envoyée en bluetooth par une appli android (appinventor2)
c1=RCREG; // RCREG est le registre de reception de l'UART Hardware
permet d'etre sur que le buffer hardware de l'uart est vide
et que le drapeau RCIF est mis à zero ( par le bias de cette lecture)
vu qu'on ne peut pas forcer soi meme ce bit RCIF
RCIF est le bit qui signale une interruption RX UART ...
un terminal se connecte en lieu et place de ton module bluetooh via un cordon prolific TTL/USB
j'ai maintenant adopté YAT plutot que les autres ..
char TEXTE[255]; // une table pouvant contenir 255 chars ou un string de 254 chars + zero
txt=&TEXTE[0]; // init du pointeur sur le debut de la table
*(txt)='A'; // range le caractere A dans le debut de table
les pointeurs amenent une facilité d'ecriture ou lecture, pour se deplacer dans une table
exemple d'usage d'un pointeur p1 , pointe sur le buffer de reecpetion UART ( en mode interruption)
pour reconnaitre une commande envoyée en bluetooth par une appli android (appinventor2)
Code : Tout sélectionner
//speed=10<CR>
if((*(p1)=='S') && (*(p1+1)=='p') && (*(p1+2)=='e')&& (*(p1+3)=='e')&& (*(p1+4)=='d') && (*(p1+5)=='='))
{
// UART1_Write_CText(" Cde=");
UART1_Write_Text(Buffer1); TABUL;
UART1_Write_CText(" Old speed = ");
WordToStr(Speed,CRam1);
UART1_Write_Text(CRam1); TABUL;
l=isdigit(*(p1+6))+ isdigit(*(p1+7));
k=(*(p1+6)-48) *10+ *(p1+7)-48;
if ((l==2) && (k>=4) && (k<99))
{
Speed=k;
EEPROM_Write(0x00A6, (k/10)+48);
Delay_ms(25);
EEPROM_Write(0x00A7, (k%10)+48);
Delay_ms(25);
UART1_Write_CText(" New = ");
Read_Msg_Eeprom(0x00A0,CRam1) ;
UART1_Write_Text(CRam1);
CRLF1();
}
else
UART1_Write_CText(" BAD Speed value! must be between 05 and 98\r\n");
p1=0;
}
c1=RCREG; // RCREG est le registre de reception de l'UART Hardware
permet d'etre sur que le buffer hardware de l'uart est vide
et que le drapeau RCIF est mis à zero ( par le bias de cette lecture)
vu qu'on ne peut pas forcer soi meme ce bit RCIF
RCIF est le bit qui signale une interruption RX UART ...
un terminal se connecte en lieu et place de ton module bluetooh via un cordon prolific TTL/USB
j'ai maintenant adopté YAT plutot que les autres ..
Bluetooth Electronics et envoi de texte
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour à tous,
risque de confusion ici , 48 decimales ,ça peut faire un flottant tres long
...essai de rajouter 48 en décimal sur chaque octet reçu,
En principe, la reception se fait déja en ascii
pourquoi refaire une conversion ?
le plus simple pour resoudre ce probleme ( sans analyseur logique, qui est la meilleure solution ) reste le terminal !
terminal YAT , en mode test avec liaisons Tx-Rx reliés ( recoit donc ce qui est emis)
TX en format String ( caracteres) en bleu
RX en format Hexadecimal en violet
Temps-x a écrit :Re
Avant d'aller plus loin, essai de rajouter 48 décimales sur chaque octets reçu, puis tu l'affiches sur LCD.
C'est du lourd, mais je te le mets quand même, il faut lire un caractère a la fois et l'envoyer sur cette conversion.
risque de confusion ici , 48 decimales ,ça peut faire un flottant tres long
...essai de rajouter 48 en décimal sur chaque octet reçu,
En principe, la reception se fait déja en ascii
pourquoi refaire une conversion ?
le plus simple pour resoudre ce probleme ( sans analyseur logique, qui est la meilleure solution ) reste le terminal !
terminal YAT , en mode test avec liaisons Tx-Rx reliés ( recoit donc ce qui est emis)
TX en format String ( caracteres) en bleu
RX en format Hexadecimal en violet
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Bluetooth Electronics et envoi de texte
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
paulfjujo a écrit :bonjour à tous,Temps-x a écrit :Re
Avant d'aller plus loin, essai de rajouter 48 décimales sur chaque octets reçu, puis tu l'affiches sur LCD.
C'est du lourd, mais je te le mets quand même, il faut lire un caractère a la fois et l'envoyer sur cette conversion.
risque de confusion ici , 48 decimales ,ça peut faire un flottant tres long
...essai de rajouter 48 en décimal sur chaque octet reçu,
En principe, la reception se fait déja en ascii
pourquoi refaire une conversion ?
le plus simple pour resoudre ce probleme ( sans analyseur logique, qui est la meilleure solution ) reste le terminal !
terminal YAT , en mode test avec liaisons Tx-Rx reliés ( recoit donc ce qui est emis)
TX en format String ( caracteres) en bleu
RX en format Hexadecimal en violet
YAT_terminal_format_Transmission_string.jpg
YAT_terminal_format_reception_en_hexa.jpg
coté appli android et bluettoth
il peut s'averer que la fin de trame envoyée se termine par
soit \n\r
au lieu de \r\n
ou simplement \n ou \r
j'ai pu constater cela, suivant que l'appli est developée soit en java 100%, soit en RFO basic ou Appinventor
sans parler de ETX, EOT ... CRC16 ...etc si il y a en plus un protocol encapsulant
ATTENTION à ce detail :
exemple : ma config de Blue Term (application terminal Bluetooth (Android)
Preferences :
Local Echo Checked
Allow Insecure Connection Checked
Colors White Text on Blue ( Bleu car Blue Terminal !) c'est mon choix
Incomming EOL
CR (0x0D) character --> replace by CRLF
LF (0x0A) Character --> remove
Outgoing EOL
CR (0x0D) character --> remove
LF (0x0A) Character --> replace by CR
Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 118 invités