0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 91
|
|
1 | |
Timer0 в pic10f20003.11.2012, 18:50. Показов 14238. Ответов 12
Метки нет (Все метки)
Написал вот такой код, чтобы проверить скорость работы таймера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; } } } Получается что скорость работы таймера c предделителем (256) : (Foss/4)/256=3906,25 приращений в секунду, значит 3906,25/256 = 15 переполнений таймера в секунду. Исходя из этого, светодиод должен мигать 1 раз в секунду, а на деле он мигает не менее 4 раз в секунду (на взгляд). Кто может объяснить почему? У меня уже вариантов нету где ошибку искать :)
0
|
03.11.2012, 18:50 | |
Ответы с готовыми решениями:
12
PIC10F200 Аналог PIC10F200 Помогите разобраться с Timer0 Не работает TIMER0 OVF |
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!
Это чисто поиграться . В реальности пустая трата времени. По памяти набросал. Код из рабочего проекта, но тайминги от балды - надо проект поднимать. Там елочная мигалка 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
0
|
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 91
|
|
05.11.2012, 10:05 | 10 |
Сообщение от ImTuTb!
А как вообще определять переполнение таймера, у которого нет прерывания по переполнению, да и флагов никаких под это дело у контроллера нету???
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 | |
05.11.2012, 11:00 | |
Помогаю со студенческими работами здесь
13
Timer0 задержка в 1сек Не работает TIMER0 OVF микроконтроллер atmega32. timer0 MP430. Timer0. Compare mode Help! Timer0 в ATmega168PA отказывается повиноваться Так и не удалось подружиться с TIMER0 Непонятки с Timer0 при использовании CCS C RTOS Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |