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 le langage C !

Modérateur : Jérémy

MikroC Mixte avec Arduino avec les nouveaux PIC18FxxK42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1307
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#1 Message par paulfjujo » mar. 5 févr. 2019 13:18

bonjour,


BETA7.3.0 Remappable I2C bug
https://forum.mikroe.com/viewtopic.php?f=85&t=74094


Bien que mikroE ne veut pas le confirmer clairement
il s'avers que la tendance actuelle est d'harmoniser les librairies PIC MikroC avec celles de ARM
C'est vrai que microchip a racheté ATMEL .. on aura biento des PICARM ou ARMPIC ???

:sifflotte: FANTASPICARM

en l'occurence, ma question concernait l'I2C Hardware

Code : Tout sélectionner

// for PIC18F K42 and K83 family 
unsigned short I2Cx_Wr(char slave_address, char *ptrdata, unsigned short count, unsigned short END_mode);


et l'adressage

so you confirm,
that the rules has changed
is it because MikroC 7.30 version
or with this particular PIC 18F27K42.?



I'm not sure what you mean by rules?
I2C library for K42/K83 has been like this since release.
Our developers wanted to add some consistency between all of our I2C libraries because I2C library for ARM and FT9xx for example,
were implemented in this way as well.
Additionally, it's more simple than the step-by-step I2C library for other PICs.


dans les fonctions I2C, on passait l'adresse complete :
Adresse device sur 7 bits + le bit de commande R/W soit adresse complete sur 8 bits
ATTENTION DONC :
Dorenavant il ne faut passer que l'adresse sur 7 bits
les fonctions I2C sont sensées etre plus performantes : lecture par paquet de données , plutot qu'individuellement.
ca ne m'arrange pas forcément ..mais c'est comme cela maintenant
idea ! à moins de réecrire ses propres fonctions I2C !

:sifflotte: Nota l'I2C software est inchangée
Aides toi, le ciel ou Fantastpic t'aideras

MikroC Mixte avec Arduino avec les nouveaux PIC18FxxK42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1307
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » jeu. 21 févr. 2019 16:03

:-D je me réponds à moi-meme..

Probleme résolu sur I2C1 Hardware ...
en fait c'est NOUVEAU avec ce type de PIC ..
adresse I2C sur 7 bits en mode Hardware I2C
:!!: adresse I2C sur 8 bits en mode Software I2C


j'ai résumé mon test (minimaliste) , avec une RTC DS3231,sur ma page web.
ma is si quelqu'un veut développer ici , no problemo.

l'essentiel du code mikroC


Code : Tout sélectionner



  UART1_Write_CText
(" Init I2C1 HW \r\n");

    
I2C1_Init();
    
    
// this following code works also OK
    // PIN_MANAGER_Initialize();
    // I2C1_Initialize();

    
Delay_ms100 );
    
UART1_Write_CText(" Init RTC DS3231 \r\n");
    
UART1_Write_CText(" Active sortie SQW=1Hz: \r\n");
 
/*
    slave_address: slave address.
    ptrdata: pointer to the received data.
    count: number of bytes to be received.
    END_mode: mode in which the I²C module will be set after the reading. Available modes : Value Description
    _I2C_END_MODE_RESTART I²C bus will issue a restart.
    _I2C_END_MODE_STOP I²C bus will issue a stop.
  */
    
tmp[0]=0x0E;
    
tmp[1]=0b01000000;
    
I2C1_WrDS3231_ADDRtmp2_I2C_END_MODE_STOP );

   
// clean table tmp
   
for (i=1;i<16;i++) tmp[i]=0;

   if(
RTC_Forcee==0)    // RC0 input
   
{
    
UART1_Write_CText"Init data RTC par defaut, avec RTC_Forcée=0 \r\n");
    
tmp[0]=0;
     
tmp[1]=0x50;  //Reset second to 0 sec. and stop Oscillator
      
tmp[2]=0x59;  //write min
       
tmp[3]=0x14//write hour;
        
tmp[4]=0x02;     ///write day of week
         
tmp[5]=0x20;     // write date
          
tmp[6]=0x02;      // write month
            
tmp[7]=0x19;    // write year 2019
         
I2C1_WrDS3231_ADDRtmp7_I2C_END_MODE_STOP );
   }
   else
   {
       
UART1_Write_CText(" Re-Lecture RTC ");
   }

    
CRLF1();
    do
    {
    
// relecture RTC
      
tmp[0]=;
      
I2C1_WrDS3231_ADDRtmp1,  _I2C_END_MODE_RESTART );
      
I2C1_RdDS3231_ADDRtmp7_I2C_END_MODE_STOP );
      
second=tmp[0];
      
minute=tmp[1];
      
heure=tmp[2];
      
jS=tmp[3];
      if (
jS>6jS=0;
      
jour=tmp[4];
      
mois=tmp[5];
      
Annee=tmp[6];
     
// affichage data RTC
    
for (i=6;i>0;i--)
    {
      
BCD_To_Ascii(tmp[i],CRam1);
      
UART1_Write_Text(CRam1);UART1_Write(TAB);
    }
      
BCD_To_Ascii(tmp[0],CRam1);
      
UART1_Write_Text(CRam1);
    
CRLF1();
     
Delay_ms(1000);
     }
  while(
1);
  }
 
 



affichage

Init I2C1 HW
Init RTC DS3231
Active sortie SQW=1Hz:
Init data RTC par defaut, avec RTC_Forcée=0

19 02 20 02 14 59 50
19 02 20 02 14 59 51
19 02 20 02 14 59 52
19 02 20 02 14 59 53
19 02 20 02 14 59 54
19 02 20 02 14 59 55
19 02 20 02 14 59 56
19 02 20 02 14 59 57
19 02 20 02 14 59 58
19 02 20 02 14 59 59
19 02 20 02 15 00 00
19 02 20 02 15 00 01
19 02 20 02 15 00 02
Aides toi, le ciel ou Fantastpic t'aideras

MikroC Mixte avec Arduino avec les nouveaux PIC18FxxK42
Jérémy
Administrateur du site
Administrateur du site
Messages : 2314
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » jeu. 21 févr. 2019 19:34

Pas de réponse Paul mais je te lis avec assiduité !

Merci ! pour ce retour
C'est en faisant des erreurs, que l'on apprend le mieux !!!

MikroC Mixte avec Arduino avec les nouveaux PIC18FxxK42
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 599
Âge : 33
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#4 Message par venom » jeu. 21 févr. 2019 20:37

Oui, merci pour ce retour d'information. C'est toujours utile






@++
En fait tout est une question de BIT ? :-D

MikroC Mixte avec Arduino avec les nouveaux PIC18FxxK42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1307
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » dim. 24 févr. 2019 18:51

bonsoir,

Transfert d'un programme 18F26K22 -> 18F27K42
apres les péripéties de l'I2C1 Hardware .. l' EEPROM

Encore une perte de temps, pour rechercher un bug dans mon programme .. pour rien
C'est encore le compilo qui bug
avec MPLAB IPE et Pickit4
au moment du chargement du *.hex (compilé avec MikroC)
message

2019-02-24 15:32:34 +0100 - Hex file loaded successfully.
Loading code from C:\_MikroC\_MesProjets_MikroC\_18F27K42\Horloge_6digits_18F27K42_DS3231_ULN_UDN_Melodie_60leds_for_AI2.hex...
Warning: C:\_MikroC\_MesProjets_MikroC\_18F27K42\Horloge_6digits_18F27K42_DS3231_ULN_UDN_Melodie_60leds_for_AI2.hex
contains code that is located at addresses that do not exist on the PIC18F27K42.
Code incompletely loaded.
2019-02-24 15:32:51 +0100 - Programming...
*****************************************************
Erasing...
The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x1ffff
configuration memory
EEData memory
User Id Memory
Programming/Verify complete
2019-02-24 15:33:23 +0100 - Programming complete


le programme tourne quand meme , mais mes datas Eeeprom ne sont pas chargées..

réponse obtenue sur le site Microchip

Re: Probleme with MLPAB IPE or other (18F27K42) ?
The error is correct. Your HEX file contains data at 0x01210000 which is out of thechip memory range,
and the same data seems to be in your EEPROM.iHex file.
If you want it to go to EEPROM (which is at 0x310000), try replacing this line from the HEX file:
:020000040121D8
with this:
:020000040031C9


dans le fichier Hex contenant le code ET l'eeprom
remplacer l'adresse de depart . ..et c'est ensuite OK avec MPLAB IPE
et mon programme peut enfin lire/ecrire dans l'eeprom
Aides toi, le ciel ou Fantastpic t'aideras

MikroC Mixte avec Arduino avec les nouveaux PIC18FxxK42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1307
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » jeu. 28 févr. 2019 11:12

bonjour à tous,

la suite ....
avec le LCD 2119 en I2C
Là encore , on jette tout et on recommence avec la nouvelle fonction I2C Hardware , à la sauce 18F27K42
je ne mets en direct que l'init LCD , pour montrer les differences d'usage de I2C Hardware
mais le fichier joint est complet.

