Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 18.10.2013, 13:54  
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: мега8 программный 8и канальный ШИМ?

у меня на дисплей например выводится информация
"10:45:12 21.5'"
все это дело собирается так:
sprintf(lcdbuffer, "%02d:%02d:%02d %02d.%d%c", t.hour, t.minute, t.second, t_temp/10, t_temp%10,223);
И таких строк около десятка.
Реклама:
Sany81 вне форума  
Непрочитано 18.10.2013, 16:39  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,907
Сказал спасибо: 2,542
Сказали Спасибо 11,818 раз(а) в 5,924 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: мега8 программный 8и канальный ШИМ?

Сообщение от Sany81 Посмотреть сообщение
нужно всего лишь сложить в одну строку несколько строковых переменных и числовых значений
Насколько я понял из предыдушего поста, Вам нужно вывести несколько целых чисел с разделителями. Можно с пом. более легкой функции itoa(int), можно применить свою - еще легче будет. Уж целое-то преобразовать в ASCII не проблема...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 18.10.2013, 19:35  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: мега8 программный 8и канальный ШИМ?

Сообщение от Sany81 Посмотреть сообщение
а вот на прямую с портом работать не получится, т.к. у меня на порту сидит регистр сдвига(3 ноги) а он уже в свою очередь управляет устройствами(8шт)
Выталкивать в сдвиговый регистр нолики/единички тоже можно без вспомогательной переменной.

Сообщение от Sany81 Посмотреть сообщение
Эта процедура длится тоже очень продолжительное время, в итоге 1 раз в секунду мой ШИМ "зависает" на некоторое время в положении лог "0" либо лог "1".
Можно ли как то этого избежать?
Только переместив формирование ШИМ в прерывание, к чему, как я вижу, Вы в результате и пришли:
Сообщение от Sany81 Посмотреть сообщение
Содержимое функции pwm_int() перенес в вызов по прерыванию от таймера. И получил наконец то нужный мне результат, частота ШИМ стала примерно 150 Гц

Сообщение от Sany81 Посмотреть сообщение
Но pwm_counter не может быть локальной, иначе каждый раз при входе в мою функцию, эта переменная будет всегда обнулена и тогда смысл в этой переменной отпадает так же как и смысл самой функции.
Это кто-то очень поторопился с советом.
Можно попробовать либо сделать её регистровой, либо локальной и статической.

Сообщение от Sany81 Посмотреть сообщение
С АСМом к сожалению не дружу.
А тут большого умения не потребуется - ведь нужно не писать на нём, а только читать, во что компилятор превратил операторы Си. Там сразу будет видно, загружается ли переменная каждый раз заново, или один раз, при первом к ней обращении, или вовсе хранится всегда в одном регистре.

Сообщение от gary2007 Посмотреть сообщение
Времени на прерывание у вас на все про все всего 256 тактов, после этого пойдет уже следующее прерывание
Это верно только в простейшем случае и при единичном прескейлере.
Т.к. частота ШИМ невелика, можно попытаться разрешить вложенные прерывания и тогда времени на исполнение процедуры формирования ШИМ будет больше. Но это нужно рассматривать всё множество возможных в системе прерываний, кто там кому может нааа... пятки наступать.

Сообщение от Sany81 Посмотреть сообщение
частота ШИМ стала примерно 150 Гц, этого вполне хватит под мои нужды. Только не могу понять почему так произошло
Потому что раньше между вызовами pwm_int() отрабатывали все операторы внутри "while (1){...}" и вызывались некоторые прописанные там функции, а теперь между вызовами pwm_int() никто не вызывается, а интервал задаётся таймером.

Сообщение от Sany81 Посмотреть сообщение
у меня на дисплей например выводится информация
"10:45:12 21.5'"
Сообщение от Sany81 Посмотреть сообщение
Большую часть времени пожирает функция sprintf. ... Пробовал воспользоваться функцией с переменным числом параметров, ...
Во-первых, с какого перепугу понадобилось переменное число параметров?
Во-вторых, когда требования к объёму кода и скорости выполнения выходят на первый план, конечно неразумно пользоваться printf'ами.
Почитайте вот здесь про такие функции. Скорость и компактность редко сочетаются с универсальностью.
У Вас формат строки фиксированный, поэтому советую использовать набор коротких и быстрых вызовов вместо sprintf.
Что-то типа такого:
Код:
        StrToUART(_int2str(Hours)  );
        ChrToUART(':');
        StrToUART(_int2str(Minutes));
        ChrToUART(':');
        StrToUART(_int2str(Seconds));
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 18.10.2013 в 19:39.
tempora вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ШИМ, синусоида на Мега8? diglook Микроконтроллеры, АЦП, память и т.д 60 12.09.2016 11:46
Режимы сна Атмега-8 putmannn AVR 123 08.03.2013 15:30
ШИМ в STM32F4 sosedi Микроконтроллеры, АЦП, память и т.д 5 15.08.2012 12:20
Управление Сервой Mg995 Через Аппаратный Шим Vyazikov Микроконтроллеры, АЦП, память и т.д 16 06.04.2012 21:06
Проблема с аппаратным ШИМ в мега169 Archer07 Микроконтроллеры, АЦП, память и т.д 3 09.07.2010 15:40


Часовой пояс GMT +4, время: 01:14.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot