Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 02.03.2014, 22:32  
begun
Гражданин KAZUS.RU
 
Регистрация: 18.07.2006
Сообщений: 858
Сказал спасибо: 228
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
begun на пути к лучшему
По умолчанию Помогите найти функции чтения-записи для 24с64

Друзья,
Atmega8 соединен с 24 с16 по I2C .Между ними идет нормальный обмен сигналами
используя нижемледующие функции чтения -записи:



-------------------------------------------------------------------------------------------------------------------

unsigned int eep_read(unsigned int address)
{
unsigned char data;
i2c_start();
i2c_write((EEPROM_BUS_ADDRESS | ((address››7) & 0x0E)));
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}
//-------------------------------------------------------------------------------------------------------------------
void eep_write(unsigned int address, unsigned char data)
{
i2c_start();
i2c_write((EEPROM_BUS_ADDRESS | ((address››7) & 0x0E)));
i2c_write(address);
i2c_write(data);
i2c_stop();
}

Для 24C64 эти функции не работают.
Все попытки найти их самостояиельно не увенчались успехом.
Самому составить их по даташиту Я не в состоянии.
Буду очень благодарен за предоставление информации по указанным функциям.
Реклама:
begun вне форума  
Непрочитано 02.03.2014, 23:03  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: помогите найти функции чтения-записи для 24с64

Код:
u8 I2C_24C_EEPROM_Write_Page_ByLen (u8 I2c_Address, u16 Mem_Address, char * pBuffer, u16 Len)
{
  u8 err;
	u8 PagesWritten = 0;
	u8 BytesToWrite;
	while (Len)
	{	
		if (Len‹MaxPageSizeBytes) 
		{
			BytesToWrite = Len;
			Len = 0;
		}
		else 
		{
			BytesToWrite = MaxPageSizeBytes;
			PagesWritten++;
			Len-= MaxPageSizeBytes;
		}
		
		err=I2c_Start(EEPROM_I2Cx);
		if (err) return err;
		err=I2c_WriteAddress(EEPROM_I2Cx, I2c_Address);
		if (err) return err;
		I2c_WriteByte(EEPROM_I2Cx, (0xFF00&Mem_Address)››8);
		I2c_WriteByte(EEPROM_I2Cx, 0x00FF&Mem_Address);
		while (BytesToWrite--) I2c_WriteByte(EEPROM_I2Cx, * pBuffer++);
		I2c_Stop(EEPROM_I2Cx);
		delay_ms(I2c_EEPROM_WriteTime_ms);
		
		Mem_Address+= MaxPageSizeBytes;
	}
  return I2c_Success;
}

u8 I2C_24C_EEPROM_Read_Byte (u8 I2c_Address, u16 Mem_Address, char * pBuffer)
{
  u8 err;
  err=I2c_Start(EEPROM_I2Cx);
  if (err) return err;
  err=I2c_WriteAddress(EEPROM_I2Cx, I2c_Address);
  if (err) return err;
  I2c_WriteByte(EEPROM_I2Cx, (0xFF00&Mem_Address)››8);
  I2c_WriteByte(EEPROM_I2Cx, 0xFF&Mem_Address);
  I2c_ReStart(EEPROM_I2Cx);
  I2c_NACK(EEPROM_I2Cx);
  I2c_WriteAddress(EEPROM_I2Cx, I2c_Address|1);
  * pBuffer = I2c_ReadByte(EEPROM_I2Cx);
  I2c_Stop(EEPROM_I2Cx);
  I2c_ACK(EEPROM_I2Cx);
  return I2c_Success;
}

u8 I2C_24C_EEPROM_Read_Page (u8 I2c_Address, u16 Mem_Address, char * pBuffer, u8 pBufferSize)
{
  u8 err=0;
	I2c_ACK(EEPROM_I2Cx);
  err=I2c_Start(EEPROM_I2Cx);
  if (err) return err;
  err=I2c_WriteAddress(EEPROM_I2Cx, I2c_Address);
  if (err) return err;
  I2c_WriteByte(EEPROM_I2Cx, (0xFF00&Mem_Address)››8);
  I2c_WriteByte(EEPROM_I2Cx, 0xFF&Mem_Address);
  I2c_ReStart(EEPROM_I2Cx);
  I2c_WriteAddress(EEPROM_I2Cx, I2c_Address|1);
  I2c_ACK(EEPROM_I2Cx);
  while (pBufferSize) 
  {
    * pBuffer++ = I2c_ReadByte(EEPROM_I2Cx);
    pBufferSize--;
    if (!pBufferSize) I2c_NACK(EEPROM_I2Cx);
  }
  I2c_Stop(EEPROM_I2Cx);
  
  return I2c_Success;  
}
Easyrider83 вне форума  
Эти 2 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
begun (02.03.2014), Dr.BIF (13.02.2022)
Непрочитано 02.03.2014, 23:36  
begun
Гражданин KAZUS.RU
 
Регистрация: 18.07.2006
Сообщений: 858
Сказал спасибо: 228
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: помогите найти функции чтения-записи для 24с64

Благодарю за оперативный ответ.
Извиняюсь за вопрос, а в CVAVR эти функции будут работать?, или их надо конвертировать?
begun вне форума  
Непрочитано 02.03.2014, 23:46  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: помогите найти функции чтения-записи для 24с64

Эти функции будут работать в любом С компиляторе.
Easyrider83 вне форума  
Непрочитано 02.03.2014, 23:56  
dash
Частый гость
 
Регистрация: 19.08.2004
Сообщений: 33
Сказал спасибо: 6
Сказали Спасибо 11 раз(а) в 9 сообщении(ях)
dash на пути к лучшему
По умолчанию Re: помогите найти функции чтения-записи для 24с64

Цитата:
(0xFF00&Mem_Address)››8
мнэээ... гуманитарий писал?
dash вне форума  
Непрочитано 03.03.2014, 08:37  
begun
Гражданин KAZUS.RU
 
Регистрация: 18.07.2006
Сообщений: 858
Сказал спасибо: 228
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: помогите найти функции чтения-записи для 24с64

уважаемый Easyrider83

если вас это не затруднит можно попросить подкинуть строчку примера как записать байт в 24с64 в cvavr на СИ, используя приведенные вами функции.
С чтентем бы я сам разобрался.
begun вне форума  
Непрочитано 03.03.2014, 09:40  
BolshoyK
Гражданин KAZUS.RU
 
Регистрация: 25.11.2009
Сообщений: 609
Сказал спасибо: 37
Сказали Спасибо 140 раз(а) в 72 сообщении(ях)
BolshoyK на пути к лучшему
По умолчанию Re: помогите найти функции чтения-записи для 24с64

begun, http://serg22.sibgtu.ru/radio/24c64_atmega32.zip
найдено где-то на просторах. под аврстудию.
Ввиду того, что всеми силами стараюсь слезть с cvavr, вспоминать и переписывать не буду.
BolshoyK вне форума  
Непрочитано 03.03.2014, 10:10  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: помогите найти функции чтения-записи для 24с64

Прошу прощения у автора, что лезу в его код.
Ну как бы вырезать кусочек,
PHP код:
u8 I2C_24C_EEPROM_Write_Byte (u8 I2c_Addressu16 Mem_Addresschar Dat)
{
  
u8 err;
        
err=I2c_Start(EEPROM_I2Cx);
        if (
err) return err;
        
err=I2c_WriteAddress(EEPROM_I2CxI2c_Address);
        if (
err) return err;
        
I2c_WriteByte(EEPROM_I2Cx, (0xFF00&Mem_Address)››8);
        
I2c_WriteByte(EEPROM_I2Cx0x00FF&Mem_Address);
        
I2c_WriteByte(EEPROM_I2CxDat);
        
I2c_Stop(EEPROM_I2Cx);
        
delay_ms(I2c_EEPROM_WriteTime_ms);
                      return 
I2c_Success;

Boba_spb вне форума  
Непрочитано 03.03.2014, 10:58  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: помогите найти функции чтения-записи для 24с64

С байтом там проблем никаких нет. А вот страничная запись - это тот еще финт ушами. Я написал на одной локальной переменной, которая листает страницы. Но работает корректно только в том случае, если писать с начала страницы. В противном случае там еще надо пару строчек добавить. Иначе цикличная запись угрохает данные в начале страницы. В общем, у автора ошибка лишь в том, что он адрес ячейки передает один раз - 8 бит. А у 64ой адреса двухбайтовые. Сначала старший, затем младший. Можно было ему просто одну строчку добавить, но тогда он бы никогда ничему не научился и я решил по вредничать.
Easyrider83 вне форума  
Непрочитано 03.03.2014, 12:47  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: помогите найти функции чтения-записи для 24с64

Дык она внутри при записи старницы с адресом играет токо на 5 младших битах. Как белка в колесе бегает по одной и той же странице.

При записи как бы вот так модифицирует адрес.
Adrress= (Adrress & (~0x1f) ) | ( (Adrres++) & 0x1f).
Boba_spb вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADC для ATXmega128A1 - помогите найти ошибку в коде Fogtech AVR 21 25.02.2013 12:01
Помогите найти исходники для отладочной платы Алексaндр Микроконтроллеры, АЦП, память и т.д 8 02.10.2011 09:36
Помогите найти схему для лампового усилителя AMC CVT 3030 radio_lover Поиск схем. Делимся схемами 0 02.10.2007 00:55


Часовой пояс GMT +4, время: 14:56.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot