Зарегистрирован: Сб мар 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.
_________________ Глупый не задает вопросы. Глупый и так все знает.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения