Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ATMega16 таймеры, Одинаковые настройки, но разная частота 
:(
    Опции темы
e-moe
  Дата 2.7.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 3.8.2004
Где: Украина, Донецк

Репутация: нет
Всего: 4



TIM0_OVF TIM2_OVF
Настройки одинаковые, но частота разная, почему?

Код

/*****************************************************
Chip type           : ATmega16
Program type        : Application
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega16.h>

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
  unsigned char a;
// Place your code here
  TCNT0 = 250;
  a = PINA;
  a ^= 1;
  PORTA = a;
}

// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
  unsigned char a;
// Place your code here
  TCNT2 = 0;
  a = PINA;
  a ^= 2;
  PORTA = a;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTA=0x00;
DDRA=0xFF;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x07;
TCNT0=0xFF;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x07;
TCNT2=0xFF;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x41;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      };
}
 
PM MAIL WWW ICQ   Вверх
cardinal
Дата 2.7.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



А если это
Код

TCNT2 = 0;

поменять на 
Код

TCNT2 = 250;
 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
e-moe
Дата 2.7.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 3.8.2004
Где: Украина, Донецк

Репутация: нет
Всего: 4



cardinal, нет, вся проблема в том, что даже при 0 во втором таймере его частота все равно выше...
Такое впечатление что делители по разному установлены... 
PM MAIL WWW ICQ   Вверх
cardinal
Дата 2.7.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



А если у обоих 250?

Добавлено @ 15:55 
А вообще запросто и делитель разным может быть. У 0 и 1 таймера вроде должно работать одинаково. Попробуй. 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
PILOT
Дата 2.7.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Смотри дизассемблер и соотвтетствие адресов области регистров ввода вывода...

СУВ. 


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
e-moe
Дата 2.7.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 3.8.2004
Где: Украина, Донецк

Репутация: нет
Всего: 4



Цитата(cardinal @  2.7.2006,  14:54 Найти цитируемый пост)
А если у обоих 250?

Тогда вообще не заметны мелькания светодиода. Горит вроде бы как постоянно.

Код

/*****************************************************
Chip type           : ATmega16
Program type        : Application
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega16.h>

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
  unsigned char a;
// Place your code here
  TCNT0 = 250;
  a = PINA;
  a ^= 1;
  PORTA = a;
}

// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
  unsigned char a;
// Place your code here
  TCNT2 = 0;
  a = PINA;
  a ^= 2;
  PORTA = a;
}

void main(void)
{

PORTA=0x00;
DDRA=0xFF;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

TCCR0=0x07;
TCNT0=0xFF;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

TCCR2=0x07;
TCNT2=0xFF;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x41;

ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      };
}


Код

    .CSEG
_timer0_ovf_isr:
    RCALL SUBOPT_0x0
;      15   unsigned char a;
;      16 // Place your code here
;      17   TCNT0 = 250;
;    a -> R16
    LDI  R30,LOW(250)
    OUT  0x32,R30
;      18   a = PINA;
    IN   R16,25
;      19   a ^= 1;
    LDI  R30,LOW(1)
    EOR  R16,R30
;      20   PORTA = a;
    OUT  0x1B,R16
;      21 }
    RJMP _0x7
;      22 
;      23 // Timer 2 overflow interrupt service routine
;      24 interrupt [TIM2_OVF] void timer2_ovf_isr(void)
;      25 {
_timer2_ovf_isr:
    RCALL SUBOPT_0x0
;      26   unsigned char a;
;      27 // Place your code here
;      28   TCNT2 = 0;
;    a -> R16
    LDI  R30,LOW(0)
    OUT  0x24,R30
;      29   a = PINA;
    IN   R16,25
;      30   a ^= 2;
    LDI  R30,LOW(2)
    EOR  R16,R30
;      31   PORTA = a;
    OUT  0x1B,R16
;      32 }
_0x7:
    LD   R16,Y+
    LD   R30,Y+
    OUT  SREG,R30
    LD   R30,Y+
    LD   R15,Y+
    RETI
;      33 
;      34 void main(void)
;      35 {
_main:
;      36 
;      37 PORTA=0x00;
    LDI  R30,LOW(0)
    OUT  0x1B,R30
;      38 DDRA=0xFF;
    LDI  R30,LOW(255)
    OUT  0x1A,R30
;      39 
;      40 PORTB=0x00;
    LDI  R30,LOW(0)
    OUT  0x18,R30
;      41 DDRB=0x00;
    OUT  0x17,R30
;      42 
;      43 PORTC=0x00;
    OUT  0x15,R30
;      44 DDRC=0x00;
    OUT  0x14,R30
;      45 
;      46 PORTD=0x00;
    OUT  0x12,R30
;      47 DDRD=0x00;
    OUT  0x11,R30
;      48 
;      49 TCCR0=0x07;
    LDI  R30,LOW(7)
    OUT  0x33,R30
;      50 TCNT0=0xFF;
    LDI  R30,LOW(255)
    OUT  0x32,R30
;      51 OCR0=0x00;
    LDI  R30,LOW(0)
    OUT  0x3C,R30
;      52 
;      53 TCCR1A=0x00;
    OUT  0x2F,R30
;      54 TCCR1B=0x00;
    OUT  0x2E,R30
;      55 TCNT1H=0x00;
    OUT  0x2D,R30
;      56 TCNT1L=0x00;
    OUT  0x2C,R30
;      57 ICR1H=0x00;
    OUT  0x27,R30
;      58 ICR1L=0x00;
    OUT  0x26,R30
;      59 OCR1AH=0x00;
    OUT  0x2B,R30
;      60 OCR1AL=0x00;
    OUT  0x2A,R30
;      61 OCR1BH=0x00;
    OUT  0x29,R30
;      62 OCR1BL=0x00;
    OUT  0x28,R30
;      63 
;      64 TCCR2=0x07;
    LDI  R30,LOW(7)
    OUT  0x25,R30
;      65 TCNT2=0xFF;
    LDI  R30,LOW(255)
    OUT  0x24,R30
;      66 OCR2=0x00;
    LDI  R30,LOW(0)
    OUT  0x23,R30
;      67 
;      68 MCUCR=0x00;
    OUT  0x35,R30
;      69 MCUCSR=0x00;
    OUT  0x34,R30
;      70 
;      71 TIMSK=0x41;
    LDI  R30,LOW(65)
    OUT  0x39,R30
;      72 
;      73 ACSR=0x80;
    LDI  R30,LOW(128)
    OUT  0x8,R30
;      74 SFIOR=0x00;
    LDI  R30,LOW(0)
    OUT  0x30,R30
;      75 
;      76 // Global enable interrupts
;      77 #asm("sei")
    sei
;      78 
;      79 while (1)
_0x3:
;      80       {
;      81       // Place your code here
;      82 
;      83       };
    RJMP _0x3
;      84 }
_0x6:
    RJMP _0x6
 
PM MAIL WWW ICQ   Вверх
cardinal
Дата 3.7.2006, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Цитата(e-moe @  2.7.2006,  19:40 Найти цитируемый пост)
Горит вроде бы как постоянно.

Это больше похоже на правду, если отсчет идет вниз. То есть 250 тиков. Ты их и не увидишь.

1. Прочитай как правильно загружать counter таймера.
2. Прочитай в какую сторону идет отсчет времени - "вверх" или "вниз".
3. Возьми осцилоскоп и посмотри на ножку процессора (в зависимости от загружаемого значения в счетчик ты сможешь наблюдать таким образом за некой разницой). 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
e-moe
Дата 3.7.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 3.8.2004
Где: Украина, Донецк

Репутация: нет
Всего: 4



1 - читал
2 - вверх
3 - осцилографа нету smile 
PM MAIL WWW ICQ   Вверх
FPMOleg
Дата 3.7.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



1. у тебя порт А настроен на вывод, надо на ввод.
2. перед опирацией PIN надо делать задержку в один _NOP();
так как по коду видно что ты используешь Code Vision (какая версия?) я бы советовал тебе подключить библиотеку задержек и перед PIN сдеалть delay_ms(1). или на асме сделать _NOP()

 
PM MAIL   Вверх
e-moe
Дата 3.7.2006, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 3.8.2004
Где: Украина, Донецк

Репутация: нет
Всего: 4



Цитата(FPMOleg @  3.7.2006,  17:01 Найти цитируемый пост)
1. у тебя порт А настроен на вывод, надо на ввод.

Объясни плз почему так?

Добавлено @ 19:29 
Цитата(FPMOleg @  3.7.2006,  17:01 Найти цитируемый пост)
Code Vision (какая версия?)

1.24.4 Standart 
PM MAIL WWW ICQ   Вверх
PILOT
Дата 3.7.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Цитата(FPMOleg @ 3.7.2006,  15:01)
1. у тебя порт А настроен на вывод, надо на ввод.
2. перед опирацией PIN надо делать задержку в один _NOP();
так как по коду видно что ты используешь Code Vision (какая версия?) я бы советовал тебе подключить библиотеку задержек и перед PIN сдеалть delay_ms(1). или на асме сделать _NOP()

1. А как тогда ему сигналы выдавать?
2. Это еще зачем? У него там другие команды перед считыванием пина, они и заменяют "паузу", "Нопов" в нормальном коде быть не должно, если только речь не идет о тех случаях когда работа на выход идет по точной временной диаграмме...

СУВ. 


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
FPMOleg
Дата 4.7.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



С 1м пунктом погарячился. Обычно я когда с PIN работаю настраиваю порт на ввод, хотя это не так важно - можно и на вывод.
2 пункт я основывался на статье 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.