Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: I2C+ATtiny2313+UART
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
MichaZ
Доброго дня всем!

Помогите с следующей проблемой.
Возникла необходимость сделать 4 порта RS-232 к которым будут обращаться по I2C.
Для реализации на 2313 (там USI из которого делаю TWI) пользуюсь аппнотами и программами Atmel.
В отдельности прием и передача работает,если на слейве в цикле пишу следующее:

для приема(относительно I2C)
if(USI_TWI_Data_In_Receive_Buffer())
{
temp=USI_TWI_Receive_Byte();
USART_interrupt_transmit(temp2);
}
для передачи
if(DataInUARTReceiveBuffer())
{
temp=USART_interrupt_receive();
USI_TWI_Transmit_Byte(temp);
}

необходимо сделать управление,чтобы можно было писать на уарт и читать с него
делаю следующее:
for(;;)
{
if(USI_TWI_Data_In_Receive_Buffer())
{
temp=USI_TWI_Receive_Byte(); - читаю команду,что слейву делать
}
switch (temp) - вибираю необходимое действие
{
case TWI_MASTER_WRITE_4BYTE_UART: - пробую писать на уарт 4 байта
for(i=0;i<3;i++)
{
temp2=USI_TWI_Receive_Byte();
USART_interrupt_transmit(temp2);
}
break;

case....

}
}
то есть анализирую байт после адреса как команду что слейву делать.
мастером шлю:
первая посылка:
адрес и код команды TWI_MASTER_WRITE_4BYTE_UART
вторая посылка:
адрес,01,02,03,04
но в терминале вижу

01 02 04...01 02 04 так далее

скорость на уарте низкая-4800
на I2C <100 khz

буфер и со стороны I2C и со стороны уарта.(16 байт)

что я не так делаю?

премного благодарен Всем,кто отзовется
defunct
Ошибка в 17-й строке.. © АП

Если хотите получить помощь, то попытайтесь более четко сформулировать вопрос. Кто что куда шлет, зачем шлет, каким терминалом, что и от кого принимается, что ожидалось увидеть в терминале и т.д., чтобы проблема стала понятна не только Вам, но и тем от кого Вы ждете помощи.
andrvisht
Цитата(MichaZ @ Jan 27 2006, 17:07) *
case TWI_MASTER_WRITE_4BYTE_UART: - пробую писать на уарт 4 байта
for(i=0;i<3;i++)
{
temp2=USI_TWI_Receive_Byte();
USART_interrupt_transmit(temp2);
}
break;
то есть анализирую байт после адреса как команду что слейву делать.
мастером шлю:
первая посылка:
адрес и код команды TWI_MASTER_WRITE_4BYTE_UART
вторая посылка:
адрес,01,02,03,04
но в терминале вижу
01 02 04...01 02 04 так далее


ну во первых вы отсылаете именно 3 байта.
А то что вы видите в терминалке, (кстати какой ?) а не равен ли у вас TWI_MASTER_WRITE_4BYTE_UART = 4 ?
во всем остальном поддерживаю defunct - абсолютно не понятно как эти ваши функции работают ???
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.