Например TDA7294

Форум РадиоКот • Просмотр темы - PIC12f683 & TIMER1 не сразу запускается.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт дек 25, 2025 10:14:09

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: PIC12f683 & TIMER1 не сразу запускается.
СообщениеДобавлено: Чт окт 31, 2013 13:28:29 
Родился

Зарегистрирован: Чт окт 31, 2013 13:07:27
Сообщений: 3
Рейтинг сообщения: 0
Значит пишу на ССР под данный контроллер и проблема заключается в том, что ТАЙМЕР1 запускается спустя какое-то время 30сек-1мин.

Упрощенный код:
Код:
// 4MHz
//#define INTS_PER_SECOND 4         // (4000000/(4*4*65536)) = 3,814697265625
//#define TICS_PER_MSECOND 3815       
// 8MHz
#define TICS_PER_MSECOND 7629       
#define INTS_PER_SECOND 8          // (8000000/4/65536/4)) = 7,62939453125

int8 seconds=0;      // A running seconds counter

#INT_TIMER1                        // This function is called every time
void clock_isr() {                 // timer 1 overflows (65535->0), which is
                                   // approximately 19 times per second for
    if(--int_count==0) {           // this program.
      if(seconds == 255) seconds = 0;
      ++seconds;
     
      int_count = INTS_PER_SECOND;
    }
}

// MAIN Procedure
void main()
{
   set_tris_a(0x3D);
   
   // Setup timer1 for seconds counting
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
   delay_ms(250);
   enable_interrupts(INT_TIMER1);
   delay_ms(250);
   enable_interrupts(GLOBAL);
   delay_ms(250);
   seconds = 0;
   
   
// Setup timer2 for our PWM generator
   setup_timer_2(T2_DIV_BY_16,127,1);      //499 us overflow, 499 us interrupt
   delay_ms(250);
// Setup PWM
   setup_ccp1(CCP_PWM);
   delay_ms(10);
   set_pwm1_duty(LIGHT_OFF8);
   delay_ms(150);


   // ADC (ÀÖÏ)
   setup_adc_ports(sAN0);
//   setup_adc_ports(sAN0 | sAN1);
//   setup_adc_ports(ALL_ANALOG /*sAN0 | sAN1 | sAN3*/);
   delay_ms(10);
//   setup_adc(ADC_CLOCK_INTERNAL|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   delay_ms(10);
   set_adc_channel(0);
   delay_ms(10);
   setup_vref(VREF_LOW);
   delay_ms(10);
 //  setup_adc_ports(sAN1);
   setup_comparator( NC_NC_NC_NC );
   delay_ms(10);
 
   
  curtime = oldtime = seconds;
 
   
   while(TRUE)
   {
         Здесь, например,
         Если(seconds = 1) { делпем бип, или блым; seconds = 0; }
   }

}


Так вот seconds начинает прибавляться не сразу, а по истечению определенного времени, причем в протеусе та же фигня.
Почему лыжи не едут? :cry:
Оно какбЭ и не критично, но напрягает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC12f683 & TIMER1 не сразу запускается.
СообщениеДобавлено: Пт ноя 01, 2013 01:11:32 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4596
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Какой ужас... Зачем через каждую строчку тыкать delay_ms ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC12f683 & TIMER1 не сразу запускается.
СообщениеДобавлено: Пт ноя 01, 2013 09:01:35 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
ну ужас... но не ужас ужас ужас ... :)
Не вижу инициализации int_count, может из-за этого...

Код:
void clock_isr() {                 // timer 1 overflows (65535->0), which is
static unsigned char int_count = INTS_PER_SECOND;
                                   // approximately 19 times per second for
    if(--int_count==0) {           // this program.
      if(seconds == 255) seconds = 0;
      ++seconds;
     
      int_count = INTS_PER_SECOND;
    }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC12f683 & TIMER1 не сразу запускается.
СообщениеДобавлено: Пт ноя 01, 2013 17:02:48 
Родился

Зарегистрирован: Чт окт 31, 2013 13:07:27
Сообщений: 3
Рейтинг сообщения: 0
По поводу делаев: не было их там изначально, но подумав, что может не успевает чего проинициализироваться, - понатыкал :) Это мой первый проект и первый опыт общения с микроконтроллерами...
А пример взял из екзамплов...
так обЪявлен int_count:
int8 int_count=0; // Number of interrupts left before a second has elapsed

и поидее после if(--int_count==0) он должен остаться = 0, т.к unsigned ... не?!

"urry" таки да! Вы были правы. Спасибо.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: PIC12f683 & TIMER1 не сразу запускается.
СообщениеДобавлено: Пт ноя 01, 2013 17:08:40 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
VileDog писал(а):
и поидее после if(--int_count==0) он должен остаться = 0, т.к unsigned ... не?!

Блажен кто верует... :)))
Потренируйтесь на win калькуляторе в режиме "Программист" ....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC12f683 & TIMER1 не сразу запускается.
СообщениеДобавлено: Пт ноя 01, 2013 21:30:38 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4596
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
VileDog писал(а):
и поидее после if(--int_count==0) он должен остаться = 0, т.к unsigned ... не?!
Конечно же не ! Он будет = 0xFFFF. А сигнед он, или ансигнед - по-барабану.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC12f683 & TIMER1 не сразу запускается.
СообщениеДобавлено: Пн ноя 04, 2013 10:36:09 
Родился

Зарегистрирован: Чт окт 31, 2013 13:07:27
Сообщений: 3
Рейтинг сообщения: 0
Видимо меня смутил один меседж компилятора: на строку if(int8 i <= 0) bla-bla-bla - он ругнулся (ворнинг) мол всегда истина, поскольку "i" ансигнед и не может быть меньше 0... хотя какого черта... видимо из-за #define int8 char, хотя тоже не до конца все ясно...
Я до этого момента с микроконтроллерами, вернее с их программированием, НИКОГДА не имел дела и это мой первый опыт. До этого писалЬ только проги на С++ под винду, а теперь вот решил расширить свои познания.
Так что спасибо вам и за УЖАС... УЖАС... и за дельные советы!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC12f683 & TIMER1 не сразу запускается.
СообщениеДобавлено: Пн ноя 04, 2013 10:44:58 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
VileDog писал(а):
if(int8 i <= 0) bla-bla-bla -


Многие компиляторы ругаются на объявление в условии , допускают только в начале блока...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y