Как запараллелить USART в Mega162.

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 6339
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

ILYAUL писал(а): Весы предавали данные в своём протоколе и со своей скоростью , данные на принтер шли уже в ASCII протоколе
Вот тут большой простор для творчества : сделать незаметную кнопочку, чтобы взвесили одно, а напечатали чуть-чуть другое :) Правда, УБЭП не оценит :(
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

Евгений33, если так строить программу, то можете легко пропустить принимаемые даннные из нулевого каналов, пока ожидаете готовность первого и наоборот

Jack_A, а насчет убэп, то вряди им это интересно будет - весы не являются фискальным устройством
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Сообщение __Alexander »

igor-x писал(а):да вроде прошло время сессий... чо ему шифроваться.
а пока автор думает ,предлагаю устроить угадайку(у кого больше "телепатор") - для чего нужен такой девайс

Я могу угадать. Точнее мне тоже такой надо. Есть МК, на одном уапп висит бутлоадер, по второму управляет девайсом. Задача - на компе запускаем вместо бута программу, которая через МК напрямую управляет деваайсом.

И это, не сильно теорией размахивайтесь, т.к. я пробывал и программно с udr1 на udr0 и аппаратно пинами дергать. Не получилось. В протеусе всё ок.

кварц 16 мгц. скорость 14400 для начала.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Перемычка - уже не модно?
Реклама
Эиком - электронные компоненты и радиодетали
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

Alexander, вы часто собираетесь менять программу МК? 2 уарт вам не надо
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Сообщение __Alexander »

ploop писал(а):Перемычка - уже не модно?
Много перемычек. Если бы просто соединить... так надо от ног мк отсоединить )
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Сообщение __Alexander »

igor-x писал(а):Alexander, вы часто собираетесь менять программу МК? 2 уарт вам не надо
Да. В том то и соль, что программа будет часто меняться в зависимости от условий. Т.е. бут там должен быть 100%. И два уарта тоже, т.к. второй преобразовуется в другой интерфейс и для прошивки бутом не подходит.
Встал на лапы
Аватара пользователя
Сообщения: 85
Зарегистрирован: Пн ноя 08, 2010 14:07:14
Откуда: Владимирская область

Сообщение Евгений33 »

Промоделировал в Proteus. На одном терминале данные приходят но только несколько посылок и стопарится, переключаемся на другой и там аналогичная ситуация. Далее переключаемся на первый терминал и опять пара посылок и стопор. :(
.....
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Евгений33, если так строить программу, то можете легко пропустить принимаемые даннные из нулевого каналов, пока ожидаете готовность первого и наоборот
Или вы не читаете ответы?
Встал на лапы
Аватара пользователя
Сообщения: 85
Зарегистрирован: Пн ноя 08, 2010 14:07:14
Откуда: Владимирская область

Сообщение Евгений33 »

Добрый вечер.При отладке в Proteus на скорости 9600 бод пользовался стандартными скоростями терминалов. При отладке на 400000 бод, ставлю default и получаю в основном ошибки.
.....
Встал на лапы
Аватара пользователя
Сообщения: 85
Зарегистрирован: Пн ноя 08, 2010 14:07:14
Откуда: Владимирская область

Сообщение Евгений33 »

Ну вот вроде бы доделал, только не понятен один момент, при отладке в Proteus при посылки с терминала USART0 данные четко отображаются на обеих терминалах, при посылке с терминала USART1 данные на терминал USART0 приходят нормально, а вот на самом USART1 отображаются с запазданием, то есть при первой посылке с USART1(например число 2), на USART1 ни отображается ничего, а на USART0 - 2, при последующих посылках происходит то же самое запаздывание, шлем число 3, на USART1 отображается старое число (в нашем случае 2), а на USART0 - 3.


#include <mega162.h>
#include <stdio.h>

void main(void)
{

unsigned char data;

#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x86;
UBRR0H=0x00;
UBRR0L=0x52;

UCSR1A=0x00;
UCSR1B=0x18;
UCSR1C=0x86;
UBRR1H=0x00;
UBRR1L=0x52;


ACSR=0x80;

while (1)
{
while(((UCSR0A & 10000000)|(UCSR1A & 10000000))==0);

if((UCSR0A & 10000000)==1);
{
data=UDR0;
while ((UCSR1A & 100000)==0);
UDR1=data;
}
if((UCSR1A & 10000000)==1);
{
data=UDR1;
while ((UCSR0A & 100000)==0);
UDR0=data;
}

};
}
.....
Встал на лапы
Аватара пользователя
Сообщения: 85
Зарегистрирован: Пн ноя 08, 2010 14:07:14
Откуда: Владимирская область

Сообщение Евгений33 »

Уважаемые, не подскажите ли пожалуйста почему при проверке каждого из регистров UCSR0A и UCSR1A в выше приведенном коде, происходит выполнение условий в каждом операторе if, как будто оба флага RXC в UCSRA дают готовность, всю голову себе сломал. :dont_know:
.....
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

Условия выписаны неправильно.
Сколько раз можно отвечать на одни и те же вопросы...
if((UCSR0A & 10000000)==1)
{
}
Смотрите, даже если написать
if((UCSR0A & 0b10000000)==1)
Условие никогда не выполнится, потому что даже при наличии 1 в старшем разряде
0b10000000 не будет равняться 0b00000001
Условие лучше записывать через true false , где
#define false 0
#define true !false
true будет истинно при любых значениях результата, отличных от 0
if((UCSR0A & 0b10000000)==true)
Уже правильно, хотя записывают проще
if(UCSR0A & 0b10000000)
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 85
Зарегистрирован: Пн ноя 08, 2010 14:07:14
Откуда: Владимирская область

Сообщение Евгений33 »

Дорого времени суток уважаемые! Последнее что удалось сделать по данной теме: данные идут в обеих направлениях. При скорости 115200 посылка размером 28 байт идет без потерь, при скорости 460800 теряется два байта, они просто не доходят, при скорости 921600 практически у всех байтов наблюдается несоответствие изначальной информации. Ни как ни могу уйти от ошибок! :(
Вложения
1.txt
(1.97 КБ) 212 скачиваний
.....
Встал на лапы
Аватара пользователя
Сообщения: 85
Зарегистрирован: Пн ноя 08, 2010 14:07:14
Откуда: Владимирская область

Сообщение Евгений33 »

B1 и D2 сигналы управления драйверами RS485 max1487, 0 принимаем, 1 передаем. Есть линия длиной 0,6 км по которой надо передавать данные по RS-485, провод-не витая пара, по этому нужно промежуточное устройство которое бы скажем так "усиливало" бы цифровой сигнал после 0,3 км и передавало данные в обеих направлениях.
.....
Ответить

Вернуться в «AVR»