Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3 Все  След.
Автор Сообщение
 Заголовок сообщения: 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
Сообщения: 431
Цитата:
как проверить программу, не используя МК 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 МБ | Просмотров: 5038 ]

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

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


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

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1292
Откуда: АО "ПКК Миландр"
Радар писал(а):
Здравствуйте! Приобрели отладочный комплект на плате 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?


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

Зарегистрирован: 2018-окт-31 11:38
Сообщения: 12
Здравствуйте. Изучаю данный мк с помощью отладочного комплекта. У меня возникла проблема в работе с портами С и Д в качестве входов.
Я не разбираюсь в прерываниях, не знаю ассемблер, и разбирал дефолтный код на си. Написал код где для отображения сигналов порта С использую светодиоды на порте Е. И его результат мне не понятен совершенно. Подводя сигнал "земли" вход не реагирует никак, но реакция появляется если я кратковременно касаюсь его выводов проводом висящим в воздухе - биты переключаются группами, в непонятном мне порядке, да еще и работают как переключатели. Может я чего то не настроил? Сбивает то что с портом Е все прекрасно, и с выводом сигналов на С и Д тоже. А вход никак не хочет.


Вложения:
Комментарий к файлу: Проект по работе с портом С как входом.
prj.rar [16.7 КБ]
Скачиваний: 77
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2019-мар-04 09:43 
Не в сети

Зарегистрирован: 2018-окт-31 11:38
Сообщения: 12
Живые есть? А то может некропостингом занимаюсь :mrgreen:


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

Зарегистрирован: 2018-окт-31 11:38
Сообщения: 12
Помощь все еще нужна. :|


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

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 336
Откуда: ПКК "Миландр"
Petr02 писал(а):
Подводя сигнал "земли" вход не реагирует никак, но реакция появляется если я кратковременно касаюсь его выводов проводом висящим в воздухе - биты переключаются группами, в непонятном мне порядке, ...

Не вполне понятно в чем проблема. Выводы настраиваются как входы, и судя по всему ловят утечки и наводки. С антенной ловят успешнее, чем без нее.

Petr02 писал(а):
... да еще и работают как переключатели.

Это не понятно что означает.

_________________
Отдел технической поддержки support@milandr.ru


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

Зарегистрирован: 2018-окт-31 11:38
Сообщения: 12
Vasiliy писал(а):
Не вполне понятно в чем проблема. Выводы настраиваются как входы, и судя по всему ловят утечки и наводки. С антенной ловят успешнее, чем без нее.

Vasiliy писал(а):
Petr02 писал(а):
... да еще и работают как переключатели.

Это не понятно что означает.

Я тоже подумал что мой несчастный провод - антенна. Но не совсем. Если бы он был антенной то диод отображал бы улавливаемый сигнал. У меня не так.
Так, портЕ работает как кнопка: есть перемычка - диоды горят, нет перемычки - не горят. Это потому что я постоянно сбрасываю и опрашиваю порт Е.
С портами Ц и Д такой истории не получается. Несмотря на то что я через код устанавливаю точно такой же код он срабатывает не каждый раз:
Есть перемычка - свет есть, нет перемычки - свет есть( :shock: ), снова есть перемычка - свет пропал, нет перемычки - света нет.
Я назвал это переключателем потому что имел в виду обычный переключатель, как те что включают свет.
Проблема еще и в том что такое срабатывание - почти случайный результат. И, еще раз, это не антенна, потому что смена состояния диода происходила только в момент касания пина порта с проводником. Я уже оставлял их минут на 10 с подключенными - ничего не происходило. :?
Могу видео записать, если это сможет помочь :D


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

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 336
Откуда: ПКК "Миландр"
Лучше настроить только один пин, и снять осциллограмму с пометкой при каком напряжении поданном на этот вход светодиод загорается, а при каком гаснет (или не гаснет).
Уберите из кода все лишнее, просто опрашивайте один пин и либо зажигайте лампочку, либо гасите. Снаружи вход подтягивайте то к 1, то к 0.

Убедитесь что микросхема NAND памяти неактивна, и не формирует уровни на проверяемый пин.

_________________
Отдел технической поддержки support@milandr.ru


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

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


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

Сейчас этот форум просматривают: Bike и гости: 3


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

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