Форум по разработке и ремонту электронной техники Киевский форум радиолюбителей и электронщиков. Форумы по разработке и ремонту электронной техники
    Схемы электрические принципиальныеГлавная    ФорумФорум    ПоискПоиск по форуму    Личные сообщенияФайлообменник    Личные сообщенияРадиотехнический каталог   

Фотогалерея   <b>Профиль</b>Ваш профиль    Личные сообщенияЛичные сообщения    ГруппыГруппы   

FAQFAQ    РегистрацияРегистрация    ВходВход

Уважаемые посетители! Это старая версия форума. Новая версия находится по адресу: http://www.remexpert.com
Проблемы с таймером в ATMega8...
На страницу 1, 2, 3, 4, 5, 6  След.
 
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС...
 
Автор Сообщение
MIDAS
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 02.04.2007
Сообщения: 40
Откуда: Україна

СообщениеДобавлено: 09 Апр 2007, 16:44    Заголовок сообщения: Проблемы с таймером в ATMega8... Ответить с цитатой

Всем привет!
Вот решил поработать с таймером, взял пример простой программы которая моргает светодиодом черз каждую секунду и решил в ньом разобратся. Пока печатал код всё понял, почти без затруднений. Но от как только дело дошло до SHIFT+F9 сразу у меня выскочила ошибка мол в месте где написано "INTERRUPT(SIG_OVERFLOW1)" синтаксическая ошибка, не пойму в чем дело Злость , подскажите.
Работаю я на компиляторе CodeVisionAVR, в опциях выбрал ATMega8, ниже привожу исходник:
Код:

#include<MEGA8.h>
#define MASK 0x01
#define Freq 4000000 //частота системной синхронизации в Гц 

INTERRUPT(SIG_OVERFLOW1)
{
 TCNT1=0x10000-(Freq/1024);
 PORTB^=MASK;
}

void main(void)
{
 DDRB=0x01;
 TCCR1A=0;
 TCCR1B=5;
 TCNT1=0x10000-(Freq/1024);
 TIFR=0;
 TIMSK-0x80;
 GIMSK=0;
 sei();
 while(1);
}
Грусть Грусть
_________________
WRTC
/*With Respect To C*/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 10 Апр 2007, 11:27    Заголовок сообщения: Ответить с цитатой

В CVAVR есть генератор кода ... Вам предалагают им воспользоваться при создании нового проекта ... так Вы можете увидеть правильный синтаксис процедур обработки прерываний. Если отличаетесь любознательностью, то можете открыть справку - в этом компиляторе она хоршо структурирована - найдете ответ без проблем.

Еще можете посмотреть примеры исходников в соседней ветке http://www.remexpert.com/forum/viewtopic.php?p=3463#3463

Ну и было бы здорово, если бы сюда написали результат своих проб.

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
MIDAS
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 02.04.2007
Сообщения: 40
Откуда: Україна

СообщениеДобавлено: 10 Апр 2007, 17:53    Заголовок сообщения: Ответить с цитатой

Вот что у меня вышло Смущение
Код:

#include <mega8.h>
#define MASK 0x01

interrupt [TIM1_OVF] void timer1_ovf_isr(void)/*Функция обработкы прерывания по переполнению счетчика Т\С1*/
{
 TCNT1=0xFCBD;     /*инициилизируем счетный регистр значением 64701 отсчитывается 65535-64701=834 такта*/
 PORTB^=MASK;     //Меняем горящий на негорящий и наоборот
}

void main(void)
{
 DDRB=0x01;              //Порт В-выход
 PORTB = 0xFF;          //На этом месте Светодиод загорается
 TCCR1A=0x80;          /*Что означает эта строка???тут Светодиод почемуту гаснит? ПОясните почему??!!!!*/
 TCCR1B=5;               /*Коеффициэнт деления частоты системной синхронизации=1024! ПОЧЕМУ??????? 1024 не понял*/
 TCNT1=0xFCBD;        /*инициилизируем счетный регистр значением 64701 отсчитывается 65535-64701=834 такта*/
 TIFR=0;                    //Сбрасываем все флаги прерываний от Т\С1
 TIMSK=0x80;            //Разрешаем прерывания при переполнении от Т\С1
 #asm("sei")              //Общее разрешение прерываний
 while(1);                   //Ожидаем прерывание от  Т\С1       
}

Код по моему нормальный, а вот при отладки в VMLAВ светодиод блымнул только один раз (я в коментариях указал где), ПОЧЕМУ!!! Слезы Вопрос
Проект VMLAВ
Код:

.MICRO "ATmega8"
.TOOLCHAIN "GENERIC"
.TARGET    "SH.hex"
.COFF      "SH.cof"
.SOURCE    "sh__.c"

.TRACE             
.POWER VDD=5 VSS=0 
.CLOCK 1meg         
.STORE 250m         
D1 VDD SVTD
R1 SVTD  PB0 470

.PLOT V(PB0)

_________________
WRTC
/*With Respect To C*/


Последний раз редактировалось: MIDAS (12 Апр 2007, 14:50), всего редактировалось 2 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 13 Апр 2007, 15:28    Заголовок сообщения: Ответить с цитатой

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

Но самым первым делом! Мы проверяем настройку переферии контроллера ... в вашем случае таймера ...

