CodeVision AVR в вопросах и ответах
- rxstart1
- Вымогатель припоя
- Сообщения: 508
- Зарегистрирован: Пт фев 22, 2013 18:00:43
- Откуда: Беларусь, г. Гомель
Re: CodeVision AVR в вопросах и ответах
Реализована как раз таки на прерывании таймера код в архиве. Я так полагаю что задержка связана с 750мс задержкой передачи данных,, вот как от этого избавиться, вот в чем вопрос?
- Вложения
-
- Speedometr.rar
- (23.06 КБ) 150 скачиваний
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ничего подобного. Функция Display() в коде выполняется в основном цикле, а, следовательно, зависит от задержек в программе.
По прерыванию работает лишь какой-то (совершенно лишний) счётчик DisplayCnt, на который уже в основном цикле завязана эта функция.
Уберите этот счётчик вообще, а на его место - прямо в код прерывания - вставьте содержимое Display(), а в основном цикле её не вызывайте вообще - это абсолютно не нужно.
Вообще код как-то странно завязан на разные счётчики. Можно всё сделать гораздо проще.
По прерыванию работает лишь какой-то (совершенно лишний) счётчик DisplayCnt, на который уже в основном цикле завязана эта функция.
Уберите этот счётчик вообще, а на его место - прямо в код прерывания - вставьте содержимое Display(), а в основном цикле её не вызывайте вообще - это абсолютно не нужно.
Вообще код как-то странно завязан на разные счётчики. Можно всё сделать гораздо проще.
- rxstart1
- Вымогатель припоя
- Сообщения: 508
- Зарегистрирован: Пт фев 22, 2013 18:00:43
- Откуда: Беларусь, г. Гомель
Re: CodeVision AVR в вопросах и ответах
К сожалению я был прав, именно стандартная библиотека этого зверька DS18B20 очень медленно обрабатывает данные, задержка при расчете составляет 750мс., но я пошел другим путем, я всего 1 раз опрашиваю датчик при каждой остановке, а пока идет опрос ~1 сек. горит символ 't', получилось очень даже ничего. Пока я не ставил на велик, но замыкание и размыкание контактов вручную меня как то не сильно радует, если в протеусе скорость считалась чит на вычит, то в реальной схеме, как то не совсем адекватно, но я ничего не погу скадать пока не поставлю на велик, может просто дребезг проводов при замыкании.
По поводу того, чтобы вставить это все в обработку таймера, можно конечно подрубить второй таймер и по совпадению выполнять только этот код, но вот вставить его в основной обработчик прерываний таймера это сразу получить геморой, во первых тормоза при обработке вызовут неправильный расчет скорости, во вторых, тоже что и во первых, все ровно код будет выполняться время Т и что в обработчике прерывания, что в основном цикле нет разницы. По сути в своей программе я организую таким образом параллельный поток. Да второй таймер не подключал потому как все заточено на минимальное потребление энергии. Ведь в устройстве не будет включателя.
Посмотрите полную схему и новый код.
По поводу того, чтобы вставить это все в обработку таймера, можно конечно подрубить второй таймер и по совпадению выполнять только этот код, но вот вставить его в основной обработчик прерываний таймера это сразу получить геморой, во первых тормоза при обработке вызовут неправильный расчет скорости, во вторых, тоже что и во первых, все ровно код будет выполняться время Т и что в обработчике прерывания, что в основном цикле нет разницы. По сути в своей программе я организую таким образом параллельный поток. Да второй таймер не подключал потому как все заточено на минимальное потребление энергии. Ведь в устройстве не будет включателя.
Посмотрите полную схему и новый код.
- Вложения
-
- Speedometr.rar
- (172.95 КБ) 159 скачиваний
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Какая разница, как медленно работает эта библиотека, если динамическая индикация реализована неправильно?
Если вывод в порт делать в прерывании, тормозов никаких не будет. Всё что нужно - это выводить одну цифру на индикатор и переходить к следующей для следующего прерывания.
Можете посмотреть, как это сделано в простеньком термометре у меня.
Основная идея - индикация полностью независима от кода и работает только в прерывании. Имеется массив "изображений" выводимых цифр (у меня это ind[3]). Обработчик прерывания таймера всё что делает - это берёт данные (очередную цифру) из этого массива и выводит на порт. И более ничего.
А уже основной цикл программы всё что делает - это изменяет данные в этом массиве. И не важно, делает она это быстро, или с задержкой в секунды - прерывание будет показывать всегда только нужные данные, не завися от задержек в основном цикле программы.
Если вывод в порт делать в прерывании, тормозов никаких не будет. Всё что нужно - это выводить одну цифру на индикатор и переходить к следующей для следующего прерывания.
Можете посмотреть, как это сделано в простеньком термометре у меня.
Основная идея - индикация полностью независима от кода и работает только в прерывании. Имеется массив "изображений" выводимых цифр (у меня это ind[3]). Обработчик прерывания таймера всё что делает - это берёт данные (очередную цифру) из этого массива и выводит на порт. И более ничего.
А уже основной цикл программы всё что делает - это изменяет данные в этом массиве. И не важно, делает она это быстро, или с задержкой в секунды - прерывание будет показывать всегда только нужные данные, не завися от задержек в основном цикле программы.
-
BEST-83154
- Прорезались зубы
- Сообщения: 218
- Зарегистрирован: Ср дек 02, 2015 15:06:01
Re: CodeVision AVR в вопросах и ответах
Приветствую уважаемые радиокоты
неужели никто не знает ответ на мой выше написанный вопрос?
неужели никто не знает ответ на мой выше написанный вопрос?
-
BEST-83154
- Прорезались зубы
- Сообщения: 218
- Зарегистрирован: Ср дек 02, 2015 15:06:01
Re: CodeVision AVR в вопросах и ответах
Приветствую уважаемые радиокоты
неужели никто не знает ответ на мой выше написанный вопрос?
неужели никто не знает ответ на мой выше написанный вопрос?
Re: CodeVision AVR в вопросах и ответах
BEST-83154 писал(а):Приветствую уважаемые радиокоты
неужели никто не знает ответ на мой выше написанный вопрос?
Так у Вас нет вопроса как такового. У Вас есть предложение сделать что-то за Вас. CodeVision AVR тут никаким боком не привязан.
-
BEST-83154
- Прорезались зубы
- Сообщения: 218
- Зарегистрирован: Ср дек 02, 2015 15:06:01
Re: CodeVision AVR в вопросах и ответах
c717411 писал(а):BEST-83154 писал(а):Приветствую уважаемые радиокоты
неужели никто не знает ответ на мой выше написанный вопрос?
Так у Вас нет вопроса как такового. У Вас есть предложение сделать что-то за Вас. CodeVision AVR тут никаким боком не привязан.
если помочь написать пару строк это сделать за вас,то тогда смысл форума?
CodeVision AVR - как это ни причем? в ней написан код,или вы хотите сказать что можно любй код на любом компиляторе делать!
к примеру float capacity=capacity+m_I_izm/3600; - вычисление
float capacity=0;обнулить переменную емкости,те что бы не учитывать "тики" если нет тока
потом это вывести на дисплей
но вот только не получается у меня,вот и спросил,а вы сразу грубить
Re: CodeVision AVR в вопросах и ответах
BEST-83154 писал(а):обнулить переменную емкости,те что бы не учитывать "тики" если нет тока
потом это вывести на дисплей
но вот только не получается у меня,вот и спросил,а вы сразу грубить
Я не грубил, нет такой привычки.
Вы выложили некий код, пусть дальше разбирается форум, что там как к чему. К Компилятору или среде разработки код не имеет никакого отношения, у Вас проблема в реализации Ваших желаний.
Обрисуйте четко Вашу проблему, с проблемными участками кода. А разбирать весь исходник вряд ли кто будет..
-
BEST-83154
- Прорезались зубы
- Сообщения: 218
- Зарегистрирован: Ср дек 02, 2015 15:06:01
Re: CodeVision AVR в вопросах и ответах
у Вас проблема в реализации Ваших желаний.
Обрисуйте четко Вашу проблему, с проблемными участками кода. А разбирать весь исходник вряд ли кто будет..[/quote]
да,с реализацией моих желаний вы подметили точно
уровень знаний не позволяет,я только подставлял из других кодов ,т,к сам написать не смогу,а проект БП хотелось закончить
в общем написал как есть,судить вам
Обрисуйте четко Вашу проблему, с проблемными участками кода. А разбирать весь исходник вряд ли кто будет..[/quote]
да,с реализацией моих желаний вы подметили точно
уровень знаний не позволяет,я только подставлял из других кодов ,т,к сам написать не смогу,а проект БП хотелось закончить
в общем написал как есть,судить вам
- Вложения
-
- Безымянный.jpg
- (62.98 КБ) 487 скачиваний
Re: CodeVision AVR в вопросах и ответах
Необходимо декодировать последовательную пачку импульсов, (с китайского радиопульта на PT2264) где единица кодируется импульсом к примеру 100мс а нолик 50мс.
Те надо считать длительности импульсов. Пока приходит только мысль, настраиваем прерывание на нарастание, в нем запускаем таймер и прерывание меняем на спад, в нем запоминаем счетчик и прерывание меняем снова на нарастание. Мож как-то попроще можно?
Те надо считать длительности импульсов. Пока приходит только мысль, настраиваем прерывание на нарастание, в нем запускаем таймер и прерывание меняем на спад, в нем запоминаем счетчик и прерывание меняем снова на нарастание. Мож как-то попроще можно?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Проще настроить прерывание на любое изменение уровня. А внутри, при единице на пине, сбрасывать таймер, при нуле - обрабатывать TCNTx и сохранять бит.
Re: CodeVision AVR в вопросах и ответах
Опс, век живи, век учись, а в Евстифеевской моей любимой книге про меги не написано про такой режим.
Все значительно упрощается, спасибо.
Полез в старый даташит, там нет такого режима, зарезервировано написано.
А в новом есть!!
Все значительно упрощается, спасибо.
Полез в старый даташит, там нет такого режима, зарезервировано написано.
А в новом есть!!
- SIM31
- Это не хвост, это антенна
- Сообщения: 1363
- Зарегистрирован: Чт апр 04, 2013 22:22:57
- Откуда: Белгород, РФ
Re: CodeVision AVR в вопросах и ответах
Не понятно как работает PWM в режиме Fast PWM, использую мастер настройки

режим fast pwm, выход А и В подключены, таймер активен, результат проверяю сразу в Proteus, но на выходе ничего нет.
Если ставлю togle при совпадении, на выходе появляется меандр, точно в нужные моменты.
Так же всё работает в режиме phase correct pwm.
Так же всё работает, если в прерываниях по обнулению и совпадению с А и В в прерывании дергать ногой программно, формируется нормальный PWM, как и запланированно.
А самый простой вариант не работает, когда при совпадении таймера и константы выход устанавливается в 0 или 1. Выход устанавливается, но один раз, сразу после включения и по обнулению счетчика не восстанавливается обратно.
Думал что обратно в изначальное состояние нужно переключать вручную, по прерыванию таймера, но команду типа PORTD.7=1 контроллер игнорирует, похоже, что приоритет у таймера и он руководит выходом в монопольном режиме. Но по примерам вручную состояния выхода ни кто не возвращает в начальное состояние.
Собственно непонятно в чем проблема, в Proteus или Codevision. Может это известная проблема какая-то.

режим 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 в вопросах и ответах
f какой камень? были там пара атмег в протеусе у которых шим некоректно отрабатывает
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: CodeVision AVR в вопросах и ответах
Я видел баг с phase-correct ШИМ с переменной частотой (сброс по ICR), но fast ШИМ обрабатывается нормально.
Без кода и проекта протеуса говорить не о чем, вдруг вы ногу на выход не настроили или таймер не запустили.
Без кода и проекта протеуса говорить не о чем, вдруг вы ногу на выход не настроили или таймер не запустили.
- SIM31
- Это не хвост, это антенна
- Сообщения: 1363
- Зарегистрирован: Чт апр 04, 2013 22:22:57
- Откуда: Белгород, РФ
Re: CodeVision AVR в вопросах и ответах
Возможно я выбрал неправильный режим таймера для Atmega328, а конструктор Codevision это пропустил как-то.
http://articles.greenchip.com.ua/1-0-35.html
Все режимы работают, как их формирует контруктор. Кроме первого режима 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, всё работает
но если устанавливаю Normal mode, отличия только в двух битах
PWM пропадает. Возможно, его и не должно быть в этом режиме
Что это за режим такой? В описании как-то непонятно.
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 в вопросах и ответах
Всё работает как и должно.
Режим ШИМ поддерживается когда в его названии есть PWM.
Вот хороший перевод документации: http://www.gaw.ru/html.cgi/txt/doc/micr ... 1.htm#work
И рядом целая тема про таймеры.
Режим ШИМ поддерживается когда в его названии есть PWM.
Вот хороший перевод документации: http://www.gaw.ru/html.cgi/txt/doc/micr ... 1.htm#work
И рядом целая тема про таймеры.
- Topaloff
- Потрогал лапой паяльник
- Сообщения: 349
- Зарегистрирован: Вс фев 03, 2013 00:47:59
- Откуда: Киев
Re: CodeVision AVR в вопросах и ответах
Доброго времени. Подскажите, что случилось с программой? Ничего не могу сделать. Переустанавливал, удалял из реестра - ничего ((.
P.S. Нашел решение: нужно удаль все файлы здесь c:\ProgramData\HP InfoTech\CodeVisionAVR\
P.S. Нашел решение: нужно удаль все файлы здесь c:\ProgramData\HP InfoTech\CodeVisionAVR\
- Вложения
-
- cvavr.jpg
- (57.87 КБ) 501 скачивание
- rxstart1
- Вымогатель припоя
- Сообщения: 508
- Зарегистрирован: Пт фев 22, 2013 18:00:43
- Откуда: Беларусь, г. Гомель
Re: CodeVision AVR в вопросах и ответах
Че за бред ничего не понял, что не получилось что не работает? 