Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: [AtMega48]Не удается работать с 24lc512 при помощи либы Procyon AVRlib
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
cvv
после записи i2c eeprom 24lc512 на скорости 400 кбит я читаю не тоже самое что писал. вернее ф-я i2ceepromReadByte возвращает всегда старший байт адреса.
Пример читающего кода:

Код
int main(void)
{      
// Crystal Oscillator division factor: 1

#ifndef __GNUC__
#pragma optsize-
#endif
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
InitChip();
SPI_SlaveInit();
i2cInit();
i2ceepromInit();

asm __volatile__("wdr");

static unsigned short i;
  
for(i=0;; i++)
{
    unsigned char byte;
    byte = i2ceepromReadByte(0, i);

    OutData(_BV(0), digit_value_mask[i      &0x000f]&0x7f);
    OutData(_BV(1), digit_value_mask[(i>>4) &0x000f]&0x7f);
    OutData(_BV(4), digit_value_mask[(i>>8) &0x000f]&0x7f);
    OutData(_BV(5), digit_value_mask[(i>>12)&0x000f]&0x7f);

    OutData(_BV(2), digit_value_mask[byte      &0x0f]&0x7f);
    OutData(_BV(3), digit_value_mask[(byte>>4) &0x0f]&0x7f);

    delay_ms(500);
}


400 кБит выставляется в i2cInit()
все прерывания всегда запрещены так как я понял что для работы i2ceepromReadByte() они не нужны
aesok
Цитата(cvv @ Jun 10 2008, 10:43) *
все прерывания всегда запрещены так как я понял что для работы i2ceepromReadByte() они не нужны


Как вы пришли к такому пониманию? Можно услышать логическую цепочку?

Еще в начале функции 'i2cInit' есть код:

Код
00055     // set pull-up resistors on I2C bus pins
00056     // TODO: should #ifdef these
00057     sbi(PORTC, 0);  // i2c SCL on ATmega163,323,16,32,etc
00058     sbi(PORTC, 1);  // i2c SDA on ATmega163,323,16,32,etc
00059     sbi(PORTD, 0);  // i2c SCL on ATmega128,64
00060     sbi(PORTD, 1);  // i2c SDA on ATmega128,64


Но в ATmega48 TWI расположен на портах PC4, PC5. у вас есть в схеме подтягивающие регистры?

Анатолий.
cvv
Схема подключения

Цитата(aesok @ Jun 10 2008, 09:13) *
Еще в начале функции 'i2cInit' есть код:

Код
00055     // set pull-up resistors on I2C bus pins
00056     // TODO: should #ifdef these
00057     sbi(PORTC, 0);  // i2c SCL on ATmega163,323,16,32,etc
00058     sbi(PORTC, 1);  // i2c SDA on ATmega163,323,16,32,etc
00059     sbi(PORTD, 0);  // i2c SCL on ATmega128,64
00060     sbi(PORTD, 1);  // i2c SDA on ATmega128,64


Но в ATmega48 TWI расположен на портах PC4, PC5. у вас есть в схеме подтягивающие регистры?

Анатолий.


у меня в схеме внешние подтягивающие резисторы а упомянутые вами строчки закоментированы как не относящиеся к i2c.

Цитата(aesok @ Jun 10 2008, 09:13) *
Как вы пришли к такому пониманию? Можно услышать логическую цепочку?


например по тому что при входе в соответсвующие ф-и прерывания вырубаются - а при выходе возвращаются:

Код
  
   // disable TWI interrupt
   //cbi(TWCR, TWIE);

...
Код
    // enable TWI interrupt
    //sbi(TWCR, TWIE);
    
    return retval;


или по следующим комментариям например:
Код
//! send I2C data to a device on the bus (non-interrupt based)                                                  
u08 i2cMasterSendNI(u08 deviceAddr, u08 length, u08* data);                                                      
//! receive I2C data from a device on the bus (non-interrupt based)                                              
u08 i2cMasterReceiveNI(u08 deviceAddr, u08 length, u08 *data);
aesok
Код
byte = i2ceepromReadByte(0, i);


Проверьте адрес EEPROM, по моему тут должен быть полный I2C адрес
byte = i2ceepromReadByte(0xA0,i);

Анатолий.
cvv
Цитата(aesok @ Jun 10 2008, 10:40) *
Код
byte = i2ceepromReadByte(0, i);


Проверьте адрес EEPROM, по моему тут должен быть полный I2C адрес
byte = i2ceepromReadByte(0xA0,i);

Анатолий.

ща проверю. на 99% вы правы.

Поехало. БОЛЬШОЕ СПАСИБО.
Сергей Борщ
Цитата(cvv @ Jun 10 2008, 09:43) *
вернее ф-я i2ceepromReadByte возвращает всегда старший байт адреса.
Цитата(cvv @ Jun 10 2008, 13:19) *
Поехало. БОЛЬШОЕ СПАСИБО.
Удивительно. И что, эта библиотека никак не сообщала вам, что микросхема не выдавала ACK на запись адреса? Тогда вас ждут еще сюрпризы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.