TIMSK=0x04 .... я не помню настроек MEGA8 и не смотрел их ... но генератор кода ... для MEGA8 для сработки прерывания по переполнению указал именно 2-й бит регистра.

Седьмой же бит используется в 90S2313 ... вроде.

После такой "доработки" пошло... и еще ... TCCR1A=0x80; -- сами написали и справшиваете. что это.

____
P.S.
Возможно где-то и не прав - поправьте ... просто времени нет по справочникам лазить. а напамять тонкости такие не помню - редко занимаюсь писательством.

_________________
AndryG


Последний раз редактировалось: AndryG (16 Апр 2007, 12:25), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
dimonbest
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 12.04.2007
Сообщения: 14

СообщениеДобавлено: 15 Апр 2007, 12:48    Заголовок сообщения: Ответить с цитатой

Попробую так обьяснить...
TCCR1A=0x80; /*Что означает эта строка???тут Светодиод почемуту гаснит? ПОясните почему??!!!!*/
Лучше присвоить этому регистру значение 0, хотя у меня тут светоиод не гаснет. Отлаживал в AvrStudio
TIMSK=0x80; //Разрешаем прерывания при переполнении от Т\С1
Это Вы разрешили прерывания при переполнении тамера счетчика 2 а не 1 . Надо исправить на
TIMSK=4;
И заработает Радостный
Если не получится могу выслать проект в CVAVR и AVRSTUDIO
Удачи
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
MIDAS
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 02.04.2007
Сообщения: 40
Откуда: Україна

СообщениеДобавлено: 15 Апр 2007, 13:36    Заголовок сообщения: Ответить с цитатой

dimonbest ОГРОМНОЕ ТЕБЕ ЧЕЛОВЕЧЕСКОЕ С-П-А-С-И-Б-О Радостный Восклицание А то я с этой фигнёй уже вторую неделю парюсь Ругань
Но всё таки не пойму одного! Вот код
Код:

include <mega8.h>
#define MASK 0x01

interrupt [TIM1_OVF] void timer1_ovf_isr(void)/*Функция обработкы прерывания по переполнению счетчика Т\С1*/
{
 TCNT1 = 0xFFFC;
 PORTB^=MASK;          //Меняем горящий на негорящий и наоборот
}

void main(void)
{
 DDRB=0x01;             //Порт В-выход
 PORTB = 0xFF;          //На этом месте Светодиод загорается
 
 TCCR1A = 0;            //єту строку впринципе можно не писать ЧТО ОНА ЗНАЧит????????????
 TCCR1B=0x03;         /*Коеффициэнт деления частоты системной синхронизации*/
 TCNT1 = 0xFFFC;
 TIMSK=4;                 //Разрешаем прерывания при переполнении от Т\С1
 
 #asm("sei")             //Общее разрешение прерываний
 while(1);                  //Ожидаем прерывание от  Т\С1
}


Почему строка TIMSK=4; работаэт а не TIMSK=0x80; 0x80 вдфоисной системе числения равно 0b10000000 тоесть устанавлеваэм лиш 8 бит он називается
TOIE1 - Timer/Counter1 Overflow Interrupt Enable - разрешение прерывания по переполнению 1-го таймера а 4 это 00000100 то есть устанвливаем лиш 3 бит
он зарезервирован и ничего не значит почему так или я чтото не так понял Смущение

_________________
WRTC
/*With Respect To C*/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dimonbest
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 12.04.2007
Сообщения: 14

СообщениеДобавлено: 15 Апр 2007, 13:45    Заголовок сообщения: Ответить с цитатой

Вы наверное перепутали DATASHEETы
Bit 7 – OCIE2: Timer/Counter2 Output Compare Match Interrupt Enable
Bit 2 – TOIE1: Timer/Counter1, Overflow Interrupt Enable - именно этот бит разрешает прерывания при переполнении таймера счетчика 1 в ATMega8
Даташиты можно скачать с их официального сайта: www.atmel.com
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
MIDAS
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 02.04.2007
Сообщения: 40
Откуда: Україна

СообщениеДобавлено: 15 Апр 2007, 17:00    Заголовок сообщения: Ответить с цитатой

А есть в инэте даташиты на руском Вопрос
_________________
WRTC
/*With Respect To C*/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dimonbest
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 12.04.2007
Сообщения: 14

СообщениеДобавлено: 15 Апр 2007, 17:51    Заголовок сообщения: Ответить с цитатой

http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/index.htm
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
MIDAS
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 02.04.2007
Сообщения: 40
Откуда: Україна

СообщениеДобавлено: 15 Апр 2007, 18:15    Заголовок сообщения: Ответить с цитатой

А архитектура ATmega128 похожа на ATmega8, а то что бы опять таких приколов как с таймером не было Плохая идея
_________________
WRTC
/*With Respect To C*/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
На страницу 1, 2, 3, 4, 5, 6  След.
Страница 1 из 6

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы можете просматривать вложения в этом форуме


Rambler's Top100 PageRank Яндекс цитирования
Сайты наших друзей: Гири, все о гирях, Автоматизация магазинов, супермаркетов, ресторанов, кинотеатров,
Весы электронные, Сканеры штрих-кода, Принтеры штрих-кода

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 0.9059s (PHP: 79% - SQL: 21%) - SQL запросов: 12 - GZIP enabled - Debug on