nota : la version I2C SOFTWARE est inchangée (car methode BIT BANG)

nouvelle init LCD :

Code : Tout sélectionner


void LCD2119_Init
(void)
{
// see datasheet PCF2119x NXP Semiconductors page 69
Delay_ms(500);
    Buff_LCD[0]=;
     Buff_LCD[1]=0x00 ;
      Buff_LCD[2]=0x24 ;
       Buff_LCD[3]=0x0C ;
        Buff_LCD[4]=0x06 ;
          Buff_LCD[5]=0x25 ;
          //10.2.3.2 Disp_conf
          // inversion Haut/Bas Affichage par Q bit (fig 20) page 37 of 83
           // Buff_LCD[6]=0x06 ; // Affichage Bas coté Connecteur
            Buff_LCD[6]=0x05 ; // affichage Haut coté connecteur
             Buff_LCD[7]=0x11 ;
              Buff_LCD[8]=0x42 ;
               Buff_LCD[9]=0x96 ;
                Buff_LCD[10]=0x24 ;
                 Buff_LCD[11]=0x0C ;
                  Buff_LCD[12]=0x06 ;
                   Buff_LCD[13]=0x02 ;
                    Buff_LCD[14]=0x01 ;
      I2C1_Wr( LCD_ADDR, Buff_LCD, 15,  _I2C_END_MODE_STOP );
}



Capture.JPG

_18F27K42_Tests_UART_I2C_HW_ADC_LCD_190228.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aides toi, le ciel ou Fantastpic t'aideras

MikroC Mixte avec Arduino avec les nouveaux PIC18FxxK42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1307
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#7 Message par paulfjujo » sam. 23 mars 2019 11:02

bonjour à tous,

:cry: il semblerait bien que je sois le seul à utiliser ce PIC18F27K42 ... tres mal supporté par MikroC , Basic et PAscal
et qui est une VRAI USINE A GAZ ...

on est loin de la facilité offerte par le 18F26K22 !

Maintenant je bloque sur le PWM
la bibliotheque MikroC PWM ..ne genére pourtant pas d'erreur
je fais prealablement une commande directe sur ma sortie RC2 pour verifier/ allumer ma lampe 12V 25W (via un FET IRLZ14) .. OK
mais RIEN avec la commande PWM1
et bien sur AUCUN EXEMPLE pour ce PIC particulier.

or avec MPLABX on commence la config PMW à PWM5 ?


en attendant je vais basculer sur MPLABX ..pour voir

:furieux: vraiment déçu par MikroC ..
de plus, ça vient de sortir , MikroE introduit la notion de SUPPORT PAYANT ! c'est le comble.


:!!: un avis, une aide serait bienvenue

je continue ici , avec ma maxime favorite
Aide toi .. :sifflotte: tout seul !

ça marche en 8 bits
encore un probleme dû au PPS !

Code : Tout sélectionner



    Print_Cte_String
(" Affectation (PPS) PIN RC2 à Sortie PWM1 \r\n");
    Unlock_IOLOCK() ;
    PPS_Mapping_NoLock(_CCP1, _OUTPUT, _RC2);   // Sets pin RC2 to be PWM  Output, and maps EUSART2 Asynchronous Transmit/Synchronous Clock Output to it
    Lock_IOLOCK()  ;

    Print_Cte_String(" Init PWM1 8bits at 1000Hz on RC2 \r\n");
    IRatio=128;
    PWM1_Init(1000);
    PWM1_Remappable_Init(1000);
    PWM1_Remappable_Start();
    PWM1_Set_Duty(IRatio);



reste à tester en mode 10bits ...
Aides toi, le ciel ou Fantastpic t'aideras

MikroC Mixte avec Arduino avec les nouveaux PIC18FxxK42
Jérémy
Administrateur du site
Administrateur du site
Messages : 2314
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » sam. 23 mars 2019 13:24

Bonjour Paul,

Fantas-Pic t'aideras.......

J'avais également bien galerer avec les PPS .

Voici une fonction qui me permets de configurer le PPS sur un PIC18F47K40, tu pourrais essayer de t'en inspirer. La commande de verrouillage aps évidente.

Code : Tout sélectionner

  //---------------------------------      PPS      -------------------------------------
  
PPSLOCK 0x55;                 // unlock PPS                -
  
PPSLOCK 0xAA;
  
PPSLOCKED_bit 0;
  
RC6PPS  0x09;                 // TX1 -> RC6
  
RX1PPS  0x17;                 // RX1 <- RC7
  
RB5PPS  0x0B;                 // TX2 -> RB5
  
RX2PPS  0x0C;                 // RX2 <- RB4
  
PPSLOCK 0x55;                 // lock PPS
  
PPSLOCK 0xAA;
  
PPSLOCKED_bit 1


Bon courage
C'est en faisant des erreurs, que l'on apprend le mieux !!!

MikroC Mixte avec Arduino avec les nouveaux PIC18FxxK42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1307
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#9 Message par paulfjujo » lun. 25 mars 2019 13:28

bonjour à tous,


Avec mikroC ..pas moyen de gerer (pour l'instant) le mode PWM 10 bits
je suis donc retourné sur MPLABX IDE V 5.15 avec XC8
idea ! pour enfin arriver à un résultat , apres avoir mainte fois consulté la datasheet du PIC ,
malgre le soi disant MCC qui fait (PRESQUE) TOUT !

la gestion de FOSC n'est pas evidente sur ce PIC...
il a fallu que je modifie manuellement la config vitesse de l'UART1 USBRGH et USBRGL

pour les tests : ma base 18F + alimentée par la liaison UART (+5V USB) et connection ICSP au Pickit4
batterie de 12V + une lampe 12V 21W piloté par un MOSFET N IRLZ14 , via la sortie RC2 PMW5 en mode 10 bits.
0 à 100% 0 à 1023 !

PIC18F27K42 sur Base de Test
version 25-03-2019
Test PWM 10 bits -> RC2 - MOSFET -> Ampoule 12V 21W

UART1 19200,8,N,1 FOSC=Q 8MHz
PWM5 Initialisation
Test Delay_ms(10)
PWM=100
PWM=500
PWM=1000
PWM=50
Rampe UP : ................................
Rampe DOWN : ...............................


le main du programme ci dessous.

Code : Tout sélectionner

#include "mcc_generated_files/mcc.h"

#define Version "25-03-2019"
#define UP   1
#define DOWN 0
#define ON   0
#define OFF   1


unsigned char Buffer1[128];
unsigned char TEXTE[128];
unsigned char CRam1[48];
unsigned int i,j,k,m;
unsigned char c2,cx;
unsigned long L1;
float F1,F2;

unsigned int EAx;


void CRLF1(void);
void UART1_Write_Textchar *t1);
void UART1_Write_CText( const char *t1);
void Delay_ms(unsigned int V);
void Rampe(char sens);

