Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

RGB_ночник на PIC16f676, нужна помощь с кодом

Сб дек 05, 2020 17:14:43

Доброго здравия всем откликнувшимся. Нашёл у себя в закромах два 16f676. С пиками никогда дела и малейшего не имел, думал выкинуть, но рука не поднялась. А потом решил сделать хоть ночничек какой-нить. Нашел исходник RGB ночника но на attiny13, решил портировать его, но чегото я делаю не так с кодом, ничего не запустилось, хотя вроде настроил и проинициализировал всё правильно.
Подскажите в чем причина может быть. Заранее спасибо!

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб дек 05, 2020 17:42:39

Дайте ссылку на исходный проект для тиньки.

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб дек 05, 2020 17:45:10

Может отсюда ….

Изображение

Код не смотрел

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб дек 05, 2020 17:59:41

NStorm, вот исходник для тиньки

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб дек 05, 2020 19:00:52

Ну вас таймер на гораздо меньшей частоте на пике настроен. RAIE зачем-то включили в INTCON.
Отключите АЦП и компаратор на старте еще:
Код:
    CMCON0 = 0b111; // Disable COMPARATOR
    ANSEL = 0x00; // Disable ADC

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб дек 05, 2020 19:56:56

NStorm, Сделал как Вы сказали- результата не дало. В шпротеусе смотрю по осцилографу, на RC1-RC2 появляются импульсы одновременно длительностью гдето 10 микросекунд, а на RC0-100микросекунд.

Добавлено after 32 minutes 5 seconds:
Вроде разобрался. Нужно было флаг переполнения сбрасывать в прерывании
void __interrupt() Timer0(void){
count++;
//канал красного
if (count == 0)
{ //если счетчик переполнился и принял значение 0
rgb_r = r; //сохранием значения в буфер
OUT_R =1; //выставляем ноги, отвечающие за ШИМ в логическую 1
}
if (rgb_r == count) { OUT_R = 0;}//по достижении заданной скважности выводим 0
// канал зелёного
if (count == 0)
{ //если счетчик переполнился и принял значение 0
rgb_g = g; //сохранием значения в буфер
OUT_G =1; //выставляем ноги, отвечающие за ШИМ в логическую 1
}
if (rgb_g == count) { OUT_G = 0;}//по достижении заданной скважности выводим 0
// канал синего
if (count == 0)
{ //если счетчик переполнился и принял значение 0
rgb_b = b; //сохранием значения в буфер
OUT_B =1; //выставляем ноги, отвечающие за ШИМ в логическую 1
}
if (rgb_b == count) { OUT_B = 0;}//по достижении заданной скважности выводим 0
T0IF=0;
}

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб дек 05, 2020 20:14:57

Alek_von_German, ах да, в пиках xc8 не делает это автоматом. И еще на всякий случай - в пиках нет разных векторов прерываний, как в AVR. Тут один единственный вектор прерывания на всё. По-хорошему в ISR надо проверять флаги прерываний и по ним смотреть что нужно делать. Но это ес-но в данном случае не актуально ,если активно одно единственное прерывание.

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб дек 05, 2020 23:26:43

NStorm, ну эт я ужо понял. Углубляться в ПИКи особого желания нету, это так, для общего развития, дабы камушки не валялись почём зря.

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Чт янв 07, 2021 16:57:55

Мне кажется, что pic16f676 низкоскоростной для (до 20 Мгц) для реализации RGB светильника. У меня получилось на pic18f452 - 40 Мгц. И то при передаче данных в RGB ленту все "плотничком", ни единой свободной микросекунды.

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Чт янв 07, 2021 17:03:33

а мне хватило 8 МГц да еще с попыткой управлять яркостью через чередование в сдвиговом регистре. На 40 Мгц можно VGA забабахать, с музыкой.

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Чт янв 07, 2021 17:13:33

Смотря на чём и как писать

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб июл 03, 2021 13:57:14

http://pic24.ru/doku.php/osa/articles/vga_game
чуть больше 40, конечно, но кто считает? :))
Надо бы поизучать ОСА...

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб июл 03, 2021 14:13:35

Доброго здравия всем! Прошу прощения, что снова поднимаю данную тему, но у меня снова возникла проблема с этим кодом.
Т.к., мой прошлый компьютер приказал долго жить, а почти все программы и исходники остались на нем без возможности восстановить, свои учебные проекты пытаюсь восстановить по памяти своей(почти отсутствующей).
Так вот, вспомнил я, что делал ночник на pic16f676, код восстановил, в протеусе проверил, а в железе работает он как-то странно. Сама ШИМ работает, но паузы между вспышками слишком большие будто частота шим слишком маленькая, и выходит, что светодиоды просто перемигиваются с разной частотой. Всё проверил несколько раз, делители стоят правильно, таймер вроде тоже настроил правильно, да и вообще код считай один в один повторяет мною выложенный ранее, но если раньше он не работал из-за того, что я не сбрасывал флаг, то сейчас я даже и рядом предположить не могу...

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб июл 03, 2021 15:44:57

в протеусе проверил, а в железе работает он как-то странно.

В протеусе можно измерить все тайминги и посмотреть лог. анализатором.

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб июл 03, 2021 16:06:04

otest, стыдно сказать, но я так и не понял как работает лог.анализатор в шпротеусе. Но по осциллографу я выяснил, что период составляет порядка 260mS, если я правильно владею калькулятором, то частота шим в данном случаесоставляет ~3.8Hz. Ето же нонсенс. Предделители вообще не стоят никакие, частота камня 4000000.

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб июл 03, 2021 19:04:38

Ослик для этого не годится. По лог. анализатору есть хелп. Поставь брек поинты в нужное место и протеус покажет затраченое время. Здесь по русски http://kazus.ru/forums/showthread.php?t=13198

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Сб июл 03, 2021 20:26:13

otest, спасибо за ссылку, разобрался. Частота оказалась 22 Гц.
Но вот вопрос, как она может быть таковой если частота камня 4.000.000Гц и предделители отключены?
Изображение

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Вс июл 04, 2021 10:42:05

По умолчанию для всех "среднемладших" справедливо положение, когда частота равна частоте кварца(внутреннего RC генератора) деленного на 4.
Это "особенность" ПИКовых...
Т.е. кварц 4МГц, а системная тактовая 1МГц (при 20 МГц кварце будет 5МГц максимум против 9,6МГц в тини13, при отключенном предделителе).
Единственно те модели (более современные), где PLL заложено да "энхансед" линейка позволяют частоту поднять.
8)

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Вс июл 04, 2021 15:36:46

BOB51, да, это я знаю. Мне просто интересно, что я сделал не так в этот раз, если в прошлый раз всё работало как надо. Перечитал уже всё, пересмотрел все настройки и всё равно не понятно где я туплю.

Re: RGB_ночник на PIC16f676, нужна помощь с кодом

Вс июл 04, 2021 18:28:38

Под Си вряд-ли подскажу...
В принципе... Если это не WS2812-подобные а всего 3х элементные...
Достаточно программного ШИМ с частотой от 62-120Гц. Вполне потянет любой МК...
Главная сетка частот равна периоду деленному на 256 (или более - зависит от типа МК и системы команд, имеющихся таймеров). На каждом кванте проверяем совпадение по каналам с масками задания и модифицируем вывод.
В конце периода обработка изменения данных.
:roll:
Ответить