реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Подскажите, где есть примеры для ATmega162, При замене 8515 на 162 не работает Timer0
Vladimir_T
сообщение Nov 21 2006, 06:59
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



С учетом рекомендаций и литературы от ATMEL, заменил 8515 на 162. Переопределил необходимую периферию и биты конфигурации (есть различия между ними), но Timer0 не запускается! Посмотрите, в чем есть ошибка. Сделал простую тестовую программку, а она не запускается. Может есть где-нибуть есть сайт с исходниками тестовых программ, как это есть у Texas Instrumens для MSP?

#define START_SYSTEM_TIMER() (TCCR0 |= (1 << CS01); TIMSK |= (1 << TOIE0))

//------------------------------------------------------------------------------
int main()
{
GICR = 1 << IVCE;
GICR = 1 << IVSEL;
// GICR |= (1 << INT1);
// MCUCR |= (1 << SE); // enable sleep mode

EECR |= (1 << EEMWE);
EECR |= (1 << EERIE);

DDRD |= 0x30;

START_SYSTEM_TIMER();

__enable_interrupt ();

for(;;)
{
PORTD ^= 0x20; // For test control from free pins

}


}

#pragma vector = TIMER0_OVF_vect
__interrupt void System_Timer(void)

{

PORTD ^= 0x10; // For test control from free pins

} // System_Timer
Go to the top of the page
 
+Quote Post
at90
сообщение Nov 21 2006, 08:51
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 866
Регистрация: 31-03-05
Из: Краснодар
Пользователь №: 3 814



Нужно записать занчение интервала таймера в регистр TCNT0 при инициализации. И в прерывании по переполнению его нужно постоянно усанавливать.

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

TCNT0=0x10;<----------------------
// Place your code here

}


--------------------
<<Первая производная от чужой идеи - уже твоя идея.>>
Go to the top of the page
 
+Quote Post
vmax
сообщение Nov 21 2006, 09:01
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 14-02-06
Пользователь №: 14 337



Цитата(Vladimir_T @ Nov 21 2006, 06:59) *
С учетом рекомендаций и литературы от ATMEL, заменил 8515 на 162. Переопределил необходимую периферию и биты конфигурации (есть различия между ними), но Timer0 не запускается! Посмотрите, в чем есть ошибка. Сделал простую тестовую программку, а она не запускается. Может есть где-нибуть есть сайт с исходниками тестовых программ, как это есть у Texas Instrumens для MSP?

#define START_SYSTEM_TIMER() (TCCR0 |= (1 << CS01); TIMSK |= (1 << TOIE0))

//------------------------------------------------------------------------------
int main()
{
GICR = 1 << IVCE;
GICR = 1 << IVSEL;
// GICR |= (1 << INT1);
// MCUCR |= (1 << SE); // enable sleep mode

EECR |= (1 << EEMWE);
EECR |= (1 << EERIE);

DDRD |= 0x30;

START_SYSTEM_TIMER();

__enable_interrupt ();

for(;;)
{
PORTD ^= 0x20; // For test control from free pins

}


}

#pragma vector = TIMER0_OVF_vect
__interrupt void System_Timer(void)

{

PORTD ^= 0x10; // For test control from free pins

} // System_Timer


В АТМЕГА162 для ТС0 появилась возможность использовать не только прерывание по переполнению (ТО), но и по совпадению (ОС). ИМХО, это более правильный метод. Вот, например, как это работает у меня:

//инициализация ТС0:
TCCR0 = (1<<WGM01) | (1<<CS00) | (1<<CS02); //prescaler=1024
OCR0 = 78; //100 Hz @ 8MHz
TIMSK |= (1<<OCIE0);

//обработчик прерывания ТС0
#pragma vector=TIMER0_COMP_vect
__interrupt void TC0_comp()
{
//обработка прерывания
}
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Nov 21 2006, 16:47
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Никак не хочет запускаться таймер ни по одному из предложенных вариантов. Может нужно еще запускать внешний кварц 8МГц спец. командой? Приведите, пожалуйста пример инициализации системы тактирования системы, но вроде я все учел.
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 22 2006, 18:09
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Vladimir_T @ Nov 21 2006, 16:47) *
Никак не хочет запускаться таймер ни по одному из предложенных вариантов. Может нужно еще запускать внешний кварц 8МГц спец. командой? Приведите, пожалуйста пример инициализации системы тактирования системы, но вроде я все учел.

Fuse M161C уберите.

пример в ответе #3 - рабочий, сам также инициализирую:

TIMSK |= (1 << OCIE0);
OCR0 = 0x55; // <-- число при достижении которого будет сгенерировано прерывание + сброс таймера
TCCR0 = (1 << WGM01) | 5; // запуск таймера

Никаких исключений для T0 M162 относительно других таймеров нет.



Цитата
Нужно записать занчение интервала таймера в регистр TCNT0 при инициализации. И в прерывании по переполнению его нужно постоянно усанавливать.

Ой? Зачем это?
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 22 2006, 22:23
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Извеняйте..а ты работаешь с Jtagом? Просто ты работал 8515 и может нема жтага. Если есть то с его помощью в студии прекрасно можно програмить фьюзы...что особо приятно трудно перепутать где запрограмировано а где нет...........
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 23 2006, 00:23
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
GICR = 1 << IVCE;
GICR = 1 << IVSEL;

Вы бутлоадер пишете?
В простой тестовой программке перенос таблицы векторов в область бутлоадера смотрится весьма странно. Для начала не трогайте GICR.
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Nov 23 2006, 06:32
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Программируется процессор с помощью AS2M, по SPI.
JTAGa на плате нет, о чем сожалею.
В 8515 была задействована область BOOT секции. Для 162 это, действительно не актуально стало, не буду переносить вектора прерываний.
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Nov 24 2006, 12:15
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Спасибо, г-н defunct, действительно FUSE M161C установлен по умолчанию и убрать его у меня нет возможности, тогда меня устраивает 162-ой в режиме совметимости со 161-м.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 16:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016