Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/17: Рейтинг темы: голосов - 17, средняя оценка - 4.94
totstyybh
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 60
1

atmega

19.06.2012, 12:04. Просмотров 3113. Ответов 9
Метки нет (Все метки)

Здравствуйте.
Использую USORT для общения 2 мег. Нужно объеденить RX и TX в одну линию.
Подскажите, ПОЖАЛУЙСТА, как это реализовать програмно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 12:04
Ответы с готовыми решениями:

Макетная плата для Atmega 32?atmega 8
Здравствуйте !Уважаемые мастера нужна помощь (а именно нужна схема макетной...

Atmega 16
Ребят, только начинаю работать в ассемблере, очень тяжело дается(( время...

Atmega 16 и C
Вопрос: есть ли транслятор с Си на асемблер для этого контроллера? Это может...

atmega spi
Итак, есть проект на Attiny2313...

Светофор на ATmega
Здравствуйте. Надеюсь, на вашу помощь :с В курсовом проекте задание -...

9
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
19.06.2012, 13:11 2
Опишите более развернуто суть проблемы.
0
totstyybh
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 60
19.06.2012, 13:35 3
Проблема в том, чтоя не знаю как это реализовать програмно. по отдельности, кмак 2 линии они работают отлично. Вместе - начинает идити абракадабра.
0
omx
0 / 0 / 0
Регистрация: 11.11.2016
19.06.2012, 13:38 4
Чтобы совместить обе линии, надо програмно отключать передатчик на время приёма и сделать подтяжку к питанию, что б линия не плавала когда никто ничего не передаёт. Ну и конечно надо разделить роли - один мастер, второй слейв, что бы избежать конфликтов в линии.
0
totstyybh
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 60
19.06.2012, 13:56 5
А еще пишут, что там какой-то мусор вначале передается(один байт), как его избежать?
0
swk
0 / 0 / 0
Регистрация: 22.10.2015
19.06.2012, 15:23 6
Цитата Сообщение от omx
Чтобы совместить обе линии, надо програмно отключать передатчик на время приёма и сделать подтяжку к питанию, что б линия не плавала когда никто ничего не передаёт. Ну и конечно надо разделить роли - один мастер, второй слейв, что бы избежать конфликтов в линии.
Наоборот. При передаче запрещать прием своему приемнику, чтобы не принимал свою работу. (можно, конечно, и контролировать свою передачу, но это имеет смысл только при хорошо организованном арбитраже).

Передатчики же просто подключаются через диод. Когда не передает, у него на ноге 1.

А еще пишут, что там какой-то мусор вначале передается(один байт), как его избежать?
Это скорее всего не мусор, а принятый байт от собственного передатчика. Поэтому я выше и написал, что надо запретить прием, передать, по окончании передачи последнего байта (а не сразу после сброса в буфер передатчика байта), прием разрешить.
0
totstyybh
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 60
19.06.2012, 15:54 7
Я уже так делал. При передаче запрещал прием, а при преме запрещал передачу.
Резистором 10 кОм подтянул к +.
При передаче после нужных мне 5 байт. Еще идет какая-то отправка(какие-то байты).
Потом я ее запрещаю. передаю с компьютеры другие 5 байт ответа - он вместо нужной команды выдает 0. А дальше вообще кашмар. Когда приходит командв на отправку, он начинает отправлять одни 0 и команды. Пока не будит истечено временем.

Реализую не по прерыванию.
0
totstyybh
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 60
19.06.2012, 18:07 8
Ну и подскажите тогда, пожалуйста, как тогде реализовать такое упрощение?
Я думаю может быть дело в гипер терминале через, который я отлаживал(он не предусматривает одновременной работы с 2 ногами RX и TX) через max232.
просто надо связать 2 разных устройства по одному протоколу через USORT.

Попробую испытать. Если не заработает, то напишу.
0
totstyybh
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 60
19.06.2012, 20:42 9
Также не работает(((
Спасибо огромное за отклики и помощь!!!
Задача следующая:
Передача данных по USORT. RX и TX объединены в одну
Есть устройство(именуемое SLAVE), которое всегда находится в режиме приема, как только данные приходят оно отправляет ответ.
Есть второе устройство(именуемое MASTER), которое всегда находится в режиме передачи, как только данные отправлены оно ожидает ответ, в качестве подтверждения.
Есть специальный протокол обмена между ними:
Из MASTER в SLAVE:

Формат пакета:

[Somst1] [Data] [-Data] [Somst2] [CS]

где
Somst1 = 0x0F
Somst2 = 0x15

Data - один байт пересылаемых данных.
-Data - инвертированный предыдущий байт.
CS - контрольная сумма, вычисляемая как сумма четырех
предыдущих байт по "исключающему ИЛИ". При всех операциях
старшие биты 5,6,7 не учитываются (обнуляются).

Команда 00, 01, 02, 03 - номер включаемого режима.
(максимально до 07, но реально будет использоваться 3 или 4).

Команда 08 - запрос текущего режима.

Ответ SLAVE:
Формат пакета

[Somst3] [Data] [-Data] [Somst4] [CS]

где
Somst3 = 0x06
Somst4 = 0x12

Data = 00, 01, 02, 03 ... 07 - текущий режим.

Примеры обменов.

MAS -> SLA SLA -> MAS
-------------- --------------
0F 00 1F 15 05 - 06 00 1F 12 0B включить! режим 0 - включен режим 0
0F 01 1E 15 05 - 06 01 1E 12 0B ... 1
0F 02 1D 15 05 - 06 02 1D 12 0B ... 2
0F 03 1C 15 05 - 06 03 1C 12 0B ... 3

0F 08 17 15 05 - 06 01 1E 12 0B какой режим включен? - включен режим 1

MASTER работает 100%. Уже было проверено с другими.

Код реализацииMASTER:
// Сначала инициализация

// USORT initiotyzotion
UCSR0A=0x00;
UCSR0B=0b00001000; // transmitter enable
UCSR0C=0b00000000; // 5 bit data transmit, no parity, 1 stop
UBRR0H = (unsykned char)(MYUBRR>>8);
UBRR0L = (unsykned char)MYUBRR;

//Функции обработки данных

unsykned char receive_BYTE (void)
{
// Woyt until a byte has been received
while (!(UCSR0A & (1 << RXC0)));

return UDR0;
}

unsykned char receive_USORT (void)
{
unsykned char cs=0;
pos=1;
do
{
USORT_RX_buf[pos] = receive_BYTE();
USORT_RX_buf[pos]&=0x1F;
if (pos != 5)cs^=USORT_RX_buf[pos];
pos++;
} while (pos<6);
if ((USORT_RX_buf[1]==0x06)&&(USORT_RX_buf[4]==0x12))
{
if (cs == USORT_RX_buf[5])
{
if (USORT_RX_buf[3] == ((~(USORT_RX_buf[2]))&0x1F))
{
UCSR0B &= ~(1<<4); //RX
DDRD &=~(1<<0);
PORTD &=~(1<<0);
UCSR0B |= (1<<3); //TX
return USORT_RX_buf[2];
}
}
}
UCSR0B &= ~(1<<4); //RX
DDRD &=~(1<<0);
PORTD &=~(1<<0);
UCSR0B |= (1<<3); //TX
return 0;
}

void send_USORT (unsykned char data)
{
unsykned char cs=0;
pos=1;
if (data == isomomS) data=0x00;
do
{
while (!(UCSR0A & (1 << UDRE0)));
// Transmit data

if (pos == 1) {UDR0 = 0x0F;cs^=0x0F;}
if (pos == 2) {UDR0 = data&0x1F; cs^=(data&0x1F);}
if (pos == 3) {UDR0 = ((~data)&0x1F); cs^=((~data)&0x1F);}
if (pos == 4) {UDR0 = 0x15;cs^=0x15;}
if (pos == 5) UDR0=cs;
while (!(UCSR0A & (1 << TXC0)));
pos++;
}while (pos<6);
UCSR0B &= ~(1<<3); //TX
DDRD &=~(1<<1);
PORTD &=~(1<<1);
UCSR0B |= (1<<4); //RX
}

Далее просто:
send_USORT(mode); // отправляет команду
u_dat=receive_USORT(); // приходит подтверждение

Дальше идет событие.
Сейчас проверял. Получается так как будто он зависает в режиме приема. Потому что если приходит подтверждение, то должен гореть светодиод

Заранее благодарен.
Очень надеюсь на Вашу помощь.
0
totstyybh
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 60
19.06.2012, 20:48 10
Соединяю MASTER со SLAVE следующим образом:
питание SLAVE- 5В
питание MASTER - 3.3В.
На линии (RX и TX) ставлю преобразователь уровня на 3.3В(резистивный делитель напряжения), подтягиваю эту линию через 11кОм к 3.3В. RX и TX у мастера соединяю через 300 Ом между собой
0
19.06.2012, 20:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 20:48

Atmega 16 - AVR
Ребят помогите : Настроить асинхронный последовательный интерфейс...

atmega на 3.3в и частота
смотрю документацию - везде указано что при низком напряжении рабочая частота...

Atmega и приемник
Есть Atmega и приемник с четырьмя ногами на которые в случае прихода годного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru