Форум РадиоКот https://radiokot.ru/forum/ |
|
PIC12f508 Инвертирование сигналов https://radiokot.ru/forum/viewtopic.php?f=58&t=195191 |
Страница 1 из 3 |
Автор: | rusman159 [ Вс окт 13, 2024 23:41:01 ] |
Заголовок сообщения: | PIC12f508 Инвертирование сигналов |
Добрый вечер! Имеется мини отладочная плата и PIC12F508 Пробую простейшие программы со светодиодами Не могу разобраться, почему уровни 0=включено, 1= выключено. К примеру GPIO = 0b00000011; выключает два светодиода на ногах GP0 и GP1 Кнопки тоже работают наоборот, в чем может быть проблема? Код: #include <xc.h> // chip=PIC12F508 // CONFIG #pragma config CP = OFF // Code protection off #pragma config OSC = IntRC // internal RC oscillator #pragma config MCLRE = ON // GP3/MCLR pin function is MCLR #pragma config WDT = OFF // WDT disabled #define _XTAL_FREQ 4000000L //#define BUTTON GPIO0 #define LED1 GP0 #define LED2 GP1 #define KEY1 GP2 #define KEY2 GP5 void main(void) { GPIO = 0x00; // OPTION = 0b11000000; // Подтяжка и пробуждение по входам отключены TRIS = 0b11111100; // GP1,GP2 = output GPIO = 0x00; int flag=0; while (1) { LED1=1; LED2=0; } } Тут LED1 не горит, LED2 горит |
Автор: | Аlex [ Вс окт 13, 2024 23:53:18 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
На схему пробовали смотреть ? Ну, или, в крайнем случае, нам показать её ![]() |
Автор: | Martian [ Пн окт 14, 2024 00:16:03 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
И надо сразу отвыкать от шаблона, что 1 - синоним включено, а 0 - выключено. И то и другое - просто противоположные логические состояния. Привязывать их к уровням сигнала необходимо только со схемой, как заметил Аlex |
Автор: | Martian [ Пн окт 14, 2024 07:34:15 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
Ну вот, а землю он подаёт как раз установкой 0. Всё правильно. |
Автор: | Аlex [ Пн окт 14, 2024 23:57:49 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
![]() |
Автор: | Martian [ Вт окт 15, 2024 00:42:11 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
Ну, в первый раз же... |
Автор: | rusman159 [ Ср окт 16, 2024 10:11:27 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
Спасибо большое! Добавлено after 1 hour 8 minutes 43 seconds: Еще возник вопрос, как работать с таймером TMR0 ? Необходимо вычислить время между двумя импульсами на ноге GP0 или GP1 Как можно настроить таймер на счет времени и куда будет записываться значение? не смог найти примеры на 12f508, но ранее с таймерами на pic не работал |
Автор: | veso74 [ Ср окт 16, 2024 13:41:41 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
Начало деятельности именно с PIC12F508 не OK. Его ресурсы слишком ограничены. Напр. по TMR0 - нет interrupt при переполнении. Вообще нет interrupts. Вариант: на той же пробной плате замените МК на другой из серии: PIC12F675, PIC12F683, PIC12F1822, PIC12F1840 ... |
Автор: | RoboC [ Ср окт 16, 2024 13:48:26 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
Боюсь, что ваш контроллер аппаратно захват не сможет сделать. Софтово, надо знать какие промежутки надо ловить и с какой точностью. |
Автор: | RoboC [ Ср окт 16, 2024 14:14:01 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
По ослику он его включает по ниспадающему фронту, фиксированной длинны. ![]() |
Автор: | rusman159 [ Ср окт 16, 2024 14:27:00 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
По ослику он его включает по ниспадающему фронту, фиксированной длинны. ![]() Да, так как для замеров на входе был сигнал около 25hz Опытным путем ( при нажатии кнопки рукой, либо с генератора ) мк начинает подстраивать включение выхода заранее, чтобы время накопления было около 10ms ( т.е лампочка, которая подключена на выход загорается всего 10ms+- ), но включена или выключена сейчас не суть важно, главное как включить заранее) Добавлено after 2 minutes 22 seconds: По ослику он его включает по ниспадающему фронту, фиксированной длинны. ![]() Да, так как для замеров на входе был сигнал около 25hz Опытным путем ( при нажатии кнопки рукой, либо с генератора ) мк начинает подстраивать включение выхода заранее, чтобы время накопления было около 10ms ( т.е лампочка, которая подключена на выход загорается всего 10ms+- ) Если 12f508 не может посчитать время между импульсами, то кто из его братьев сможет? Например 12f629? Но от производителя информация была именно о чипе 12c508 ( без маркировки на нем ) |
Автор: | RoboC [ Ср окт 16, 2024 14:37:49 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
У вас грубо период 40мс . Вы постоянно считываете в цикле состояние сигнала с входа(желтый сигнал GP0, предположим) и как только он станет равным 0 GP1 =1 задержка 30 мс GP1=0(красный сигнал) и вернулись к считыванию состояния сигнала. |
Автор: | rusman159 [ Ср окт 16, 2024 14:42:22 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
А если заранее неизвестна частота или период? Условно от 2 до 300hz, тогда опять возвращаемся к необходимости вычислить время между прошлыми импульсами. Т.е сейчас скорость вентилятора 5hz, далее изменилась до 150hz и каждый раз нужно включать выход заранее на 10ms Необходимо использовать таймер, ведь так? |
Автор: | RoboC [ Ср окт 16, 2024 14:56:57 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
Вы "ЗАРАНЕЕ" никак не узнаете при изменяющейся частоте. С таймером или без, т.к. вам неизвестно будет на сл. импульсе период больше или меньше. Скорее всего вы не правильно интенсифицируете полученные данные. |
Автор: | rusman159 [ Ср окт 16, 2024 15:08:58 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
Если частота станет меньше, то пройдут несколько более длинных импульсов на выходе, это не критично, на следующем такте длина уже скорректируется. Т.е мк посчитал, что период был 40ms, значит нужно включить выход через 30ms, включает выход через 30ms, но вдруг импульс поступил через 60ms, выход будет включен дольше, далее скорректируется, так как частота изменяется плавно в большую либо меньшую сторону Могу снять осциллограмму работы при изменении частоты. |
Автор: | RoboC [ Ср окт 16, 2024 16:23:36 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
Т.е. абстрактно это должно работать так с максимальной длинной импульса ~255 мс? Код: time=0;
duration=0; tik=0; while(1) { if ((KEY_PULS == 1)&(tik==0)) {tik=1; time=0;} if ((KEY_PULS == 0){tik=0;duration=time;load =1; } delay_1ms(); if (tik) { time++;} else { if (duration==0) { load =0;} else { duration--;} } } |
Автор: | Martian [ Ср окт 16, 2024 22:00:10 ] |
Заголовок сообщения: | Re: PIC12f508 Инвертирование сигналов |
по приходу импульса: значение счётчика сохранить в переменную N со сдвигом вправо на 1 (делим на 2) сбросить счётчик инвертировать выход запустить цикл до N вне прихода имульса: приращивать единичку на счётчике по завершению цикла (N) инвертировать выход |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |