Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/68: Рейтинг темы: голосов - 68, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 91
1

Timer0 в pic10f200

03.11.2012, 18:50. Показов 14238. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал вот такой код, чтобы проверить скорость работы таймера0 в pic10f200:
Код
#include <htc.h>

unsykned char time;

void delay(unsykned int value)
{
while(value-- > 0)
{
}
}

void main(void)
{

TRIS = 0b00000010; //настраиваем порты
OPTION=0b01000111;

time=0;
GP2=0;

while(1)
{
while(TMR0<255) {}
time++;
if(time==15)
{
time=0;
GP2=1;            //мигаем диодом
delay(100);
GP2=0;
}
}
}
Фузы выставляю на внутренний генератор 4Мгц.
Получается что скорость работы таймера c предделителем (256) : (Foss/4)/256=3906,25 приращений в секунду, значит 3906,25/256 = 15 переполнений таймера в секунду. Исходя из этого, светодиод должен мигать 1 раз в секунду, а на деле он мигает не менее 4 раз в секунду (на взгляд). Кто может объяснить почему? У меня уже вариантов нету где ошибку искать :)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2012, 18:50
Ответы с готовыми решениями:

PIC10F200
Пост - поделиться впечатлением. Заказал себе PIC10F200. Специально для них собрал PicKit 2....

Аналог PIC10F200
Короче нужен простенький PIC могущий работать от 3-х вольт. Хотел использовать 10F200 или 10F202,...

Помогите разобраться с Timer0
Добрый день уважаемые форумчане. Начал изучать PICи. Набросал небольшую програмку0tmp2.txt Не...

Не работает TIMER0 OVF
Всем привет, подскажите почему программа не входит в обработчик прерывания хотя флаг выставляется,...

12
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 91
03.11.2012, 19:24 2
Изменил if(time==15) на if(time==150) и получил мигание раз в секунду, получается таймер работает в 10 раз быстрее чем должен... как???
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
03.11.2012, 19:31 3
Это на нужно - delay(100); ?
0
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 91
03.11.2012, 19:34 4
нужно чтоб мигнул а не горел постоянно, и чтоб мигание заметно было, а не погас сразу же
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
03.11.2012, 20:27 5
А не проще просто инвертировать пин ? В этом случае можно было бы как то судить о интервале.
Хрен знает чего там хайтеч в задержке нагородит.
Да и не понятен сам выбор компилятора, не помню адекватности хайтеч к 10кам .
Уж лучше на асме тогда.
0
0 / 0 / 0
Регистрация: 04.03.2011
Сообщений: 594
03.11.2012, 22:28 6
Так пока длится delay(100) переменная time не плюсуется.
Вообще как то не понятно, зачем while(TMR0<255) тут?
Счетчик time должен считаться постоянно, без паузы
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
03.11.2012, 23:06 7
Цитата Сообщение от ImTuTb!
Вообще как то не понятно, зачем while(TMR0<255) тут?
Счетчик time должен считаться постоянно, без паузы
Ждет когда таймер сработает.
Это чисто поиграться . В реальности пустая трата времени.
По памяти набросал. Код из рабочего проекта, но тайминги от балды - надо проект поднимать.
Там елочная мигалка 6 светодиодов чарлиплексинг+BAM.
Код
  if(TIMER0>=50)
{                       // psevdo interrupt on TMR0 (xxxus elapsed)

TIMER0-=50;
if( tik_100us++==120)
{
tik_100us=0;
LED=~LED;
}
}
0
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 91
04.11.2012, 09:35 8
Я обычно пиками не занимаюсь, больше люблю АВРы. Но как тут устоять, такой размер и низкое потребление - то что надо под мою задачу. Ну и решил по быстрому код накидать на Си, чтоб ассемблер не вспоминать, а код не заработал. Мне показалось что проблема в таймере, и тогда я написал вот эту проверочную программу. Ладно, буду на асм переходить, надеюсь проблема исчезнет
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
04.11.2012, 10:50 9
Цитата Сообщение от O-t-i-x-u-s
Ладно, буду на асм переходить, надеюсь проблема исчезнет
Совсем не обязательно. CCS создает нормальный код...
0
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 91
05.11.2012, 10:05 10
Цитата Сообщение от ImTuTb!
Так пока длится delay(100) переменная time не плюсуется.
Вообще как то не понятно, зачем while(TMR0<255) тут?
Счетчик time должен считаться постоянно, без паузы
А о какой паузе Вы говорите? таймер считает себе постоянно, а я просто опрашиваю его счетный регистр, разве нет?
А как вообще определять переполнение таймера, у которого нет прерывания по переполнению, да и флагов никаких под это дело у контроллера нету???
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
05.11.2012, 10:13 11
Задержек нельзя делать .
Нужно подобие автомата состояний.
0
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 91
05.11.2012, 10:25 12
Ну я изменил:
GP2=1;
delay(100);
GP2=0;
На:
GP2=~GP2;

4-5 раз светодиод быстро меняет свое состояние, после чего небольшая пауза - он висит в одном состоянии где то в 2 раза больше чем был до этого, а потом все опять повторяется...
Вы имеете ввиду что while(TMR0<255) {} создает паузу? Тогда почему если создается пауза, то программа наоборот работает в 5-10 раз быстрее?
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
05.11.2012, 11:00 13
Посмотрите свою обработку таймера и мою .
Найдите отличия и осознайте...
0
05.11.2012, 11:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2012, 11:00
Помогаю со студенческими работами здесь

Timer0 задержка в 1сек
Добрый день. Пробовал организовать задержку по таймеру в 1 сек. В AVR studyo получается ~ 1сек, ...

Не работает TIMER0 OVF
Всем привет, помогите пожалуйста разобраться с кодом, он не входит в обработчик прерываний хотя...

микроконтроллер atmega32. timer0
доброго времени суток. Очень срочно нужно написать код на atmega32 на ассемблере задание такое:...

MP430. Timer0. Compare mode
Здравствуйте, я с вопросом по любимому msp430f5435 Настроил работу таймера на режим сравнения...

Help! Timer0 в ATmega168PA отказывается повиноваться
В расположенном ниже примере кода Timer0, настроенный на режим компаратора по OCR0A не генерит...

Так и не удалось подружиться с TIMER0
В Протеусе решил помигать светодиодом с частотой 1 сек на ATmega16 (частота процессора 8000000Гц)....

Непонятки с Timer0 при использовании CCS C RTOS
Доброго времени суток, коллеги! При написании программ использую MPLAB в связке с CCS C (плагин CCS...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru