Миландр

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

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 174 сообщения ]  На страницу « 13 4 5 6 712 »
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 2010-апр-08 10:08 
Не в сети

Зарегистрирован: 2010-мар-31 08:30
Сообщения: 6
Lew писал(а):
Где-то у Вас ошибка.
Однако, мы тут, к сожалению, не экстрасенсы и не можем увидеть ее на расстоянии.
Что, например, Вы записали в регистры периода?
С регистрами разобрался, это в даташите на контроллер ошибка. Там сказано, что младший байт PR2, а реально он старший! Поэтому минимальный период мигания светодиода получался равен 128мкс.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-апр-09 09:35 
Не в сети

Зарегистрирован: 2010-мар-31 08:30
Сообщения: 6
Повторяю свой вопрос про период в 4мкс :!:


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-апр-09 10:34 
Не в сети

Зарегистрирован: 2009-май-25 16:41
Сообщения: 206
Откуда: АО "ПКК Миландр"
LOMO писал(а):
Добрый день! Мой первый опыт работы с контроллером оказался неудачным. Столкнулся с непонятными проблемами при работе таймера.

Задача: нужно раз в 4мкс (т.е. период должен быть равен 8мкс) генерировать таймерное прерывание, в нем включать/выключать светодиод и опрашивать ножку контроллера.

......

то период чудесным образом увеличивается до 15мкс!!!! Хотя если замерить скорость кода она равна примерно 2.5мкс т.е. спокойно должны успевать все обрабатывать, так почему тогда период увеличился?
И еще, если строчку TMR1IF = 0; написать не в начале, а в конце, то период увеличится еще на 1мкс.

Прошу объяснить мне, как с этим бороться и что я делаю не так!

З.Ы. эксперименты проводятся на отладочном комплекте для микроконтроллера 1886ВЕ2У
4 мкс при тактовой частоте 16 МГц это 16 циклов микроконтроллера. Прерывание выполняется достаточно быстро, как обычная подпрограмма, плюс один цикл для анализа источника прерывания. Еще необходимо произвести сохранения регистров в программе обработки прерывания. Еще сбросить запрос прерывания. Еще выполнить какие-то требуемые действия. Затем востановить регистры и выйти из программы обработки прерывания. Подсчитайте сколько это циклов. У вас период запросов прерываний от таймера меньше, чем может отработать программа. Когда вы переносите сброс запроса прерывания по тексту программы, то дополнительно сбрасываете запрос уже на следующее прерывание.
А если хотите писать быстрые программы с гарантированно известной скоростью работы посмотрите ассемблер. Тем более, что он для 8-ми разрядных микроконтроллеров достаточно простой и понятный.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения: Регистры PRODH и PRODL - Реализация
СообщениеДобавлено: 2010-апр-14 12:35 
Не в сети

Зарегистрирован: 2010-янв-08 02:11
Сообщения: 23
Откуда: Азов
Здравствуйте.
В документе описывающего различия между 1886ВЕ2 и PIC17C756A сказано что у 1886ВЕ2 регистры PRODH и PRODL реализованы для чтения а у PIC17 их можно читать и писать.

В PICe в обработчике прерывания сохраняем данные регистры и делаем вычисления, потом востановили регистры и вышли из прерывания - Удобно!

В 1886ВЕ необходимо изворачиваться.

Данная реализация окончательна?


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения: Re: Регистры PRODH и PRODL - Реализация
СообщениеДобавлено: 2010-апр-14 14:54 
Не в сети

Зарегистрирован: 2009-май-25 16:41
Сообщения: 206
Откуда: АО "ПКК Миландр"
Vovan писал(а):
Здравствуйте.
В документе описывающего различия между 1886ВЕ2 и PIC17C756A сказано что у 1886ВЕ2 регистры PRODH и PRODL реализованы для чтения а у PIC17 их можно читать и писать.

В PICe в обработчике прерывания сохраняем данные регистры и делаем вычисления, потом востановили регистры и вышли из прерывания - Удобно!

В 1886ВЕ необходимо изворачиваться.

Данная реализация окончательна?
Пока вносить такие изменения не планировали.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-апр-14 15:41 
Не в сети

Зарегистрирован: 2010-янв-08 02:11
Сообщения: 23
Откуда: Азов
Так внесите в планы данные изменения!
Такие "мелочи" поднимают мк на новый уровень. :wink:


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-апр-15 20:58 
Не в сети

