16 Ekim 2018, 16:38:47

Haberler:

Picproje Pazar Sohbetleri: https://bit.ly/2GHsjAK


MPLAB Harmony Hakkında

Başlatan okg, 12 Eylül 2017, 23:45:36

okg

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 - YTU Haberleşme^YL

baran123

Harmony falan fark etmiyor bu I2C nerede olursa olsun takılıyor !!!
Durum registerlerını kontrol et(debug) mutlaka biri SET/RESET olmuyordur.
İdrak i meali bu küçük akla gerekmez, zira bu terazi bu kadar sıkleti çekmez.

okg

19 Eylül 2017, 22:22:05 #2 Son düzenlenme: 19 Eylül 2017, 23:01:21 okg
Alıntı yapılan: baran123 - 13 Eylül 2017, 00: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

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(countcount 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);
    
    
        
= ((((int16_t)buffer[1]) << 8) | buffer[0]) >> 6;
        
= ((((int16_t)buffer[3]) << 8) | buffer[2]) >> 6;
        
= ((((int16_t)buffer[5]) << 8) | buffer[4]) >> 6;
}



debug sonrası:

KTU Elektronik Haberleşme - YTU Haberleşme^YL

baran123

Harmony bilmiyorum ama benim PIC18 için I2C rutinlerim şu şekilde

Write
Kod Seç

void I2C_WriteData
(uint8_t slaveAddruint8_t regAddruint8_t data)
{
    
I2C_State(I2C_State_Start);                   
    
I2C_Address(slaveAddrI2C_WRITE);
    
I2C_Write(regAddr);
	
                
    
I2C_Write(data);
	
         
    
I2C_State(I2C_State_Stop); 
}


Read
Kod Seç

void I2C_ReadData
(uint8_t slaveAddruint8_t regAddruint8_t *data)
{
    
I2C_State(I2C_State_Start);                       
    
I2C_Address(slaveAddrI2C_WRITE); 
    
I2C_Write(regAddr);
	
              
    
I2C_State(I2C_State_Restart);                
    
I2C_Address(slaveAddrI2C_READ);   
    *
data I2C_Read(I2C_NACK);
    
I2C_State(I2C_State_Stop);   
}
İdrak i meali bu küçük akla gerekmez, zira bu terazi bu kadar sıkleti çekmez.

okg

@baran123  peki idle, ack veya nack işlemleri nerede yapılıyor?  Start ve write fonksiyonlarında mı tanımlı?
KTU Elektronik Haberleşme - YTU Haberleşme^YL

baran123

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/
İdrak i meali bu küçük akla gerekmez, zira bu terazi bu kadar sıkleti çekmez.

okg

@baran123 o fonksiyonların içerisinde yazanları buraya ekleyebilir misiniz? Yoldayım,  telefondan zor bulurum muhtemelen
KTU Elektronik Haberleşme - YTU Haberleşme^YL