void UART1_Write_Textchar *t1)
{
    
int k;
    
k=0;
    while(*(
t1++)>0
    {
      if (
k>80) break;
        
UART1_Write(*(t1));
        
k++;
    }  
}

void UART1_Write_CText( const char *t1)
{
    
int k;
    
k=0;
    while(*(
t1++)>0
    {
      if (
k>80) break;
        
UART1_Write(*(t1));
        
k++;
    }  
}

void CRLF1(void)
{
  
UART1_Write(13);   
   
UART1_Write(10);  
}


void Delay_ms(unsigned int V)
{  
unsigned int j,k;
     
k=V;
    while (
k>1)
    {
        for (
j=0;j<800;j++);
        
k--;
    }   
}



void Rampe(char sens)
int i;
   switch (
sens)
   {
      case 
0
           for (
i=1023;i>1;i--) 
           {
             
PWM5_LoadDutyValue(i);
             if (
%32 ==0UART1_Write('.');
           
Delay_ms(10);
           } 
           break; 
      case 
1
           for (
i=0;i<1023;i++)  
           {
               
PWM5_LoadDutyValue(i);
               if (
%32 ==0UART1_Write('.');
               
Delay_ms(10);
           }
           break; 
      default:
      
PWM5_LoadDutyValue(0);
    }
     
CRLF1(); 
     
Delay_ms(1000);
     
PWM5_LoadDutyValue(0);
    
}

void main(void)
{
    
// Initialize the device
    
SYSTEM_Initialize();

    
// If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
    // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global Interrupts
    // Use the following macros to:

    // Enable the Global Interrupts
    //INTERRUPT_GlobalInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    
CRLF1();
    
UART1_Write_CText(" PIC18F27K42 sur Base de Test\r\n");
    
UART1_Write_CText(" version " Version"\r\n" );
    
UART1_Write_CText(" Test PWM 10 bits -> RC2 - MOSFET -> Ampoule 12V 21W\r\n");
    
UART1_Write_CText("\r\n UART1 19200,8,N,1    FOSC=Q 8MHz\r\n");
    
    
LATAbits.LATA4=OFF;
     
//  CCP2CON=CCP2CON | 0x0C ;  //PWM
    
UART1_Write_CText(" PWM5 Initialisation\r\n");
    
PWM5_Initialize();  
    
UART1_Write_CText(" Test Delay_ms(10)\r\n"); 
    
Delay_ms(10);
     
UART1_Write_CText(" PWM=100\r\n");  
    
PWM5_LoadDutyValue(100);
    
Delay_ms(1000);
    
UART1_Write_CText(" PWM=500\r\n");
    
PWM5_LoadDutyValue(500);
    
Delay_ms(1000);
    
UART1_Write_CText(" PWM=1000\r\n");
    
PWM5_LoadDutyValue(1000);
    
Delay_ms(1000);
    
UART1_Write_CText(" PWM=50\r\n");
    
PWM5_LoadDutyValue(50);
      
    
    while (
1)
    {
     
LATAbits.LATA4=ON;
     
UART1_Write_CText(" Rampe  UP : ");
     
Rampe(UP); 
     
LATAbits.LATA4=OFF;
     
UART1_Write_CText(" Rampe DOWN : ");
     
Rampe(DOWN);
    
    }
}

 




et le fameux mcc

Code : Tout sélectionner

#include "mcc.h"


void SYSTEM_Initialize(void)
{
    
INTERRUPT_Initialize();
    
PMD_Initialize();
    
PIN_MANAGER_Initialize();
    
OSCILLATOR_Initialize();
    
FVR_Initialize();
    
ADCC_Initialize();
    
TMR2_Initialize();
    
PWM5_Initialize();
    
UART1_Initialize();
}

void OSCILLATOR_Initialize(void)
{
    
// NOSC EXTOSC; NDIV 1; 
    
OSCCON1 0x70;
    
// CSWHOLD may proceed; SOSCPWR Low power; 
    
OSCCON3 0x00;
    
// MFOEN disabled; LFOEN disabled; ADOEN disabled; SOSCEN disabled; EXTOEN disabled; HFOEN disabled; 
    
OSCEN 0x00;
    
// HFFRQ 4_MHz; 
    
OSCFRQ 0x02;
    
// TUN 0; 
    
OSCTUNE 0x00;
}

void PMD_Initialize(void)
{
    
// CLKRMD CLKR enabled; SYSCMD SYSCLK enabled; SCANMD SCANNER enabled; FVRMD FVR enabled; IOCMD IOC enabled; CRCMD CRC enabled; HLVDMD HLVD enabled; NVMMD NVM enabled; 
    
PMD0 0x00;
    
// NCO1MD DDS(NCO1) enabled; TMR0MD TMR0 enabled; TMR1MD TMR1 enabled; TMR4MD TMR4 enabled; TMR5MD TMR5 enabled; TMR2MD TMR2 enabled; TMR3MD TMR3 enabled; TMR6MD TMR6 enabled; 
    
PMD1 0x00;
    
// ZCDMD ZCD enabled; DACMD DAC enabled; CMP1MD CMP1 enabled; ADCMD ADC enabled; CMP2MD CMP2 enabled; 
    
PMD2 0x00;
    
// CCP2MD CCP2 enabled; CCP1MD CCP1 enabled; CCP4MD CCP4 enabled; CCP3MD CCP3 enabled; PWM6MD PWM6 enabled; PWM5MD PWM5 enabled; PWM8MD PWM8 enabled; PWM7MD PWM7 enabled; 
    
PMD3 0x00;
    
// CWG3MD CWG3 enabled; CWG2MD CWG2 enabled; CWG1MD CWG1 enabled; 
    
PMD4 0x00;
    
// U2MD UART2 enabled; U1MD UART1 enabled; SPI1MD SPI1 enabled; I2C2MD I2C2 enabled; I2C1MD I2C1 enabled; 
    
PMD5 0x00;
    
// DSMMD DSM1 enabled; CLC3MD CLC3 enabled; CLC4MD CLC4 enabled; SMT1MD SMT1 enabled; CLC1MD CLC1 enabled; CLC2MD CLC2 enabled; 
    
PMD6 0x00;
    
// DMA1MD DMA1 enabled; DMA2MD DMA2 enabled; 
    
PMD7 0x00;
}


 


je vais essayer de transposer pour usage avec MikroC ...
Aides toi, le ciel ou Fantastpic t'aideras


Retourner vers « Langage C »

Qui est en ligne

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