Зарегистрирован: 2009-окт-04 21:13
Сообщения: 4
Здравствуйте!
Процессор 1886ВЕ2
Столкнулся со следующей проблемой: если размера кода более 4К выдается ошибка о превышении размера памяти программ. И в IDE1886 7.4 и 7.6 одна и та же картина. Компилятор HT-PIC 8.05 PL2. На компилятор не грешу по причине того, что в MPLABe 8.36 компилируется, кроме того выдается правильный процент занятия памяти программ. В IDE1886 при размере кода около 4К показывает 88,8%, добавление любого оператора -> превышение размера памяти программ. На закладке "программирование", соответственно, адреса идут от 000 до FFF(вместо 0000-7FFF). Подскажите, в чем причина?


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-апр-16 10:43 
Не в сети

Зарегистрирован: 2009-май-25 15:07
Сообщения: 158
Откуда: АО "ПКК Миландр"
Андрей писал(а):
Здравствуйте!
Процессор 1886ВЕ2
Столкнулся со следующей проблемой: если размера кода более 4К выдается ошибка о превышении размера памяти программ. И в IDE1886 7.4 и 7.6 одна и та же картина. Компилятор HT-PIC 8.05 PL2. На компилятор не грешу по причине того, что в MPLABe 8.36 компилируется, кроме того выдается правильный процент занятия памяти программ. В IDE1886 при размере кода около 4К показывает 88,8%, добавление любого оператора -> превышение размера памяти программ. На закладке "программирование", соответственно, адреса идут от 000 до FFF(вместо 0000-7FFF). Подскажите, в чем причина?
Из Вашего сообщения не понятно, при чем здесь MPLAB. Возможно, Вы имеете ввиду сообщение 'Выход за пределы адресного пространства' при загрузке hex. Это из-за того, что MPLAB добавляет туда кофигурационные слова, находящиеся за пределами памяти.
Возможно, здесь имеет место быть ограничение на размер генерируемого кода Вашей версии HT-PICС. На вкладке "Программирование" показывается тот код, который получен от компилятора.
HT-PICC средой IDE1886 больше не поддерживается по причине большого количества ошибок и раздутости кода.
Желаю удачи.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-апр-16 21:35 
Не в сети

Зарегистрирован: 2009-окт-04 21:13
Сообщения: 4
Здравствуйте! Похоже, действительно, не понятно пытался объяснить проблему. Для написания и программирования использую IDE1886, для отладки MPLAB. Компилятор HT-PICC. Как только размер программы превышает 4К, компилятор в MPLAB компилирует программу, а тот же самый компилятор в IDE1886 отказывается компилировать, говоря о том что размер памяти программ превышен(то есть как бы у процессора не 32К, а всего 4К). После компиляции и в MPLABе и в IDE1886 выдается процент памяти, занятый программой (и ROM и RAM). Так вот, в MPLABе при размере программы около 4К процент занятости памяти программ составляет около 25%( у 756А памяти в 2 раза меньше), а в IDE1886 - около 90%( а должен - менее 12,5%). Решение сегодня нашел - вместе с IDE1886 версии 7.4 и ниже был файл picinfo (используется HT-PICC), в котором находились конфигурационные данные для производимых Вами процессоров. В этом файле для процессора 1886BE2 есть строка ROMSIZE(если сейчас не ошибаюсь с названием). Так вот почему-то там прописано изначально значение 1000, хотя у 756А ROMSIZE=4000. Соответственно, по аналогии поменяв 1000 на 8000 должны получить возможность использовать все 32К. По крайней мере все стало компилироваться без проблем. Вопрос, почему там изначально стоит неверное значение, думаю, смысла не имеет - поддержка HT-PICC у Вас прекращена. А мне сейчас переводить проект на СС7А тоже бессмысленно - время окончания работы уже истекает. Удачи!


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения: Прошу помощи
СообщениеДобавлено: 2010-апр-26 21:34 
Не в сети

Зарегистрирован: 2010-апр-26 21:21
Сообщения: 1
Здравствуйте!
Использую Ваш процессор 1886ВЕ2 давно, еще с опытных образцов. Больших нареканий нет.
На сегодняшний день понадобилось использовать SPI канал, одновременно как прием, так и передачу данных.
Возникла проблема, которую пока решить не удается.
Привожу «С» текст программы для ведомого процессора. Компилятор HT-PICC. (Сразу скажу, что делал и с компилятором СС7А, результат тот же). С ведущим процессором проблем нет, все данные передает и воспринимает правильно. Все замеры канала сверял (проверял) осциллографом и выводом на порт и в канал USART.

#include<pic.h>
#include "spi.h"

unsigned char spi_in1;


void main(void)
{
ADCON1 = 0x0f;
RBPU=0;
RA2 = 1;
DDRB = 0x7f; // Port B - input
DDRC = 0x00; // Port C - output
PORTC = 0x00;
DDRD = 0x00; // Port D- output
PORTD = 0x00;
DDRE = 0x00; // Port E - output
PORTE = 0x00;
DDRG = 0x00; //Port G - output
PORTG = 0x00;
DDRF = 0x00; // Port F - output
PORTF = 0x00;

init_spi();

PEIE=1;
SSPIE=1;

ei();

while(1)

{
PORTD=0x01;
}
}


