Форум по микроконтроллерам: Нужна помощь. Ёмкостный датчик уровня на PIC12F629 - Форум по микроконтроллерам

Перейти к содержимому

  • 2 Страниц +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Нужна помощь. Ёмкостный датчик уровня на PIC12F629

#1 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 14 Сентябрь 2020 - 21:52

Приветствую!
Есть такой датчик уровня на PIC12F629. Слетела прошивка. Программированием микроконтроллеров занимаюсь впервые.Никак не соображу как реализовать это все.
Схему цепи подключения сенсора прилагаю.

Прикрепленные изображения

  • Прикрепленное изображение: IMG_20200909_120341.jpg

Прикрепленные файлы


0

#2 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 14 Сентябрь 2020 - 22:10

Первый раз слышу, что прошивки умеют летать.))
Вы бы схему посмотрели, если эта плата раньше работала.
На 90% уверен, что это контроллер. Если его конечно не сожгли.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
1

#3 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 14 Сентябрь 2020 - 22:43

Датчик рабочий. Снял контроллер с другого датчика и проверил. Контроллер тоже оказался цел. Во всяком случае прошить его удалось.
0

#4 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 14 Сентябрь 2020 - 22:51

Прошивку считали с другого контроллера?
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#5 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 14 Сентябрь 2020 - 23:00

Нет. Стоит защита.
0

#6 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 14 Сентябрь 2020 - 23:24

так в чем причина.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#7 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 15 Сентябрь 2020 - 06:39

Подозреваю, что в прошивке контроллера.
Прошил контроллер тестовой прошивкой (включение/отключение выхода через задержку/по таймеру). Все работает. Как реализовать управление сенсором не соображу.
0

#8 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 15 Сентябрь 2020 - 09:53

В 629 нет АЦП. Если бы было, я бы подсказал. Делал давно сенсорную клавиатуру на АЦП.
Есть компаратор. Но он не задействован.
По схеме сенсорный датчик подключен к входу внешнего прерывания. Значит, срабатывает по прерыванию на входе ( изменению уровня входного сигнала). Резисторами, подтянутыми к нулю, подбирается чувствительность вывода.
Мне кажется, очень не эффективное решение.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#9 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 15 Сентябрь 2020 - 10:06

Я пробовал по прерыванию на входе. Без результата.
Что думаете по поводу такого: GPIO2 назначается "выходом" и подается на него "1". Потом запускается таймер, а GPIO2 назначается "входом". Таймер считает пока на GPIO2 не появится "0". На основании счетчика принимается решение о включении реле?
0

#10 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 15 Сентябрь 2020 - 10:43

Тогда думаю так. Таймер TMRO настроен на счет внешних сигналов. Если сенсор не нажат, то есть какие наводки, их гасим резисторами. Также в программе установлен своеобразный фильтр. Определяющий количество импульсов таймера, которое принимается, как признак срабатывания сенсора. Если пришла какая -то помеха с большой амплитудой, она не попадет в диапазон фильтра и не даст включить исполнительное устройство.
Как это реализовать? Можно по разному. Программный счетчик формирует какой-то временной интервал, и в конце проверяет таймер с его сбросом. Или просто фиксирует флаг переполнения таймера.
.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#11 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 15 Сентябрь 2020 - 12:48

Я правильно понял?


#include <htc.h>


__CONFIG (INTIO & UNPROTECT & UNPROTECT & BORDIS & MCLRDIS & PWRTDIS & WDTDIS);


#define TRIGGER GPIO2
#define OUT GPIO4


unsigned int pass = 0;

void Calibrate(void); // Калибровка сенсора
int FrequencyMeasurement (void); // измерение частоты
void delay (unsigned int p); // функция задержки


//
void delay(unsigned int p)
{
for (int i = 0; i < p; i++) {asm("NOP"); }
}

void interrupt isr(void)
{
if (T0IE && T0IF)
{
TMR0 = 0;
T0IF = 0;
pass++;
}
}

/* Калибровка сенсора*/
void Calibrate(void)
{
freq = FrequencyMeasurement();
}
/*измеритель частоты*/
int FrequencyMeasurement (void)
{
int result = 0;

TMR0 = 0;
delay(5000000);
result = TMR0;

TMR0 = 0;
return(result);
}

void main(void)
{

//Настройка компаратора
CMCON = 0b00000111; //0b00000100;

GPIO = 0;
TRISIO = 0b00001100;
WPU = 0b00000100;


// Отключаем таймер 1
T1CON = 0;

OPTION = 0b11100000;
INTCON = 0b11111000;
T0IF = 0;
//
delay (150);
Calibrate(); // измерение частоты
average = freq; // быстрая настройка уровня при включении сенсора

while(1)
{
CLRWDT(); // сброс сторожевого таймера+++++++++++++++++++++-

int _freq = FrequencyMeasurement();
if ( _freq > average) OUT = 1; // измерение частоты
if ( _freq == average) OUT = 0;*/
}
return;
}

Сообщение отредактировал mrHill: 15 Сентябрь 2020 - 12:49

0

#12 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 15 Сентябрь 2020 - 12:53

Не знаю. Я на Си не пишу. Это у меня хобби.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#13 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 15 Сентябрь 2020 - 13:03

Понял. Но все равно не работает.
0

#14 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 15 Сентябрь 2020 - 13:17

А почему но?)) Работать будет, если правильно сделать. Временной период проверки должен быть не большой.
Ориентировочно 20-50мс. По идеи можно TMRO без предделителя использовать, переполнился, значит сработал сенсор. Все равно надо ловить процесс, осциллограммы посмотреть.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#15 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 15 Сентябрь 2020 - 14:13

Видимо что-то сделал не так. Уменьшение задержки ничего не дало.
0

#16 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 15 Сентябрь 2020 - 16:22

Надо понять какой сигнал получаем от сенсора. Теоретически можно предположить. Но нужно реальный. Или уходить на компаратор или АЦП (675) но тут привязка к плате. Значит надо исходить из того, что есть.
И не факт, что "прошивка слетела", фвкт, что программа сделана не надежно.
Как материал к размышлениям, можно посмотреть эту статью.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#17 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 15 Сентябрь 2020 - 16:48

Спасибо!
0

#18 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 15 Сентябрь 2020 - 17:33

Посмотрел свою программу сенсорной клавиатуры. Лет 5 назад написал. Как будто работала. Дальше тестов её не пошел.
Могу кинуть, но она на asm. Что может помочь. При включении, калибруется сенсор. Калибровка, т.е. измерение, напряжения на нем в стационарном положении, необходимо проводить периодически. Т.к. влияют внешние факторы, температура, влажность, давление и т.д.
Потом опрашиваются кнопки и сравниваются напряжения с калиброванными. Введены счетчики ошибки, и подтверждения.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#19 Пользователь офлайн   mrHill 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 16
  • Регистрация: 14 Сентябрь 20

Отправлено 15 Сентябрь 2020 - 20:16

Буду признателен.
0

#20 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 538
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 15 Сентябрь 2020 - 20:22

весь проект под лаб 8.89. НЕ Х
Прикрепленный файл  Сенсорная клавиатура 4 Кнопки.rar (27,29К)
Количество загрузок:: 11
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

Поделиться темой:


  • 2 Страниц +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей