Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Stas_Garcia
Ушел наливать чай
187 / 137 / 32
Регистрация: 02.03.2013
Сообщений: 652
1

Переключение в таймере (Atmega 8515)

15.12.2014, 16:06. Просмотров 627. Ответов 6
Метки нет (Все метки)

Привет ребят. Использую таймер 0, чтобы выполнять прерывания на совпадение. Вот даташит на мк: http://lib.chipdip.ru/059/DOC000059786.pdf

Настраиваю таймер:
C
1
2
TIMSK = (1<<OCIE0);
    TCCR0 = (1<<CS02)|(1<<CS00);// с предделителем 1024
Использую его для управления семисегментным 4 разрядным индикатором. Суть в том, что даже при прескейле в 1024 таймер выполняется слишком быстро, т.е. первые 3 разряда почему-то обновляются примерно 4 раза в секунду( т.е. они очень слабо почти невидно мигают), а последний постоянно активный. Получается вид, что работает только первый разряд. Как исправить? Никаких задержек типа _delay нигде не использую, только в основной программе, чтобы вести счет для вывода на экран.

Добавлено через 5 минут
Вот, что прописано в таймере:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ISR(TIMER0_COMP_vect) 
{int n;
    for (n=1;n<5;n++)
    {
        
        set_razrad(n);
        
        switch (n)
        {
        case 1: vivod1();
                    
            break;
        case 2:vivod2();
            break;
        case 3:vivod3();
            break;
        case 4:vivod4();
            break;
        }
        
        //_delay_us(400);
    }
Добавлено через 2 минуты
И еще если ставить задержку в начале обработки таймера, то первые 3 сегмента начинают явно мигать, только чуть ярче(т.е. у них чуть больше времени на загорание, поэтому так мигают). Я бы мог конечно решить проблему, прописав в таймере задержки, но я делаю схему, в которой точность временная - критический момент.

Добавлено через 8 минут
Все, поменял конструкцию с циклом на такую:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int n=1;
ISR(TIMER0_COMP_vect) // функция вывода числа на экран
{ 
    //for (n=1;n<5;n++)
    //{
        if (n>5)
        {
            n=1;
        }
        set_razrad(n);
        
        switch (n)
        {
        case 1: vivod1();       
            break;
        case 2:vivod2();
            break;
        case 3:vivod3();
            break;
        case 4:vivod4();
            break;
        }
        n++;
        //_delay_us(400);
    //}
    
    
    
}
И стало работать нормально, я понял в чем проблема была, Цикл проходил независимо от скорости таймера, что-то после бессонной ночи в голове каша...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2014, 16:06
Ответы с готовыми решениями:

ATMega 8515
Срочно нужна помощь в написании программы для микроконтроллера ATMega 8515. Необходимо что-нибудь...

Ошибка в расчётах ATMega 8515
Ошибка в расчётах ATMiko 8515 Здравствуйте! У меня возникла проблема с данным МК, дело в том,...

Проблема прошивки atmega 8515 через LPT
Помогите разобраться) сам новичок в этом) Вобщем прошивал МК atmega 8515 через LPT порт с помощью...

Нулевой таймер на срабатывание прерывания раз в сек (Atmega 8515)
Привет народ. Каким образом нужно настроить частоту на таймере 8 битном, чтобы получить прерывание...

Макетная плата для Atmega 32?atmega 8
Здравствуйте !Уважаемые мастера нужна помощь (а именно нужна схема макетной платы для меги 32 и...

6
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
15.12.2014, 17:29 2
Если "n" ни где кроме прерывания не используется определите его вот так в прерывании:
C
1
static unsigned char n = 0;
1
Stas_Garcia
Ушел наливать чай
187 / 137 / 32
Регистрация: 02.03.2013
Сообщений: 652
15.12.2014, 18:11  [ТС] 3
В принципе можно, но не сильно повлияет на работу программы.
У меня появился возможно глупый вопрос, но код, который подойдет для 40 ноговой dip атмеги 8515 будет вести себя так-же на этой же атмеге в корпусе к примеру TQFP, у которой 44 ножки (+4 неактивных NC)?
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
15.12.2014, 20:19 4
Цитата Сообщение от Stas_Garcia Посмотреть сообщение
В принципе можно, но не сильно повлияет на работу программы
В данном случаи да, но закрепляет привычку писать правильно.
На второй вопрос ответ: да подойдёт.
1
Stas_Garcia
Ушел наливать чай
187 / 137 / 32
Регистрация: 02.03.2013
Сообщений: 652
16.12.2014, 03:32  [ТС] 5
А нет отбой, работает кнопка, но светодиод второй(красный почти не горит, лтшь маленький свет разглядеть можно, а зеленый ярко горит, в чем может быть проблема?
Если местами менять, то зеленый еле горит.

Добавлено через 56 минут
Я проверил, даже если будет код типа
C
1
2
PORTA=(1<<PINA3);
PORTA=(1<<PINA5);
То все равно второй светодиод горит тусклее намного, почти не видно.

Добавлено через 1 час 33 минуты
Окей... это работало от моего пальца, в буквальном смысле... кнопки нормально не контактировали с пинами мк... это многое объясняет... Я пол дня провел решая эту головоломку, думая на сколько можно быть тупым, чтобы не разобраться в кнопочках... Но все-же еле горящий зеленый диод не дает мне покоя, не может быть, чтобы он так тускло горел только из-за контактов... Пора баиньки...
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
16.12.2014, 07:34 6
Схему и фото монтажа в тему.
0
Stas_Garcia
Ушел наливать чай
187 / 137 / 32
Регистрация: 02.03.2013
Сообщений: 652
16.12.2014, 19:48  [ТС] 7
Все работает уже, просто плохой контакт был.
0
16.12.2014, 19:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2014, 19:48

Програмер для 8515 на АТ91SAM7.
Вопрос чайнический: Есть такая задачка - надо запрограмировать 8515 с АТ91SAM7 по SPI. Сделал...

Ошибка в таймере
В консольном приложении ругается на эту строку timer.Tick += new EventHandler(timer_Tick); Пишет...

Светофор на таймере
Всем здравствуйте. В c++ builder создаю светофор на таймере со следующими условиями: Изначально...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru