реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> I2C+ATtiny2313+UART, Как связать при помощи ATtiny2313 I2C с RS-232
MichaZ
сообщение Jan 27 2006, 13:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 20-10-05
Пользователь №: 9 886



Доброго дня всем!

Помогите с следующей проблемой.
Возникла необходимость сделать 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 байт)

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

премного благодарен Всем,кто отзовется

Сообщение отредактировал MichaZ - Jan 27 2006, 13:29
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 28 2006, 20:43
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Ошибка в 17-й строке.. © АП

Если хотите получить помощь, то попытайтесь более четко сформулировать вопрос. Кто что куда шлет, зачем шлет, каким терминалом, что и от кого принимается, что ожидалось увидеть в терминале и т.д., чтобы проблема стала понятна не только Вам, но и тем от кого Вы ждете помощи.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Jan 30 2006, 07:31
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(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 - абсолютно не понятно как эти ваши функции работают ???
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016