void interrupt per_isr(void) @0x20
{
if(SSPIF) {
PORTD=0x00;
spi_in1=SSPBUF;
SSPBUF=0x05;
PORTC=spi_in1;
SSPIF=0;
}
}

Ну и соответственно SPI.H

#ifndef _SPI_H_
#define _SPI_H_

#define SSPMS 0x04

#define init_spi()\
SSPSTAT = 0b00000000;\
SSPCON1 = (SSPMS|0b00000000);\
SSPEN=1;\
SSPCON2 = 0

#endif


Проблема в том, что передача числа 0х05 работает во всех случаях, кроме когда на прием идет код с наличием 1 «по или» в 1 и 7 разряде. (т.е. при приеме, например 0x02), на SDO код вместо 0x05 код 0x06, или при приеме 0x82 на SDO код 0x07. Во всех остальных случаях, если нет 1 в 1-м или 7 разряде передается 0x05. При передаче других чисел сбои тоже есть, только завязки с другими разрядами.
Делал и задержки, использовал STAT_BF, включал выключал SPI модуль – результат один и тот же.

Работа либо только на прием, или только на передачу работает отлично. Т.к. в основной программе мне надо будет принимать и передавать 5 байт, не хотелось бы делать прием передачу 10 посылками.

Пожалуйста, помогите найти, где я ошибаюсь?


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-апр-27 15:26 
Не в сети

Зарегистрирован: 2010-апр-27 15:10
Сообщения: 8
Откуда: АО "ПКК Миландр"
Для диагностики Вашей ошибки, требуется помимо программы ведомого - программа ведущего. Дело в том что если биты настройки активного фронта, момента захвата данных,активного уровня для ведущего и ведомого будут несогласованны, то возможна некорректная передача/прием данных. Об этом так же упоминается в спецификации на процессор 1886ВЕ2. Что бы помочь решить Вам эту проблему я написал программы ведущего и ведомого для связи по SPI.
Каждая строка прокомментирована, и думаю, что переделка этих программ под свои нужды не составит труда.


Вложения:
SPI.rar [3.29 КБ]
472 скачивания
Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-июл-22 15:00 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1390
Откуда: Тула
Валерий писал(а):
oleg писал(а):
Валерий писал(а):

Как мне кажется зависание происходит из-за переполнения стека брошенными адресами прерываний. Можно ли как-нибудь удалять из стека адрес возврата из прерывания не используя команду RETFIE?
Ответил по e-mail.
Спасибо за предложенный алгоритм обнуления указателя стека. С ним все работает как надо.
Всем бы была интересна Ваша реализация, oleg.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-июл-22 17:05 
Не в сети

Зарегистрирован: 2009-май-25 16:41
Сообщения: 206
Откуда: АО "ПКК Миландр"
prostoRoman писал(а):
Валерий писал(а):
oleg писал(а):
Ответил по e-mail.
Спасибо за предложенный алгоритм обнуления указателя стека. С ним все работает как надо.
Всем бы была интересна Ваша реализация, oleg.
Ошибка, требующая коррекции стека при многократных не возвратах из прерываний или подпрограмм, была только в некоторых экспериментальных образцах микроконтроллеров. В серийных образцах стек полностью циклический и обнулять его смысла нет.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-авг-05 11:56 
Не в сети

Зарегистрирован: 2010-июл-22 15:50
Сообщения: 11
Здравствуйте! В описании 1886ВЕ2У написано "Внутрипроцессорный генератор скорости передачи может использоваться для
получения стандартных частот скорости передачи" Скажите пожалуйста, что подразумевается под стандартными частотами? Какие это частоты? Заранее спасибо.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-авг-06 14:20 
Не в сети

Зарегистрирован: 2009-май-25 15:07
Сообщения: 158
Откуда: АО "ПКК Миландр"
stormbird4 писал(а):
Здравствуйте! В описании 1886ВЕ2У написано "Внутрипроцессорный генератор скорости передачи может использоваться для
получения стандартных частот скорости передачи" Скажите пожалуйста, что подразумевается под стандартными частотами? Какие это частоты? Заранее спасибо.
Здравствуйте.
Под стандартными тут понимаются скорости последовательного порта персонального компьютера:
Standard baudrates:
50, 75, 110, 134 (134.5), 150, 300, 600, 1200, 1800, 2000, 2400, 3600,
4800, 7200, 9600, 19200, 38400, 57600, 115200.
Следует учитывать то, что чтобы получить высокие скорости приема и передачи необходимо правильно выбрать частоту тактового генератора микроконтроллера.


Вынести предупреждение
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 174 сообщения ]  На страницу « 13 4 5 6 712 »

Часовой пояс: UTC+03:00


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

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


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

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB