Зарегистрирован: Сб мар 18, 2017 22:31:59 Сообщений: 4
Рейтинг сообщения:0
Здравствуйте, делаю шим контроллер на Attiny2313v на 4 канала, с управлением по uart, сейчас для тестов подключил светодиоды с резистором напрямую к выходам мк, в будущем буду подключать через н канальные мосфеты светодиодную ленту, режим шим fastPWM non-inverted, частоты таймеров ставил и 31250 и 125000, но столкнулся с проблемой когда шим выставлен в 0, на выходе постоянно проскакивают короткие импульсы из-за чего подключенный светодиод постоянно еле еле но горит. Такую же картину наблюдал и на тини13, но тогда мне это было не критично и я не стал разбираться изза чего так. Но в данном случае мне это очень критично, из-за этого вопрос почему так происходит и как это побороть софтово или аппаратно?
Зарегистрирован: Сб мар 18, 2017 22:31:59 Сообщений: 4
Рейтинг сообщения:0
Схема простейшая одна нога светодиода на массу другая через 100ом резистор на выход шим, т.к. светодиодов было под рукой только 2 подключил только к OCR0A и OCR0B, светятся оба, ну и провода RX TX и +5 и масса с UART адаптера, такой проблемы нет если порты настроены просто как порт без шима, светодиод когда 0 полностью тухнет.
код пока только такой, им я хотел опробовать как работает UART.
// Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR=(0<<AIN0D) | (0<<AIN1D);
// Global enable interrupts #asm("sei")
while (1) { // Place your code here n=getchar(); if (n == '1'){ OCR0A = 0xFF; UDR='1'; }; if (n == '2'){ OCR0B = 0xFF; UDR='2'; }; if (n == '3'){ OCR1A = 0xFF; UDR='3'; }; if (n == '4'){ OCR1B = 0xFF; UDR='4'; }; if (n == '0'){ OCR0A = 0x00; OCR0B = 0x00; OCR1A = 0x00; OCR1B = 0x00; UDR='0'; }; } }
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Ilyasmnv писал(а):
но столкнулся с проблемой когда шим выставлен в 0, на выходе постоянно проскакивают короткие импульсы из-за чего подключенный светодиод постоянно еле еле но горит.
Так и должно быть. Чтобы не было импульсов при 0% и 100% заполнении надо выключать аппаратный ШИМ и выставлять порт в нужное значение. Но, мне кажется, что у Вас низкая частота ШИМ и если поднять ее, то светодиод не будет видно и без выключения ШИМ.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Не даром вывод называется Output COMPARE. При совпадении значения счётчика и регистра сравнения, на пин выходит "1", при значении счётчика БОЛЬШЕ значения регистра сравнения - соответственно, "0". Описаная ситуация не является ошибкой. Чтобы полностью погасить светодиод, нужно отключать канал сравнения при нулевом значении в регистре.
Но, мне кажется, что у Вас низкая частота ШИМ и если поднять ее, то светодиод не будет видно и без выключения ШИМ.
У себя так же проверял на ATTiny13, Timer0, тактирование - 9.6МГц, предделитель - 1. В этом случае, частота ШИМа - ~37.5кГц, но если выставить значение "0x00" в OCR0 - всё равно свечение есть.
Дело в том, что у вас режим не FastPWM. про ШИМ с корректной фазой не скажу - ни разу не применял в виду отсутствия необходимости, а вот для FastPWM однозначно характерны 2 ситуации: 1. при OCR=0 будут иголки "вверх", если установлен режим Clear on compare 2. при OCR=255 будут иголки "вниз", если установлен режим Set on compare (по поводу иголок я мог перепутать - память-то уже не та: может оно и наоборот в зависимости от режима...) это описано в документации.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Знакомая беда, и у меня было такое, как я выкрутился?: использовал вместо прямого ШИМа обратный и у меня иголки перевернулись т.е. теперь при максимальной яркости иголки есть но их всё равно никто не видит
alex_ спасибо большое за совет, так и сделал все отлично
Вообще-то вам дали другой правильный совет. Если значение ШИМ 0, то отключать ШИМ. Отключить режим ШИМ-а у таймера, чтобы на выход иголки не выдавал, вдобавок, для пущей надежности, переводим пин в Hi Z состояние.
Карма: 20
Рейтинг сообщений: 188
Зарегистрирован: Вс мар 28, 2010 12:52:22 Сообщений: 1368 Откуда: Беларусь
Рейтинг сообщения:0
Все бы хорошо, но как быть, если нужно погасить ОДИН светодиод из 4-х?..
_________________ «Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Зарегистрирован: Сб мар 18, 2017 22:31:59 Сообщений: 4
Рейтинг сообщения:0
AndTer извиняюсь, да сейчас попробовал настроить как phase correct pwm и все прекрасно работает. А по поводу каждый раз отключать шим мне не нравиться такая идея, ибо на мой взгляд слишком много гемора добавляется.
Действительно, ставим phase correct pwm и никаких иголок. Частота ниже обычного шим в 2 раза, но так как шим аппаратный, то некритично, просто предделитель поменьше. И ещё в добавок исключаются ситуации когда светодиод вспыхивает при плавном увеличении/уменьшении. Примерно как при использовании BAM.
_________________ Глупый не задает вопросы. Глупый и так все знает.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения