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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

pic16f1503
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#11 Message par paulfjujo » ven. 23 sept. 2022 20:35 lien vers la Data-Sheet : Cliquez ici

LP_2 a écrit :Par contre tu m'intéresses avec le débeugue live par l'uart


:!!: oui, mais le probleme c'est qu'il n'a pas d'UART, ce PIC !

L'UART est une ressource qui consomme peu de code
et permet de sortir sur un terminal , le suivi d'un programme et
des variables ou registres MCU ...
je m'en sers à outrance dans toutes mes applis MCU .
Aide toi, le ciel ou FantasPic t'aidera

pic16f1503
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#12 Message par Temps-x » ven. 23 sept. 2022 21:28 lien vers la Data-Sheet : Cliquez ici

Bonjour LP_2, francois77, satinas, paulfjujo, et tout le forum,

francois77 a écrit :Source du message Vous parlez d’I2C, mais quel est le module que vous souhaitez utiliser avec votre pic ?


Je suis d'accord avec francois77, et ça permettrais de te donner exactement un code I2C adéquate.

Si vous avez un Pic16F877, c'est exactement pareille que le Pic16F876 concernant I2C, c'est celui que francois77 à utilisé pour son écran Oled I2C

Maintenant si vous voulez un exemple de code ASM pour I2C pas de problème,

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

pic16f1503
LP_2
Débutant
Débutant
Messages : 46
Enregistré en : août 2022
Localisation : Haute-Loire

#13 Message par LP_2 » sam. 24 sept. 2022 10:38 lien vers la Data-Sheet : Cliquez ici

paulfjujo a écrit :. . . oui, mais le probleme c'est qu'il n'a pas d'UART, ce PIC !

Peu importe, ce qui est intéressant c'est la méthode en général pour pouvoir l'appliquer sur n'importe quel pic.
Et j'apprécierais des liens ou des explications :-D
Modifié en dernier par LP_2 le sam. 24 sept. 2022 10:49, modifié 1 fois.

pic16f1503
LP_2
Débutant
Débutant
Messages : 46
Enregistré en : août 2022
Localisation : Haute-Loire

#14 Message par LP_2 » sam. 24 sept. 2022 10:48 lien vers la Data-Sheet : Cliquez ici

Ben le module c'est celui de l'i2c, exactement le mssp en i2c.
Mais je crois m'être inquiété pour rien, l'i2c n'a pas l'air si compliqué (ou du moins je comprend tout).
Pour voir je vais utiliser le 16f1503 et le programmer directement en production.

Nota : mais il est vivant ce site ! - et francophone - Merci !

pic16f1503
LP_2
Débutant
Débutant
Messages : 46
Enregistré en : août 2022
Localisation : Haute-Loire

#15 Message par LP_2 » mar. 27 sept. 2022 11:11 lien vers la Data-Sheet : Cliquez ici

paulfjujo a écrit :L'UART est une ressource qui consomme peu de code
et permet de sortir sur un terminal , le suivi d'un programme et
des variables ou registres MCU ...
je m'en sers à outrance dans toutes mes applis MCU .

Salut

Je n'ai rien trouvé dans mes archives à ce propos, tu peux détailler un peu ?

pic16f1503
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#16 Message par paulfjujo » mer. 28 sept. 2022 09:16 lien vers la Data-Sheet : Cliquez ici

Bonjour LP_2 et à tous,


En fait , il n'y a pas de modele pré-défini... car depend trop de l'application,
et de ce que l'on veut suivre..
L'idée de base est d'utiliser un outil , disponible, et le moins invasif possible pour ne pas perturber l'application.

Il faut bien sur avoir un UART dispo sur le PIC , mais ce n'est pas indispensable
une simple sortie PIC peut servir d'UART SOFT, d'autant qu'on a besoin ici que de la sortie TX transmit vers Terminal
et pas de traitement d'interruption non plus !
exemple voir UART3.zip : rajout d'un UART software sur un PIC SANS UART Hardware

remarque : sur un 18F26K22 on peut avoir ainsi 3 UART
UART1 Hardware
UART2 Hardware
UART3 Software
à noter aussi que l'UART3 pourrait être AUSSI utilisé en RX interrupt .. (PIN RX sur RB0 !)

L'ideal est bien sur, un UART Hardware disponible .
Auquel cas, il faut quand même l'initialiser au départ ex: 19200,8,N,1 ( ou PIC18F .. 115200,8,N,1)
Une simple écriture dans le registre de transmission UART est suffisante
necessite 2 instructions ( 2x0.0625µS at FOSC=64MHz)
Le hardware du PIC se chargeant de l'envoi des 10 bits ( start,8datas,1 stop) ..en 89µS at 115200
TXREG1=data; ou U1TXB=data; (18F27K42) suivant le PIC utilisé

