XC8 mcc i2c örneği ve simülasyon problemim hk.

Başlatan MCansız, 14 Kasım 2019, 16:12:20

MCansız

Merhabalar,

 Mplabx ide üzerinde MCC ile i2c kodları oluşturarak TC74 sıcaklık sensörünü okumaya çalışıyorum. Örneklerden yararlanarak basitce bir kod yazdım.
 
 Yazmış olduğum yazılımı proteusta denediğimde doğru cevap alamıyorum(sıcaklık 0 C) ama i2c hattına i2c debugger bağladığımda çalışıyor. Bu problem proteusla veya yazdığım yazılımı alakalıdır bilemedim. Proteus örnek projelerinde böyle bir durum yok. Proteusun farklı versiyonlarını denedim sonuç aynı.


--


#include "mcc_generated_files/mcc.h"

#define I2C_ADDR_TC74 0x4D
unsigned char tempSign=0;

uint8_t ReadTemperature(void)
{
    volatile uint8_t readTemp;
    uint8_t TC74_cmd=0;
    I2C1_MESSAGE_STATUS status;
    
    I2C1_MasterWrite(&TC74_cmd,1,I2C_ADDR_TC74,&status);
    while(I2C1_MESSAGE_PENDING == status);
    
    I2C1_MasterRead(&readTemp,1,I2C_ADDR_TC74,&status);
    while(I2C1_MESSAGE_PENDING == status);
    
    if (readTemp >= 128)
        
    {
    
        readTemp=256 -readTemp;
        tempSign =1;
        
    }
    else
    {
        tempSign =0;
        
    }
    return readTemp;



}



void main(void) {

   
    SYSTEM_Initialize(); 
    
    INTERRUPT_GlobalInterruptEnable(); // Enable high priority global interrupts
    INTERRUPT_PeripheralInterruptEnable(); // Enable low priority global interrupts.

    while (1) 
       
    {
        ReadTemperature();
        if (tempSign == 1)
        
    {
    
            printf("temp: = -%d C\r\n",ReadTemperature());
        
    }
    else
    {
        printf("temp: =  %d C\r\n",ReadTemperature());
        
    }
        

        __delay_ms(1000);
    }
}

proje link https://www.dosya.tc/server23/wav5fv/45k22_i2c.rar.html

mehmet

#1
Adress 8-bit;
0b10011010 -> 0x9A
deneyin...
Zaten debug alanında da görülmekte...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

MCansız

Yazılımdaki adresi degistirdim ama hep 0 derece okuyorum tc74 ayarlarindan farklı adres secimleri yapıp yazılımda düzelttim ama i2c debug bagli olsada 0C okuyorum.

OG

2 pullup direncini tıklayıp edit penceresinden model type seceneğini "digital" yapınca duzgun okuyor.
isis, i2c yolu için direnç değerini beğenmemiş olabilir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

MCansız

#4
Alıntı yapılan: OG - 16 Kasım 2019, 07:45:522 pullup direncini tıklayıp edit penceresinden model type seceneğini "digital" yapınca duzgun okuyor.
isis, i2c yolu için direnç değerini beğenmemiş olabilir.

Teşekkürler hocam şimdi çalıştı. Proteus dökümanında analog direçlerin yüksek hesaplama gücü gerektirdiği yazıyor. Ama haberleşme bağlantılarında bunu digital olarak ayarlayın gibi bir şeye rastlamadım bunun bir bug olduğunu düşünüyorum.

tc74 ayarlarından adres seçeneklerini göster dediğimizde slaveID değerinin $9A(0x9A) olduğunu görüyorum ama bu 8 bitlik adrsin 1. biti yazma ve okumayı bildirdiğinden bunu 1 bit sağa kaydırdığımızda yani,

0x9A, 9=1001, A=1010, 3bit 101,  7bit= 0b1001101 (0x4D)
0x96,  9=1001, 6=0110, 3bit 011, 7bit=0b1001011  (0x4B)

7 bitlik adres değerlerimiz bu şekilde belirliyoruz.


mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr