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

Разработка таймера на основе PIC16F628(A) с программой на языке С

1 18 21

АНТОХА, с TMP-шками такой "мороки с определением частоты" не будет. ШИМ в них формируется по хитрому закону, что практически исключает влияние частоты процессора и прочих нестабильностей. Я с ними много работал, есть что рассказать Насчет геморройного - я на зря про первый раз упомянул...

 

Тогда лучше что-нибудь с i2c посмотреть,тем более функция встроенная есть в компиляторе,чтоб уж совсем без заморочек

 

chav1961: Я с ними много работал, есть что рассказать

Я тоже Самое плохое, когда дивайс работает почти всегда...
Проскочила помеха - нехорошо, приходится определять, похожа ли длительность импульса на правду... Потом пришлось вводить сглаживающий фильтр (программный)... И в итоге вышло, что вспомогательная, по своей сути функция определения температуры на борту устройства разрослась до неприличных размеров. К сожалению, на схемотехнику я влияю в очень малой степени, так что приходится выкручиваться программными средствами.

 

С фильтром - аналогично Но, вообще-то, этого и следовало ожидать.

 

Candalupsky: у picmaniac'а есть процедуры готовые на асме
Есть, и притом многократно проверенные в железе. Они как раз для RA4 с открытым коллектором написаны. Один минус - по двум проводам датчик подключить в данном случае вряд ли получится.
В случае одного датчика на шине и применения команды Skip ROM - и не особо геморройное это дело получается. Можете из интереса посмотреть мою программу на асме (лежит сами знаете где).

chav1961, AHTOXA, я очень хотел бы услышать Ваши отзывы о применении мной Switch-технологии при написании программы для таймера. Можно почтой. Я ведь новичок в этом деле. Вдруг что-либо бросилось в глаза. Буду признателен за справедливую критику.

 

ув picmaniac, критики не будет - не за что критиковать Написано хорошо, именно так обычно автоматы и пишутся. Единственное, что бросилось в глаза - вот этот кусок:

lTEST = 0;
for (lK = 0; lK < 9; lK++)
{
lTESTNOW = (PORTB | 0b10001111); // Текущее положение кнопок
if (lK != 0) lTEST |= (lTESTNOW ^ lTESTOLD); // сравнивается с предыдущим
lTESTOLD = lTESTNOW; // (8 раз)
}

Я бы его переписал вот так:

lTEST = lTESTNOW = ITESTOLD = 0; // Текущее положение кнопок
for (lK = 0; lK < 9; lK++)
{ lTEST |= (lTESTNOW ^ lTESTOLD); // сравнивается с предыдущим
lTESTOLD = lTESTNOW; // (8 раз)
lTESTNOW = (PORTB | 0b10001111); // Текущее положение кнопок
}

Принципиальных различий в вариантах нет (оба куска дают один и тот же результат) но из цикла убирается условие проверки. В вашей ситуации этого, может быть, и не нужно, но кусок в таком варианте будет работать побыстрее. Для полного счастья можно завернуть цикл в обратную сторону - от 9 до 0 (проверка на ноль происходит "сама собой"). Переходы, особенно условные - вообще беда для конвейерной архитектуры. Аналогично кусок:

gLED_COUNTER++; // Подготовить следующий разряд
if (gLED_COUNTER >= 2) gLED_COUNTER = 0; // Цифра была крайняя - начать сначала

можно переписать так:

gLED_COUNTER ^= 0x01; // Как раз ТА САМАЯ операция XOR

т.к. нам требуется всего два адреса. Ну а вообще, разбирать чужие программы - дело неблагодарное, многое здесь зависит и от стиля разработчика, и от стиля критика

 

Благодарю. Приму всё это к сведению.
Я тут заинтересовался ESR С измерителем разработки GO. Хороший девайс, но хотелось бы попроще. Так что немного отвлекусь туда.

 

picmaniac: Хороший девайс, но хотелось бы попроще.

Да еще на PIC'e. А то нужен программатор под АТМЕЛ.

 

Вы о чём? Тот девайс как раз на PIC сделан! http://www.pro-radio.ru/measure/3288/

 

Splav56: А то нужен программатор под АТМЕЛ.

Да ладно, тоже мне препятствие Одна микросхемка и пара деталек:

http://www.ln.com.ua/~real/avreal/adapters.html