Gönderen Konu: MPLAB Harmony Hakkında  (Okunma sayısı 418 defa)

Çevrimdışı okg

  • Kıdemli
  • ****
  • İleti: 184
  • www.vhdl.club
MPLAB Harmony Hakkında
« : 13 Eylül 2017, 11:45:36 »
Arkadaşlar merhaba, bir projemden dolayı 32bit pic kullanmak durumunda kaldım ve derleyici olarak da mplab x ide harmony kullanıyorum. Daha önceden mplab harmony kullanan var mı acaba? i2c haberleşmesinde debug yaparken PLIB_I2C_ReceivedByteGet(...) fonksiyonunda takılıp kalıyor. harmony ile i2c kullanan var ise yardımcı olursa çok sevinirim.
KTU Elektronik Haberleşme ^4

Çevrimdışı baran123

  • Profesyonel Üye
  • *****
  • İleti: 1925
Ynt: MPLAB Harmony Hakkında
« Yanıtla #1 : 13 Eylül 2017, 12:33:05 »
Harmony falan fark etmiyor bu I2C nerede olursa olsun takılıyor !!!
Durum registerlerını kontrol et(debug) mutlaka biri SET/RESET olmuyordur.

Çevrimdışı okg

  • Kıdemli
  • ****
  • İleti: 184
  • www.vhdl.club
Ynt: MPLAB Harmony Hakkında
« Yanıtla #2 : 20 Eylül 2017, 10:22:05 »
Harmony falan fark etmiyor bu I2C nerede olursa olsun takılıyor !!!
Durum registerlerını kontrol et(debug) mutlaka biri SET/RESET olmuyordur.

maalesef ne var ne yoksa kontrol ettim, farklı 3-5 kod yazdım ama nafile. harmony nasıl çalışıyor hala kavrayamadım. bazı örneklerde ack-nack gönderilip alınmıyor bazı örneklerde start + address + w + register işleminden sonra stop gönderilmemiş direk start + address + r işlemleri yapılıp veri okunmuş. kafam 1 milyon oldu.

kullandığım sensör smb380

Kod: [Seç]
#define slave_ADDR          0x38
#define slave_WRITE_ADDR    0x70   
#define slave_READ_ADDR     0x71
#define accx1_DATA_ADDR     0x02

APP_DATA appData;

uint8_t count;
uint8_t length = 6;
uint8_t buffer[6];
uint16_t x,y,z;
void APP_Initialize ( void )
{
    appData.state = APP_STATE_INIT;
}

void APP_Tasks ( void )
{
    PLIB_I2C_Enable(I2C_ID_2);
    PLIB_I2C_MasterStart(I2C_ID_2);
    PLIB_I2C_TransmitterByteSend(I2C_ID_2 , slave_WRITE_ADDR);
    while(!PLIB_I2C_MasterReceiverReadyToAcknowledge(I2C_ID_2));
    PLIB_I2C_TransmitterByteSend(I2C_ID_2 , accx1_DATA_ADDR);
    while(!PLIB_I2C_MasterReceiverReadyToAcknowledge(I2C_ID_2));
    PLIB_I2C_MasterStop(I2C_ID_2);
 
   
    PLIB_I2C_MasterStartRepeat(I2C_ID_2);
    PLIB_I2C_TransmitterByteSend(I2C_ID_2 , slave_READ_ADDR);   
//    while(!PLIB_I2C_MasterReceiverReadyToAcknowledge(I2C_ID_2));
    for(count= 0 ; count < length ; count ++)
       
    {
        buffer[count] = PLIB_I2C_ReceivedByteGet(I2C_ID_2);
        if(count == length -1)
        {
            PLIB_I2C_ReceivedByteAcknowledge(I2C_ID_2 , false);
        }
        else
        {
            PLIB_I2C_ReceivedByteAcknowledge(I2C_ID_2 , true);
        }     
    }
    PLIB_I2C_MasterStop(I2C_ID_2);
   
   
        x = ((((int16_t)buffer[1]) << 8) | buffer[0]) >> 6;
        y = ((((int16_t)buffer[3]) << 8) | buffer[2]) >> 6;
        z = ((((int16_t)buffer[5]) << 8) | buffer[4]) >> 6;
}


debug sonrası:

« Son Düzenleme: 20 Eylül 2017, 11:01:21 Gönderen: okg »
KTU Elektronik Haberleşme ^4

Çevrimdışı baran123

  • Profesyonel Üye
  • *****
  • İleti: 1925
Ynt: MPLAB Harmony Hakkında
« Yanıtla #3 : 20 Eylül 2017, 11:46:54 »
Harmony bilmiyorum ama benim PIC18 için I2C rutinlerim şu şekilde

Write
Kod: [Seç]
void I2C_WriteData(uint8_t slaveAddr, uint8_t regAddr, uint8_t data)
{
    I2C_State(I2C_State_Start);                   
    I2C_Address(slaveAddr, I2C_WRITE);
    I2C_Write(regAddr);                
    I2C_Write(data);          
    I2C_State(I2C_State_Stop);
}

Read
Kod: [Seç]
void I2C_ReadData(uint8_t slaveAddr, uint8_t regAddr, uint8_t *data)
{
    I2C_State(I2C_State_Start);                       
    I2C_Address(slaveAddr, I2C_WRITE);
    I2C_Write(regAddr);              
    I2C_State(I2C_State_Restart);               
    I2C_Address(slaveAddr, I2C_READ);   
    *data = I2C_Read(I2C_NACK);
    I2C_State(I2C_State_Stop);   
}

Çevrimdışı okg

  • Kıdemli
  • ****
  • İleti: 184
  • www.vhdl.club
Ynt: MPLAB Harmony Hakkında
« Yanıtla #4 : 20 Eylül 2017, 11:53:23 »
@baran123  peki idle, ack veya nack işlemleri nerede yapılıyor?  Start ve write fonksiyonlarında mı tanımlı?
KTU Elektronik Haberleşme ^4

Çevrimdışı baran123

  • Profesyonel Üye
  • *****
  • İleti: 1925
Ynt: MPLAB Harmony Hakkında
« Yanıtla #5 : 20 Eylül 2017, 11:55:37 »
Evet fonksiyonların içinde yapılıyor.
Şurası size I2C'nin temel rutinlerin hakkında örnek sağlar.
https://electrosome.com/i2c-pic-microcontroller-mplab-xc8/

Çevrimdışı okg

  • Kıdemli
  • ****
  • İleti: 184
  • www.vhdl.club
Ynt: MPLAB Harmony Hakkında
« Yanıtla #6 : 20 Eylül 2017, 12:01:29 »
@baran123 o fonksiyonların içerisinde yazanları buraya ekleyebilir misiniz? Yoldayım,  telefondan zor bulurum muhtemelen
KTU Elektronik Haberleşme ^4