Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-апр-27 12:02

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Таймер на 1886ВЕ4
СообщениеДобавлено: 2014-мар-03 11:34 
Не в сети

Зарегистрирован: 2009-май-25 16:41
Сообщения: 206
Откуда: АО "ПКК Миландр"
oleg_snz писал(а):
Здравствуйте! Теперь такая проблема:
МК 1886ВЕ4. Тактовая частота 24МГц (половина частоты USB). Активны два прерывания - по переполнению таймера T0 и по входу A0. Источник тактовой частоты таймера - внешний генератор с частотой 20 МГц, после предделителя на четыре остается 5 МГц.
В обработчике по таймеру ведется учет числа переполнений.
При поступлении импульса на вход A0, в обработчике по данному входу читается текущее значения счетчика и передается по USB в ЭВМ.
Так вот, суть проблемы в том, что значения времени, получаемые на ЭВМ, не соответствую ожиданиям.
Например, если на вход A0 подать частоту 500 Гц, на ЭВМ получаем вот такие значения:

№__hi____lo_____TMR0H__TMR0L___t_фактич.,с___t_факт.к.0,с____t_ожидаемое.,с____отклонение, с
1___0____167____6_______237_____2.189257_____0______________0________________0
2___0____167____47______253_____2.191259_____0.0021024______0.002_____________0.000102
3___0____167____87______13______2.193359_____0.0041024______0.004_____________0.000102
4___0____167____126_____29______2.195359_____0.0061024______0.006_____________0.000102
5___0____167____163_____45______2.197257_____0.008__________0.008_____________0
6___0____167____202_____61______2.199257_____0.01___________0.010_____________0
7___0____167____243_____77______2.201359_____0.0121024______0.012_____________0.000102
. . . . . . . . . . . . . . . .

Замечено, что отклонение фактических значений времени от ожидаемых или близко к 0, или составляет 102 мкс, что соответствует 510 отсчетам таймера (при T=0,2 мкс).
Такая ситуация наблюдается на протяжении всего периода измерения, причем ошибка не накапливается.
Правильность вычислений и передачу данных на ПК вроде проверил.
Может я как-то криво читаю таймер?

Если посчитать на сколько у Вас изменяется таймер за 0.2 мс, то получаются интересные цифры:
10512 (+512 !!!) / 10000 / 10000 / 9488 (-512 !!!) / 10000 / 10512 (+512 !!!)/ Т.е. ошибка всегда +/- 512.
Если расписать считанные Вами значения таймера, то получиться:
1 - 110.1110.1101
2 - 10.1111.1111.1101
3 - 101.0111.0000.1101
в этих значениях и далее во всех приведенных всегда 9 бит равен "1". Это и дает ошибку на +/- 512.
Это ошибка в некоторых старых контроллерах 1886ВЕ3 и ВЕ4, которая сейчас исправлена. Возникает она только при считывании TMR0H при включенном 02h или 0Ah банке периферийных регистров. У Вас как раз и включен банк 02h, т.к. используется регистр EP3_REG. Измените номер банка при чтении TMR0H и ошибка исчезнет.

oleg_snz писал(а):
В спецификации на ВЕ4 сказано:
"Проблема считывания 16-разрядного значения регистров TMR0L и TMR0H
заключается в том, что после считывания младшего (или старшего) байта, его
значение может измениться от FFh к 00h. Для обеспечения однозначного
считывания состояния счетчика рекомендуется маскировать сигнал запроса на
обработку прерывания"
Не понятен смысл данного абзаца. Какое прерывание нужно маскировать и зачем?
Ведь даже если прерывания будут запрещены, есть вероятность переполнения одного из регистров после его чтения.

К сожалению спецификация много раз редактировалась различными "редакторами". А исходный смысл следующий.

При считывании значения таймера, Вы выполняете два 8-ми разрядных чтения, т.к. таймер 16-ти разрядный. И в момент между чтениями может произойти увеличение значения таймера с переполнением младшего байта. Это приведет к тому, что считанные 8-ми разрядные части составят ошибочное 16-ти разрядное число. Например, при первом считывании таймера его значение было 01FFh. Затем таймер инкрементировался и его значение при втором считывании стало 0200h. Если первым Вы считали младший байт, то у Вас получиться 02FFh, если первым считали старший байт - то 0100h, и то и другое значение далеко от действительности. И соответственно это нужно исправлять. Алгоритмов коррекции множество и каждый придумывает для себя наиболее подходящий. В общем суть сводится к тому, что необходимо контролировать событие переполнения младшей части таймера между чтениями частей таймера.

А упоминание про запрет прерываний имеет следующий смысл. Между чтениями половинок таймера может дополнительно возникнуть ещё и какое-либо прерывание и в этом случае таймер может успеть "нащёлкать" очень много и истинное его значение станет установить ещё сложнее.

P.S. А моё письмо про прерывания Вы получили?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2014-мар-03 16:42 
Не в сети

Зарегистрирован: 2012-фев-16 20:47
Сообщения: 11
oleg, спасибо за разъяснение. Завтра попробую изменить номер банка, очень надеюсь что все наладится.
Письмо про прерывания получил, благодарю за оперативный ответ. Хорошо было бы теперь исправить ошибку, или указать на ее наличие в спецификации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2015-июн-22 14:32 
Не в сети

