Свежие обсуждения
Микроконтроллеры

Микроконтроллерный датчик пульса

1 3 6

Там всё относительно

 

Вообще то внутре АВР Тини 26 есть и усилитель с диф. входом и прогр. коэф. усиления и АЦП, так что можно применить цифровую фильтрацию, при минимуме внешних компонентов.

 

аналоговый компаратор - есть... а гдеже усилитель???
чёто ненаблюдаю... или я нетам смотрю?

 

GAIN AMPLIFIRE ?

 

Что-то я совсем запутался в таймере PIC16F628A
Пишу на Си.
В настройках таймера указываю:
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
что означает коэффициент деления 16. На частоте 4МГц переполение таймера будет происходить каждые 256*16=4096мкс. У меня отображается 4 цифры (динамическая индикация) и после каждого следующего переполения отображается следующая цифра. Выходит, что период обновления экрана получается 4096мкс*4=16384мкс, а это составляет 1/16384мкс=61Гц, что является незаметным для глаза.
Программирую микроконтроллер, устанавливаю бит конфигурации в режим "внутренний генератор":
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
это подтверждает и программа-прошивальщик.
Зашиваю я эту программу в МК и пробую в железе.... Вижу "слайд-шоу", цыфры медленно переключаются. На глаз (и часы/таймер) частота обновления дисплея составляет примерно 1,1Гц.
Запускаю моделирование этой схемы в Протеусе и подключаю осилограф, по его показаниям, частота обновления дисплея - около 60 Гц, что соответствует расчетной.

Но вот в железе частота выходит намного ниже. Никто с таким не сталкивался? Кварц подключить к МК нет возможности, не хватает ножек, потому и включен внутренний тактовый генератор

Может это связано с калибровочной константой? Но в программе (с pic16f84.narod.ru) нет возможности посмотреть ее для этого микроконтроллера.

Пробовал ставить коэффициент деления "1". Частота гораздо повышается, но все же сильно заметно на глаз обновление дисплея.

Смотрел также по поводу "экономичного режима работы", когда частота тактового генератора понижается до 32768 Гц. Но по умолчанию, этот режим д.б. выключен. Я пробовал вручную устанавливать бит выбора режива в 1 (т.е. "нормальная скорость"), но результата это не дало.

 

Сергей К, у Вас индикация происходит по прерываниям от переполнения таймера? Может сама п/п обработки прерывания неправильная?
Вариант: неправильная синхронизация строк-столбцов. Т.е. стробирование разрядов идёт с нужной частотой, а вот вывод числа происходит неправильно.

 

Gregory: индикация происходит по прерываниям от переполнения таймера
да, "таймер 0"

Gregory: неправильная синхронизация строк-столбцов
с виду правильная.... кроме того, там подсчитываются секунды, минуты и т.д. Этот отсчет также "тормозит"

вот вывод цифр (индикатор с общим анодом):
------------------------------------------
// Отображение цифры
OUTPUT_HIGH(PIN_A7); // Точка
if (ShowSegment==0)
{
OUTPUT_HIGH(PIN_A0);
OUTPUT_LOW(PIN_A1);
OUTPUT_LOW(PIN_A2);
OUTPUT_LOW(PIN_A3);
OUTPUT_b(Segment1);
if ((Segment1 & 0b00000001) == 1) OUTPUT_LOW(PIN_A7);
//PORTB=Segment1;
}
if (ShowSegment==1)
{
OUTPUT_LOW(PIN_A0);
OUTPUT_HIGH(PIN_A1);
OUTPUT_LOW(PIN_A2);
OUTPUT_LOW(PIN_A3);
OUTPUT_b(Segment2);
if ((Segment2 & 0b00000001) == 1) OUTPUT_LOW(PIN_A7);
// PORTB=Segment2;
}
if (ShowSegment==2)
{
OUTPUT_LOW(PIN_A0);
OUTPUT_LOW(PIN_A1);
OUTPUT_HIGH(PIN_A2);
OUTPUT_LOW(PIN_A3);
OUTPUT_b(Segment3);
if ((Segment3 & 0b00000001) == 1) OUTPUT_LOW(PIN_A7);
// PORTB=Segment3;
}
if (ShowSegment==3)
{
OUTPUT_LOW(PIN_A0);
OUTPUT_LOW(PIN_A1);
OUTPUT_LOW(PIN_A2);
OUTPUT_HIGH(PIN_A3);
OUTPUT_b(Segment4);
if ((Segment4 & 0b00000001) == 1) OUTPUT_LOW(PIN_A7);
// PORTB=Segment4;
}

ShowSegment++;
if (ShowSegment>3) ShowSegment=0;
------------------------------------------

секодня купил новый МК, попробую в него прошить.

 

Сергей К: Но вот в железе частота выходит намного ниже.Это все "левые китайские" ПИКи. У меня тоже была похожая проблема с 628 только частота была увеличена ровно в 2-раза, хотя со внешним кварцем все работало ОК. Помогла замена MCPU. К стати экспериментируя с кривым MCPU заметил, то что при нагреве феном (для волос ) генерация становится нормальной, в районе 4Мгц, со старой прошивкой.

 

.

 

Поставил другой МК. Разницы (на глаз) не заметил.
Для теста пробовал изменять тактовую частоту (4МГц/32кГц) командами:
PCON|= 0xF7; //Пониженная частота
и
PCON|= 0x8; //Нормальная частота
но разницы не заметил