[an error occurred while processing this directive]
в родной доке атмеля брал...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено UraGun 12 октября 2006 г. 18:09
В ответ на: Поделитесь, плиз, примерчиком работы AVR с DS1307 по шине TWI отправлено <font color=gray>vinogradov aleksei</font> 12 октября 2006 г. 17:46

AVR315: Using the TWI module as I2C master (11 pages, revision B, updated 09/04)
This Application Note describes a TWI master implementation, in form of a fullfeatured driver and an example of usage for this driver.

http://www.atmel.com/dyn/products/app_notes.asp?family_id=607

после инициализации вот так :
//-------------------------
if ( ! TWI_Transceiver_Busy() )
{
// Check if the last operation was successful
if ( TWI_statusReg.lastTransOK )
{
// Determine what action to take now
if (TWI_operation == SEND_DATA)
{ // Send data to slave
messageBuf[0] = (TWI_targetSlaveAddress< messageBuf[1] = 0x00;
TWI_Start_Transceiver_With_Data( messageBuf, 2 );

TWI_operation = REQUEST_DATA; // Set next operation
}
else if (TWI_operation == REQUEST_DATA)
{ // Request data from slave
messageBuf[0] = (TWI_targetSlaveAddress< TWI_Start_Transceiver_With_Data( messageBuf, 9 );

TWI_operation = READ_DATA_FROM_BUFFER; // Set next operation
}
else if (TWI_operation == READ_DATA_FROM_BUFFER)
{ // Get the received data from the transceiver buffer
TWI_Get_Data_From_Transceiver( messageBuf, 9 );
//PORTB = messageBuf[1]; // Store data on PORTB.


time_sec = messageBuf[1]&0x7f;
time_min = messageBuf[2]&0x7f;
time_hour = messageBuf[3]&0x3f;
day_week = messageBuf[4]&0x07;
day_month = messageBuf[5]&0x3f;
month = messageBuf[6]&0x1f;
year = messageBuf[7]&0x1f;
TWI_operation = SEND_DATA; // Set next operation
}
}
else // Got an error during the last transmission
{
// Use TWI status information to detemine cause of failure and take appropriate actions.
TWI_Act_On_Failure_In_Last_Transmission( TWI_Get_State_Info( ) );
}
}

а при инициализации вот так :
//--------------------
// Send initial data to slave
messageBuf[0] = (TWI_targetSlaveAddress< messageBuf[1] = 0x00;
messageBuf[2] = 0x00;
TWI_Start_Transceiver_With_Data( messageBuf,3 );

while(TWI_Transceiver_Busy()){}

TWI_operation = SEND_DATA;

Есть заковыка, пока ещё не устранил - первую запись в регистр секунд бита отвечающего за то, чтобы часики пошли нужно сделать условной, т.к. если часто писать в этот байт нулевое значение при инициализации, часики отстают кажды раз на какое-то кол-во секунд и набегает много. Пока с этим не боролся, но думаю не очень сложная задачка :) Успехов.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание