Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip MPLAB C serisi => Konuyu başlatan: okg - 12 Eylül 2017, 20:45:36

Başlık: MPLAB Harmony Hakkında
Gönderen: okg - 12 Eylül 2017, 20: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.
Başlık: Ynt: MPLAB Harmony Hakkında
Gönderen: baran123 - 12 Eylül 2017, 21: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.
Başlık: Ynt: MPLAB Harmony Hakkında
Gönderen: okg - 19 Eylül 2017, 19:22:05
Alıntı yapılan: baran123 - 12 Eylül 2017, 21: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.

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

#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ı:

(https://i.hizliresim.com/JOXOVE.png)
Başlık: Ynt: MPLAB Harmony Hakkında
Gönderen: baran123 - 19 Eylül 2017, 20:46:54
Harmony bilmiyorum ama benim PIC18 için I2C rutinlerim şu şekilde

Write

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

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);   
}
Başlık: Ynt: MPLAB Harmony Hakkında
Gönderen: okg - 19 Eylül 2017, 20:53:23
@baran123  peki idle, ack veya nack işlemleri nerede yapılıyor?  Start ve write fonksiyonlarında mı tanımlı?
Başlık: Ynt: MPLAB Harmony Hakkında
Gönderen: baran123 - 19 Eylül 2017, 20: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/
Başlık: Ynt: MPLAB Harmony Hakkında
Gönderen: okg - 19 Eylül 2017, 21:01:29
@baran123 o fonksiyonların içerisinde yazanları buraya ekleyebilir misiniz? Yoldayım,  telefondan zor bulurum muhtemelen