CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: CodeVision AVR в вопросах и ответах

Сообщение rxstart1 »

Реализована как раз таки на прерывании таймера код в архиве. Я так полагаю что задержка связана с 750мс задержкой передачи данных,, вот как от этого избавиться, вот в чем вопрос?
Вложения
Speedometr.rar
(23.06 КБ) 150 скачиваний
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение WiseLord »

Ничего подобного. Функция Display() в коде выполняется в основном цикле, а, следовательно, зависит от задержек в программе.

По прерыванию работает лишь какой-то (совершенно лишний) счётчик DisplayCnt, на который уже в основном цикле завязана эта функция.

Уберите этот счётчик вообще, а на его место - прямо в код прерывания - вставьте содержимое Display(), а в основном цикле её не вызывайте вообще - это абсолютно не нужно.

Вообще код как-то странно завязан на разные счётчики. Можно всё сделать гораздо проще.
Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: CodeVision AVR в вопросах и ответах

Сообщение rxstart1 »

К сожалению я был прав, именно стандартная библиотека этого зверька DS18B20 очень медленно обрабатывает данные, задержка при расчете составляет 750мс., но я пошел другим путем, я всего 1 раз опрашиваю датчик при каждой остановке, а пока идет опрос ~1 сек. горит символ 't', получилось очень даже ничего. Пока я не ставил на велик, но замыкание и размыкание контактов вручную меня как то не сильно радует, если в протеусе скорость считалась чит на вычит, то в реальной схеме, как то не совсем адекватно, но я ничего не погу скадать пока не поставлю на велик, может просто дребезг проводов при замыкании.
По поводу того, чтобы вставить это все в обработку таймера, можно конечно подрубить второй таймер и по совпадению выполнять только этот код, но вот вставить его в основной обработчик прерываний таймера это сразу получить геморой, во первых тормоза при обработке вызовут неправильный расчет скорости, во вторых, тоже что и во первых, все ровно код будет выполняться время Т и что в обработчике прерывания, что в основном цикле нет разницы. По сути в своей программе я организую таким образом параллельный поток. Да второй таймер не подключал потому как все заточено на минимальное потребление энергии. Ведь в устройстве не будет включателя.
Посмотрите полную схему и новый код.
Вложения
Speedometr.rar
(172.95 КБ) 159 скачиваний
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение WiseLord »

Какая разница, как медленно работает эта библиотека, если динамическая индикация реализована неправильно?

Если вывод в порт делать в прерывании, тормозов никаких не будет. Всё что нужно - это выводить одну цифру на индикатор и переходить к следующей для следующего прерывания.

Можете посмотреть, как это сделано в простеньком термометре у меня.

Основная идея - индикация полностью независима от кода и работает только в прерывании. Имеется массив "изображений" выводимых цифр (у меня это ind[3]). Обработчик прерывания таймера всё что делает - это берёт данные (очередную цифру) из этого массива и выводит на порт. И более ничего.

А уже основной цикл программы всё что делает - это изменяет данные в этом массиве. И не важно, делает она это быстро, или с задержкой в секунды - прерывание будет показывать всегда только нужные данные, не завися от задержек в основном цикле программы.
BEST-83154
Прорезались зубы
Сообщения: 218
Зарегистрирован: Ср дек 02, 2015 15:06:01

Re: CodeVision AVR в вопросах и ответах

Сообщение BEST-83154 »

Приветствую уважаемые радиокоты
неужели никто не знает ответ на мой выше написанный вопрос?
BEST-83154
Прорезались зубы
Сообщения: 218
Зарегистрирован: Ср дек 02, 2015 15:06:01

Re: CodeVision AVR в вопросах и ответах

Сообщение BEST-83154 »

Приветствую уважаемые радиокоты
неужели никто не знает ответ на мой выше написанный вопрос?
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

Re: CodeVision AVR в вопросах и ответах

Сообщение c717411 »

BEST-83154 писал(а):Приветствую уважаемые радиокоты
неужели никто не знает ответ на мой выше написанный вопрос?

Так у Вас нет вопроса как такового. У Вас есть предложение сделать что-то за Вас. CodeVision AVR тут никаким боком не привязан.
BEST-83154
Прорезались зубы
Сообщения: 218
Зарегистрирован: Ср дек 02, 2015 15:06:01

Re: CodeVision AVR в вопросах и ответах

Сообщение BEST-83154 »

c717411 писал(а):
BEST-83154 писал(а):Приветствую уважаемые радиокоты
неужели никто не знает ответ на мой выше написанный вопрос?

Так у Вас нет вопроса как такового. У Вас есть предложение сделать что-то за Вас. CodeVision AVR тут никаким боком не привязан.

если помочь написать пару строк это сделать за вас,то тогда смысл форума?
CodeVision AVR - как это ни причем? в ней написан код,или вы хотите сказать что можно любй код на любом компиляторе делать!
к примеру float capacity=capacity+m_I_izm/3600; - вычисление
float capacity=0;обнулить переменную емкости,те что бы не учитывать "тики" если нет тока
потом это вывести на дисплей
но вот только не получается у меня,вот и спросил,а вы сразу грубить
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

Re: CodeVision AVR в вопросах и ответах

Сообщение c717411 »

BEST-83154 писал(а):обнулить переменную емкости,те что бы не учитывать "тики" если нет тока
потом это вывести на дисплей
но вот только не получается у меня,вот и спросил,а вы сразу грубить

Я не грубил, нет такой привычки.
Вы выложили некий код, пусть дальше разбирается форум, что там как к чему. К Компилятору или среде разработки код не имеет никакого отношения, у Вас проблема в реализации Ваших желаний.
Обрисуйте четко Вашу проблему, с проблемными участками кода. А разбирать весь исходник вряд ли кто будет..
BEST-83154
Прорезались зубы
Сообщения: 218
Зарегистрирован: Ср дек 02, 2015 15:06:01

Re: CodeVision AVR в вопросах и ответах

Сообщение BEST-83154 »

у Вас проблема в реализации Ваших желаний.
Обрисуйте четко Вашу проблему, с проблемными участками кода. А разбирать весь исходник вряд ли кто будет..[/quote]

да,с реализацией моих желаний вы подметили точно
уровень знаний не позволяет,я только подставлял из других кодов ,т,к сам написать не смогу,а проект БП хотелось закончить
в общем написал как есть,судить вам
Вложения
Безымянный.jpg
(62.98 КБ) 487 скачиваний
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: CodeVision AVR в вопросах и ответах

Сообщение AVK »

Необходимо декодировать последовательную пачку импульсов, (с китайского радиопульта на PT2264) где единица кодируется импульсом к примеру 100мс а нолик 50мс.
Те надо считать длительности импульсов. Пока приходит только мысль, настраиваем прерывание на нарастание, в нем запускаем таймер и прерывание меняем на спад, в нем запоминаем счетчик и прерывание меняем снова на нарастание. Мож как-то попроще можно?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение WiseLord »

Проще настроить прерывание на любое изменение уровня. А внутри, при единице на пине, сбрасывать таймер, при нуле - обрабатывать TCNTx и сохранять бит.
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Re: CodeVision AVR в вопросах и ответах

Сообщение AVK »

Опс, век живи, век учись, а в Евстифеевской моей любимой книге про меги не написано про такой режим.
Все значительно упрощается, спасибо.
Полез в старый даташит, там нет такого режима, зарезервировано написано.
А в новом есть!!
Аватара пользователя
SIM31
Это не хвост, это антенна
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

Re: CodeVision AVR в вопросах и ответах

Сообщение SIM31 »

Не понятно как работает PWM в режиме Fast PWM, использую мастер настройки
Изображение
режим fast pwm, выход А и В подключены, таймер активен, результат проверяю сразу в Proteus, но на выходе ничего нет.
Если ставлю togle при совпадении, на выходе появляется меандр, точно в нужные моменты.
Так же всё работает в режиме phase correct pwm.

Так же всё работает, если в прерываниях по обнулению и совпадению с А и В в прерывании дергать ногой программно, формируется нормальный PWM, как и запланированно.

А самый простой вариант не работает, когда при совпадении таймера и константы выход устанавливается в 0 или 1. Выход устанавливается, но один раз, сразу после включения и по обнулению счетчика не восстанавливается обратно.

Думал что обратно в изначальное состояние нужно переключать вручную, по прерыванию таймера, но команду типа PORTD.7=1 контроллер игнорирует, похоже, что приоритет у таймера и он руководит выходом в монопольном режиме. Но по примерам вручную состояния выхода ни кто не возвращает в начальное состояние.

Собственно непонятно в чем проблема, в Proteus или Codevision. Может это известная проблема какая-то.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение clawham »

f какой камень? были там пара атмег в протеусе у которых шим некоректно отрабатывает
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: CodeVision AVR в вопросах и ответах

Сообщение COKPOWEHEU »

Я видел баг с phase-correct ШИМ с переменной частотой (сброс по ICR), но fast ШИМ обрабатывается нормально.
Без кода и проекта протеуса говорить не о чем, вдруг вы ногу на выход не настроили или таймер не запустили.
Аватара пользователя
SIM31
Это не хвост, это антенна
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

Re: CodeVision AVR в вопросах и ответах

Сообщение SIM31 »

Возможно я выбрал неправильный режим таймера для Atmega328, а конструктор Codevision это пропустил как-то.
http://articles.greenchip.com.ua/1-0-35.html

Mode - определяет режим функционирования таймера счетчика. Зависит от типа мк, может быть:
Normal top - счетчик считает от 0 до 255, после переполнения сбрасывается в 0 и счет повторяется
Fast PWM - счетчик считает от 0 до 255, после переполнения сбрасывается в 0 и счет повторяется. Когда значения в счетном регистре достигает значения в регистре сравнения (задается в строчке Compare), таймер выставляет определенный логический уровень (задается в выпадающем списке Output) на ножке OCxx
CTC - сброс при совпадении, когда значения в счетном регистре достигает значения в регистре сравнения счетный регистр сбрасывается в ноль и счет начинается сначала.
Phase Correct PWM - таймер сначала считает от 0 до 255, потом от 255 до 0. Вывод OCxx при первом совпадении сбрасывается, при втором устанавливается.
Overflow interrupt - генерируется прерывания при переполнении
Compare Match interrupt - генерируется прерывания при совпадении
Timer Value - начальное значение счетного регистра
Compare - значение регистра сравнения


Все режимы работают, как их формирует контруктор. Кроме первого режима Normal top, думал что он будет самый простой и понятный. Fast PWM работает, Phase Correct PWM тоже работает. Normal top дает однократное срабатывание и замирает навсегда.

Вот обычный PWM, inverted и non-inverted (если в конструкторе фигурирует inverted и non-inverted PWM всё работает, если set/clear on compare match то не работает, вернее срабатывает однократно)
Изображение

вот я выбираю первый "странный" режим
Изображение

никакого PWM нет
Изображение

Код основной для Fast PWM, всё работает

Код: Выделить всё

TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (1<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x20;
OCR0B=0x40;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);


но если устанавливаю Normal mode, отличия только в двух битах

Код: Выделить всё

// эта строка всё "портит", устанавливаем Normal TOP mode
TCCR0A=(0<<WGM01) | (0<<WGM00);


PWM пропадает. Возможно, его и не должно быть в этом режиме :) Что это за режим такой? В описании как-то непонятно.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: CodeVision AVR в вопросах и ответах

Сообщение uk8amk »

Всё работает как и должно.
Режим ШИМ поддерживается когда в его названии есть PWM.
Вот хороший перевод документации: http://www.gaw.ru/html.cgi/txt/doc/micr ... 1.htm#work
И рядом целая тема про таймеры.
Аватара пользователя
Topaloff
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Вс фев 03, 2013 00:47:59
Откуда: Киев

Re: CodeVision AVR в вопросах и ответах

Сообщение Topaloff »

Доброго времени. Подскажите, что случилось с программой? Ничего не могу сделать. Переустанавливал, удалял из реестра - ничего ((.
P.S. Нашел решение: нужно удаль все файлы здесь c:\ProgramData\HP InfoTech\CodeVisionAVR\
Вложения
cvavr.jpg
(57.87 КБ) 501 скачивание
Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: CodeVision AVR в вопросах и ответах

Сообщение rxstart1 »

Че за бред ничего не понял, что не получилось что не работает? :shock:
Ответить

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