AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
13.08.2012, 21:03
|
#1
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
ATMega8515, заШИМить все порты вывода
Доброго всем дня, точнее вечера!
Есть семи-сегментное LED табло на 4 цифры, в котором все сегменты "сидят" на отдельных портах меги, нужно регулировать яркость ВСЕГО табло (ночной режим). Схема во вложении: если коротко, то включен аппаратный ШИМ - fast pwm 8 бит (частота небольшая 240 Гц), через транзисторный ключ по "плюсу" шимится 24 В, от которого (через который) собственно и питаются сегменты.
Все работает, вопрос в том как программно cделать то-же самое, т.е без схемы на ключе?
Другими словами, можно ли мультиплексировать все четыре выходных порта от одного аппаратного ШИМ?
Прерывания не использую. Пишу в AVR Studio на asm.
ps
Достаточно 16 уровней яркости.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
Сказали "Спасибо" gary2007
|
|
|
13.08.2012, 21:18
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Можно проверять пин аппаратного ШИМа и по результату управлять портами, если конечно Вы не собираетесь освободить этот пин для чего-то другого?
Последний раз редактировалось alvadep; 13.08.2012 в 21:20.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо alvadep за это сообщение:
|
|
|
13.08.2012, 21:29
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Можно еще проще - сделать аппаратное прерывание по ОСхВ и в нем гасить все сегменты. По переполнению таймера (или ОСхА) зажигать нужные сегменты. С фотодатчиком и матрицей 8х24 диода реально от 15 до 250 единиц из 256, и еще останется много времени на вычисления. Тем более что вам достаточно частоты 200 Гц, мне за счет 8 последовательных строк нужна частота в 8 раз больше - см видео
4shared.com/video/Vza0Mvfr/Часы_на_матрицах_-niXto-.html
|
|
|
Эти 2 пользователя(ей) сказали Спасибо niXto за это сообщение:
|
|
|
13.08.2012, 21:36
|
#4
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
...и поставьте токоограничивающие резисторы в коллекторы дарлингтонов (если внутренних нет), а то малейший сбой и светодиоды будут светить ооочень ярко, правда недолго...
|
|
|
Эти 2 пользователя(ей) сказали Спасибо omercury за это сообщение:
|
|
|
14.08.2012, 08:22
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Сообщение от omercury
|
поставьте токоограничивающие резисторы
|
С резисторами все в порядке, они в самом табло.
Сообщение от niXto
|
аппаратное прерывание по ОСхВ и в нем гасить все сегменты. По переполнению таймера (или ОСхА) зажигать нужные сегменты.
|
Я так понял, надо два обработчика писать, в одном гасить в другом зажигать?
Сегодня буду пробовать. А управлять как лучше, менять direct (DDRA) или пинами (portA)
ps
Видео по левой кнопке требует авторизации, а по правой грозится вирусами (Авира)
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
Сказали "Спасибо" gary2007
|
|
|
14.08.2012, 08:59
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Ну, раз прерываниями Вы все же не брезгуете, то можно обойтись и одним обработчиком. Смотрите в сторону БАМ (Bit Angle Modulation). Или как частный случай БАМа*, чередование циклов, например, по первому задается длительность 1, по второму длительность 0 (обратное значение). Хотя, чередование циклов это уже ШИМ.
*Имеется в виду, что длительность следующего цикла задается в предыдущем.
Последний раз редактировалось alvadep; 14.08.2012 в 09:30.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо alvadep за это сообщение:
|
|
|
14.08.2012, 10:24
|
#7
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Двумя циклами проще, особенно в режиме фастпвм - в нем значения в регистры ОС загружаются из временного регистра по переполнению таймера, то есть загружать эти регистры можно в любое время одного периода таймера, при значении тцнт от 0 до мах - и при этом не будет никаких косяков с яркостью. В БАМ свои особенности
Конечно же в регистр ПОРТ
ДДР вообще не трогать
|
|
|
Эти 2 пользователя(ей) сказали Спасибо niXto за это сообщение:
|
|
|
14.08.2012, 16:59
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Или по прерыванию от таймера увеличивать/уменьшать счетчик (какой-нибудь регистр) и сравнивать с числом, задающим скважность (яркость). Счетчик крутится по кругу. Например. Скважность › счетчика индикаторы отключены. Скважность ‹= счетчика индикаторы отображают информацию.
|
|
|
Сказали "Спасибо" alvadep
|
|
|
14.08.2012, 21:41
|
#9
|
Вид на жительство
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
|
|
|
Сказали "Спасибо" Alecsej
|
|
|
14.08.2012, 22:05
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Сообщение от alvadep
|
Или по прерыванию от таймера увеличивать/уменьшать счетчик (какой-нибудь регистр) и сравнивать с числом, задающим скважность (яркость)
|
Это тоже самое, что и в случае с прерываниями как советовал niXto, только сложнее.
В общем, сделал на прерываниях, все работает, только заметны кратковременные вспышки яркости при приеме данных и смене цифр, на малых уровнях яркости, но видно от этого не уйти. Прием данных сравнительно медленный у меня.
Расскажите в двух словах, в чем там суть. Английский не мой родной язык.
Я предпочитаю изучать или выслушать объяснение на русском, чтобы все улеглось в голове... а уж за уточнениями лезу в даташиты и апноуты.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
Сказали "Спасибо" gary2007
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:57.
|
|