* Au niveau hardware : u n cordon prolific USB/TTL ou autre adaptateur FT232 CHG340 ...
entre PIC et terminal PC
* Terminal PC ..mes favoris YAT terminal, ou Realterm Terminal. .. (ou VBray 2014 sur Win XP )

Ensuite , il faut se faire une panoplie de petits outils
pour afficher un contenu de registre, ou data
en decimal, en hexa, en binaire
Outils de taille la plus reduite possible , pour ne pas trop perturber le déroulement de l'application..

exemple, programme décomposé en Etapes ou en phases:
suivre l'évolution de la progression du programme
si le programme comporte une dizaine d'étape (dans une boucle sans fin)
il suffit d'envoyer
TXREG1=Etape+48; // pour afficher le numéro de l'etape en cours sur un terminal


-------------------------------------
exemple de traçage interruptions (18F27K42)
(enlever le commentaire // pour l'activer!)
--------------------------------------

Code : Tout sélectionner

 
 if 
(( TMR0IE_bit) && (TMR0IF_bit))
    {
       // pour debugger
       // U1TXB=Count0+48;    //  0123456789
        // pour 100mS
         TMR0H         = 0x3C; //15536;
         TMR0L         = 0xB0;
        Count0++;
        if (Count0 >9)
        {
            LED_Verte = ~LED_Verte;
            Flag_Timer0=1;
        }
        PIR3.TMR0IF= 0;
    }

    // RB0 interrupt
    if ((INT0IE_bit) && (INT0IF_bit))
    {

     // U1TXB=Sec+48; // pour debugging sur UART1
      Flag_RB0=;
      INT0IF_bit=0;
      //c0=PORTB;
   }



----------------------------------------------------------
pour afficher le contenu d'un registre 8 bits en binaire ou etoiles
en etoile : utile pour une fonte de caracteres !
--------------------------------------------------------

Code : Tout sélectionner

void Decompile_Byte(unsigned char un)
{
 unsigned char masque;
 masque = 0x80;
 while (masque > 0u )
 {
   if ((un & masque)>0)
       UART1_Write('*');
     //  UART1_Write(49u);  //  '1'
    else
       UART1_Write
(' ');
      // UART1_Write(48u);  //  '0'
    masque =masque >>1;
  }
}


-----------------------------------------------
affichage d'une valeur decimale 16 bits
------------------------------------------------

Code : Tout sélectionner

void Int2Asc(unsigned int value, char *T)
{
 
       T
[0] =  value/1000+48;   //Add 48 to get the ASCII character
       T[1] = ( value/100)%10+48;
       T[2] =  (value/10)%10 +48;
       T[3] = ( value %10) +48;
       T[4]=0; // terminateur de string
}




----------------------------------------------
Test du deroulement d'un timer
------------------------------------------

Code : Tout sélectionner

CPrint(" Timer1 init 100mS \r\n");
    Init_Timer1();
    CPrint("Test Timer1 arme pour 30 x 100msec\r\n");
    Arme_Timer1(30);
    CPrint(" Arme \r\n"); 
    do
    
{
      while(Flag_Timer1==0);
      k=Count_0_1sec;
      cx=(char)(% 10) +48;
      PrintChar(cx);
      Flag_Timer1=0;
    }
    while(Drapeaux.Tmr1_Elapsed==0);
    Drapeaux.Tmr1_Elapsed=0;
    T1CONbits.TMR1ON=0;
    CPrint("\r\n Stop\r\n"); 
    CRLF1
();


exemple de traçage sur terminal:
Test Timer1 arme pour 30 x 100msec
Arme
1234567890123456789012345678901
Stop


--------------------------------------------------------
Imprime un bloc de donnée n Hexadecimal
situé à l'adresse *BB et de longueur N
sortie formatée 16 bytes par ligne
------------------------------------------------------------

Code : Tout sélectionner

void Imprime_Asc_Hex( unsigned char * BB , unsigned int N)
{
  unsigned int  i,j,k,m,l;
  unsigned char Tampon[8];
  k=0;
  m=N>>4;

 if (N<16)
 {
  //  for (i=0;i<N;i++)
  //  {
  //    UART1_Write(*(BB+i));
  //   }
  //  UART1_Write(' '); UART1_Write('|');
  UART1_Write(' ');
    for (i=0;i<N;i++)
    { ByteToHex(*(BB+i),Tampon);
       UART1_Write_Text(Tampon);UART1_Write('.');
     }
     CRLF1();
 }
 else
 
{
 // Nb entier de blocs 64 bytes
 for (j=0;j<m;j++)
 {
   UART1_Write(' ');
    for (i=0;i<16;i++)
    { k= j*16+i;
       ByteToHex(*(BB+k),Tampon);
       UART1_Write_Text(Tampon);UART1_Write('.');
     }
     CRLF1();
  }
  // reste un morceuax de bloc ?
   k=m<<4;
   l=N-k;
  if (l>0)
  {
    UART1_Write(' ');
     for (j=0;j<l;j++)
     {  ByteToHex(*(BB+k+j),Tampon);
        UART1_Write_Text(Tampon);UART1_Write('.');
     }
     CRLF1();
   } //if
  } //else
  CRLF1();
 }

-------
exemple d'usage
L2=FLASH_ROW_ADDRESS + L1 ;
p1=&Buffer1[0] ; //Buffer contient le bloc de 128 bytes
cx=PORTBbits.RB1;
sprintf(CRam1," ecr. Bloc %05d @ Flash %lu \r\n",BN,L2);
Print(CRam1);
if(cx==0)
{
CRLF1();
Imprime_Asc_Hex( p1,128);
}

exemple de resultat ,
affichage conditionnel si entree RB1=0
-------
Affichage Datas blocs (si RB1=0) valeur RB1= 0

Bloc # 2 Offset= 64
30. 2c. 51. 61. 56. 51. 61. 7e. 93. b8. d7. da. ce. a2. 73. 46.
3b. 32. 39. 50. 66. 6a. 5d. 5d. 5e. 85. af. da. da. da. bf. 85.
46. 26. 26. 26. 26. 39. 5a. 74. 87. 7c. 74. 74. 7f. 7f. 7f. a6.
c8. da. bf. 9b. 68. 56. 4d. 6f. a0. da. da. da. da. c9. 7f. 5a.

----------------------------------------------------------

:sifflotte:
Bien sur, ces exemples sont en C ...
mais facilement adaptable en ASM .

tu peux par exemple utiliser MPLAB XC8 ou MikroC version libre <2K
pour compiler des morceaux et recuperer le listing ASM et LST résultant
ou reparttir de zero (from scratch !)

dans le zip joint

Uart1_init_via_registre_16F1847.c UART init ... en ASM enveloppé de C !
UART3_ASM.inc ecriture texte (en RAM ou FLASh)
UART3_asm_sp.c UART3 bit bang 19200 bds Tx sur RA2

UART3.zip


voir aussi
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

pic16f1503
francois77
Passioné
Passioné
Messages : 307
Enregistré en : avril 2022

#17 Message par francois77 » mer. 28 sept. 2022 10:44 lien vers la Data-Sheet : Cliquez ici

Bonjour,

C'est peut être plus simple de commencer avec un PIC plus simple type 16f876/77/628 pour les premiers essais !

A+

pic16f1503
LP_2
Débutant
Débutant
Messages : 46
Enregistré en : août 2022
Localisation : Haute-Loire

#18 Message par LP_2 » ven. 30 sept. 2022 10:46 lien vers la Data-Sheet : Cliquez ici

paulfjujo a écrit : En fait , il n'y a pas de modele pré-défini... car depend trop de l'application,
et de ce que l'on veut suivre..
L'idée de base est d'utiliser un outil , disponible, et le moins invasif possible pour ne pas perturber l'application.

Ah d'accord, je pensais à un produit miraculeux :-D
Mais effectivement c'est intéressant, d'autant que tous les modules ne sont pas supportés par le PKx.
Je m'y pencherai quand j'aurai à débeuguer l'i2c.

Merci bien

PS - le lien voir aussi ne marche pas !

pic16f1503
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#19 Message par paulfjujo » ven. 30 sept. 2022 11:24 lien vers la Data-Sheet : Cliquez ici

bonjour,

LP_2 a écrit :
PS - le lien voir aussi ne marche pas !


le h de https avait disparu...

viewtopic.php?f=10&t=346

:sifflotte: une pub elektor qui vient de tomber à point !

extrait
La plupart des développeurs mettent à profit la présence d’un port de sortie série sur les cartes maker pour envoyer des messages de débogage vers une fenêtre terminal sur un PC via l’USB. En analysant la sortie après un test, le développeur peut suivre l’exécution du code à la trace, d'où le nom de « trace logicielle » donné à cette méthode de débogage. C’est aussi un moyen de déboguer des applications qui ne peuvent pas être arrêtées en cours de fonctionnement.


une solution sans fil simple .. un HC06 sur l'UART , pour etre en BlueTooth ..et une cle USB/bluettoth coté PC = liaison serie sans fil
c'est tout ..
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage ASM »

Qui est en ligne

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