Зарегистрирован: 2015-июн-22 14:01
Сообщения: 1
Здравствуйте! Буду очень признателен за помощь.
Мы не давно приобрели у вас МК 1886ВЕ4У. При написании программы для компьютера по работе с USB устройством возник вопрос: "как проверить программу, не используя МК 1886ВЕ4У." (Требования заказчика).
Может быть вы прорабатывали данный вопрос?

У нас есть решение, связать два компьютера через специализированный кабель USB и с одного компьютера подавать данные на другом принимать. Правда в интернете есть много негативных отзывов по такой передачи.
Может есть более простой выход?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2015-июн-22 15:36 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 355
Цитата:
как проверить программу, не используя МК 1886ВЕ4У." (Требования заказчика).

Я так понимаю, что речь идет о проверке программы для ПК.
Используйте ЛЮБОЙ ДРУГОЙ МК с аналогичным функционалом.
Остальные варианты подскажут телепаты. Необходимо знать какое устройство должен эмулировать второй ПК (который будет подключен спецкабелем).
Нормальный обмен USB-USB между двумя ПК невозможен, поскольку оба выступают как хост.
Один из вариантов "спецкабеля" (ссылку не найду) представлял из себя цепочку USB->UART<->UART<-USB.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2015-июн-22 15:39 
Не в сети

Зарегистрирован: 2009-май-25 16:41
Сообщения: 206
Откуда: АО "ПКК Миландр"
Павел Ходырев писал(а):
Здравствуйте! Буду очень признателен за помощь.
Мы не давно приобрели у вас МК 1886ВЕ4У. При написании программы для компьютера по работе с USB устройством возник вопрос: "как проверить программу, не используя МК 1886ВЕ4У." (Требования заказчика).
Может быть вы прорабатывали данный вопрос?

У нас есть решение, связать два компьютера через специализированный кабель USB и с одного компьютера подавать данные на другом принимать. Правда в интернете есть много негативных отзывов по такой передачи.
Может есть более простой выход?

В данном случае простой выход - это сделать специализированный кабель на 1886ВЕ4У и обеспечить этим полную совместимость этого кабеля с реальным устройством.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2016-сен-12 16:41 
Не в сети

Зарегистрирован: 2016-авг-17 12:15
Сообщения: 2
Здравствуйте! Приобрели отладочный комплект на плате Eval9_V2 с процессором 1886ВЕ4У.
Никак не могу понять почему при вот таком коде:
Код:
#include <D:\MILANDR\1886\IDE1886\Headers\1886VE4d.h>

/******************/
void main(void)
{
     DDRC = 0;
     PORTC = 0;
     while (1){
           PORTC = 0x01;
           }
}

на PC0 у меня вот такая осциллограмма?
Открыть
Вложение:
IMG_20160912_162800.jpg
IMG_20160912_162800.jpg [ 1.17 МБ | Просмотров: 1427 ]

Вложение:
IMG_20160912_162821.jpg
IMG_20160912_162821.jpg [ 1.21 МБ | Просмотров: 1427 ]
Закрыть

Что не так сделано? Или чего я не понимаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2016-сен-12 16:50 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1259
Откуда: АО "ПКК Миландр"
Радар писал(а):
Здравствуйте! Приобрели отладочный комплект на плате Eval9_V2 с процессором 1886ВЕ4У.
Никак не могу понять почему при вот таком коде:
Код:
#include <D:\MILANDR\1886\IDE1886\Headers\1886VE4d.h>

/******************/
void main(void)
{
     DDRC = 0;
     PORTC = 0;
     while (1){
           PORTC = 0x01;
           }
}

на PC0 у меня вот такая осциллограмма?
Открыть
Вложение:
IMG_20160912_162800.jpg

Вложение:
IMG_20160912_162821.jpg
Закрыть

Что не так сделано? Или чего я не понимаю?


Сторожевой таймер ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2016-ноя-09 11:27 
Не в сети

Зарегистрирован: 2016-ноя-09 10:57
Сообщения: 2
Здравствуйте. Разрабатываю устройство для вывода информации на ПК через интерфейс USB. Для написания программного обеспечения использовал части кода программ для работы с демонстрационными платами Eval9, не изменяя ту часть, в которой происходит заполнение дескрипторов для определения устройства на ПК. В качестве драйвера использовал LibUSB. При подключении устройство было опознано и с него получилось считать данные, записанные в дескрипторе. После была написана новая прошивка, но с ней устройство не опознавалось. Использовав старую прошивку, получаю ту же ошибку:USB-устройство Windows не удается опознать, и оно было остановлено, поскольку сообщило о возникновении ошибки. При автоматическом поиске драйверов система Windows определила, что драйверы для этого устройства не нуждаются в обновлении, так как наиболее подходящее программное обеспечение уже установлено(хотя по факту его нет). При установке драйвера вручную появляется ошибка, что не найден драйвер, совместимый с этим устройством, либо он не пригоден для поддержки устройства.
Подскажите, пожалуйста, почему библиотека LibUSB может не восприниматься устройством как драйвер, если она уже с ним работала?
Микроконтроллер читается через программатор и на него можно записывать другие прошивки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2016-ноя-10 12:00 
Не в сети

Зарегистрирован: 2016-ноя-09 10:57
Сообщения: 2
И можно ли реализовать виртуальный com-порт при подключении через USB?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB