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 ---
Tout ce qui n'a pas de catégorie !
Bluetooth Electronics et envoi de texte
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1661
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#11 Message par Gérard » dim. 3 mai 2020 18:31

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.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Bluetooth Electronics et envoi de texte
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#12 Message par paulfjujo » dim. 3 mai 2020 19:43

[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
Aide toi, le ciel ou FantasPic t'aidera

Bluetooth Electronics et envoi de texte
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2618
Enregistré en : juillet 2016
Localisation : Terre

#13 Message par Temps-x » dim. 3 mai 2020 20:26

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. :roll: sinon j'ai des fonctions toutes faite en ASM :-D

:sifflotte: Je sais... tu adores l'assembleur :-D 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... :wink:

==> A+
Modifié en dernier par Temps-x le lun. 4 mai 2020 13:06, modifié 2 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Bluetooth Electronics et envoi de texte
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1661
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#14 Message par Gérard » dim. 3 mai 2020 20:36

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;
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Bluetooth Electronics et envoi de texte
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1661
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#15 Message par Gérard » dim. 3 mai 2020 20:39

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. :roll: sinon j'ai des fonctions toutes faite en ASM :-D

:sifflotte: Je sais... tu adores l'assembleur :-D 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... :wink:

==> 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?
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Bluetooth Electronics et envoi de texte
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2618
Enregistré en : juillet 2016
Localisation : Terre

#16 Message par Temps-x » dim. 3 mai 2020 20:53

Re

Avant d'aller plus loin, essai de rajouter 48 décimales sur chaque octets reçu, puis tu l'affiches sur LCD.

oops 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.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Bluetooth Electronics et envoi de texte
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#17 Message par paulfjujo » dim. 3 mai 2020 21:03

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)

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 ..
Aide toi, le ciel ou FantasPic t'aidera

Bluetooth Electronics et envoi de texte
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#18 Message par paulfjujo » lun. 4 mai 2020 09:19

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.

oops 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
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Bluetooth Electronics et envoi de texte
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#19 Message par paulfjujo » lun. 4 mai 2020 09:25

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.

oops 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
Aide toi, le ciel ou FantasPic t'aidera

Bluetooth Electronics et envoi de texte
pspic
Passionné
Passionné
Messages : 357
Âge : 77
Enregistré en : septembre 2017
Localisation : 68

#20 Message par pspic » lun. 4 mai 2020 11:02

Bonjour Gérard,
Les transmissions se font mais des caractères se rajoutent.

Peux tu poster une copie d'écran de ces caractères.


Retourner vers « Coin Fourre-tout »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 118 invités