Ну тогда изначально вопрос некорректно был задан и каждый его истолковал по-своему. Выше я указал как раз для delay, а в Протеусе в свойствах контроллера задается. Или же конфигом в самой программе если это внутренний генератор и тогда на него симулятор уже не влияет.
Всё намного интереснее... В новых чипах можно менять частоту МК... PLL, например... Какие частоты для delay закладывать изначально... если частота может меняться??? Всё ложится на плечи программиста... и никак иначе...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Ср мар 11, 2015 12:08:22
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4570 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Bkmz писал(а):
Ну тогда изначально вопрос некорректно был задан и каждый его истолковал по-своему
С этим на форумах постоянно и сталкиваешься. Человек бездумно забегает на форум, спрашивает какую-нибудь херню и убегает, думая что тут все экстрасенсы. Мало того, большинство даже не понимают что спрашивают. Главное - спросить Килять давно пора в мусорку подобные вопросы, да жалко уставы этого не позволяют. Дабы человек понял, что хуйню спросил.
Всем привет может кто спасет мой моск. Значит написан код на Си :общение с датчиком ds18b20 и вывод на 7сегментный индикатор. Проблема:при первом включении измеряется температура и выводится на индикатор.Но ! замер и вывод у меня в главном цикле -при изменении значения температуры показания не меняются. опытным путем установлено шо замер (принятие данных от датчика) происходит лишь один раз..как будто датчик потом умирает. симулю в proteus 7.6 коды на С в файле.
В две головы думаем -и никак не справимся с этой бедой
p s компилятор Hi tech 9.6
p p s сам нашел косяк. по коду было State =0 delay 480 а надо State =0 Pin =0 delay 480
Коты! Почему оно не работает? Прогоняется один раз внутренний цикл, и усё, молчит. Компилируется всё хорошо. Спасите, не могу управлять выводом инфы на светодиодную матрицу. Спасибо!
for (xx==0; xx<10; xx++) {
for (counter == 1; counter < 6; counter++) { if (counter == 0) truecount = 1; ... if (counter == 5) truecount = 32;
PORTA = truecount; PORTB = column_array[counter+1];
спасибо, узрел! тогда ещё вопрос: задумка у меня такая - часы-бегущая строка на матрице 5х7 и PIC16F628 в размере наручных (не спрашивайте, зачем)) сейчас RA0-RA4 и RB0-RB6 заняты матрицей, RB7 - кнопкой. TMR0 дёргается для прерываний, по которым заполняется матрица. программа выглядит примерно так: Спойлерvoid updateled() { один "прогон" матрицы с данными из массива. }
void roll() { изменение ячеек массива ("кадры") delay_ms(10); updateled(); }
void interrupt() { cnt++; // Increment value of cnt on every interrupt if (Button(&PORTB, 7, 1, 1)) { roll();}; TMR0 = 96; INTCON = 0x20; // Set T0IE, clear T0IF }
void main() {
(инициализация)
do { } while(1); }
и вроде бы всё ничего, жмёшь - показывает. но вот вопрос - на чём, собсно, организовать счёт времени? тактировать TMR1 кварцем на RB6 нет возможности - он занят. что делать? спасибо!
Как правило, вначале "прикидывают" схему думая о том как будет написана программа и т.д. и только после этого пишется программа. В вашем случае - делайте счёт времени по TIMER2 или убирайте кварц и "переходите" на INTRC. Освободятся RA6 и RA7. Дальше, думайте как освободить RB6 и RB7.
Пикоты! помогите( решил переделать считалку от mikroel под кухонный таймер. всё работает отлично, кроме следующего - по достижении 0 минут (да, я знаю, что в минуте не 1000мс)) не появляется 1 на А2. и на А6 не появляется (TRISА менял), и вообще именно эта строка не работает.
unsigned short digit_no, digit10, digit1, digit, i,minutes, start, m;
void scanbuttons() { если кнопка нажата, изменять minutes }
void count() { for (i = minutes; i<=minutes; i--) { digit = i % 10u; digit1 = mask(digit); // считать от числа минут до 0 digit = (char)(i / 10u) % 10u; digit10 = mask(digit); if (i == 0) { // пикнуть, когда время выйдет buzzerpin = 1; //этого не происходит Delay_ms(5000); buzzerpin = 0; minutes = 55; //это происходит } Delay_ms(1000);
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Вс апр 12, 2015 22:48:44
Родился
Зарегистрирован: Сб мар 28, 2015 23:06:05 Сообщений: 12
Рейтинг сообщения:0
Доброго времени суток!
money21 писал(а):
не появляется 1 на А2. и на А6 не появляется (TRISА менял), и вообще именно эта строка не работает. #define buzzerpin PORTA.F2
- в этой строке нет опечатки? попробуйте #define buzzerpin RA2 или static volatile bit buzzerpin @ (unsigned)&PORTA*8+2; , если у вас конечно компилятор С. помните - нумерация портов начинается с 0
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 07:40:41
Встал на лапы
Зарегистрирован: Чт мар 05, 2015 07:14:58 Сообщений: 131
Рейтинг сообщения:0
Всем привет! Прошу помочь решить простую задачку: по определённому событию, например по нажатию кнопки - должен загораться светодиод и в случае если кнопка не была нажата повторно в течении 1 сек - светодиод должен погаснуть. Как это реализовать? Нужно ли использовать для этого таймер? или можно без него обойтись? Как правильнее?
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 08:35:40
Встал на лапы
Зарегистрирован: Чт мар 05, 2015 07:14:58 Сообщений: 131
Рейтинг сообщения:0
По указанной ссылке нет ответа на мой вопрос. Самому приходит на ум такой алгоритм: 1) настраиваем прерывание по переполнению таймера на 1 сек. 2) В основном цикле программы делаем проверку: если кнопка нажата - обнуляем счётчик таймера и поднимаем флаг события. Если флаг события поднят - светодиод горит, иначе - не горит. 3) В обработчике прерываний: опускаем флаг события.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 08:40:38
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4570 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Dmitry888 писал(а):
По указанной ссылке нет ответа на мой вопрос.
Всё есть, Вы просто не дочитали. viewtopic.php?p=1470598#p1470598 Опрос выводов кнопок идёт в "фоновом режиме" (в прерывании таймера). По этому, "узнать" была ли нажата кнопка, можно хоть через секунду. Останется только сделать задержку в основном цикле любым удобным для вас способом, и после неё проверить была ли кнопка нажата. Там же, в примере, имеются миллисекундные вызовы таймера, в которых можно отсчитывать любые временные интервалы.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 08:44:44
Встал на лапы
Зарегистрирован: Чт мар 05, 2015 07:14:58 Сообщений: 131
Рейтинг сообщения:0
прошу прощения, про кнопку - это я неправильный пример привёл. Меняем условия задачи: событие, которое мы отслеживаем, пусть будет : пришло определённое сообщение по uart.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 08:50:22
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4570 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Ну тогда не понятно в чём заключается проблема. Пришло сообщение - задерживаем программу на 1 сек (повторюсь - любым удобным для Вас способом !) - смотрим не приходило ли оно ещё раз. Приём по УАРТу в буфер реализуем по прерываниям, чтобы не вешать программу попросту. Оценивать (парсить) буфер можно уже в основном цикле, процесс не из долгих.
ЗЫ: Ну а вообще, реализация будет зависеть от текущей структуры Вашей программы. Каждый пишет по-своему. И лучше/хуже - вопрос относительный. Как удобнее, так и лучше.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 100
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения