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

 
 
> tiny13 не выходит из idle по прерыванию
Arvenen
сообщение Jun 1 2008, 17:15
Сообщение #1





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



Tiny13 не выходит из idle режима по прерыванию от компаратора таймера, хотя в документации сказано, что он должен выходитьиз него по любому внутреннему или внешнему прерыванию. Подобная проблема у меня была с mega16, но там она как-то сама собой решилась... Компилятор WinAVR... Да, я пишу на Си... Знаю, для микроконтроллеров со столь малым размером памяти программы это не очень хорошо, но ассемблер я не знаю вовсе, так что буду оптимизировать программу, пока она не поместится в память. Вот программа:

Код
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

#define ADC_VREF_TYPE 0x00

// Вектор прерывания компаратора таймера:
ISR(TIM0_COMPA_vect)
{
    TCNT0 = 0x0;
    
    // Мигание лампочки:
    PORTB ^= 0b00001000;
}

int main(void)
{
    // Начальная инициализация, сгенерирована CodeVisionAVR
    
    // Input/Output Ports initialization
    // Port B initialization
    // Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
    // State5=T State4=T State3=0 State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x08;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 150,000 kHz
    // Mode: Normal top=FFh
    // OC0A output: Disconnected
    // OC0B output: Disconnected
    TCCR0A=0x00;
    TCCR0B=0x03;
    TCNT0=0x00;
    OCR0A=0x99;
    OCR0B=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // Interrupt on any change on pins PCINT0-5: Off
    GIMSK=0x00;
    MCUCR=0x00;

    // Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=0x04;

    // Analog Comparator initialization
    // Analog Comparator: Off
    ACSR=0x80;
    ADCSRB=0x00;

    // ADC initialization
    // ADC Clock frequency: 75,000 kHz
    // ADC Bandgap Voltage Reference: Off
    // ADC Auto Trigger Source: None
    // Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
    DIDR0&=0x03;
    DIDR0|=0x00;
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x8F;

    sei();

    while (1)
    {
        //строки, переводящие контроллер в idle режим
        
        //set_sleep_mode(SLEEP_MODE_IDLE);
        //sleep_mode();    
        
    }
    
    return 0;
}


Так все нормально, лампочка на PB3 начинает подавать признаки жизни, но если раскомментировать строки, переводящие контроллер в idle, то лампочка не загорается... Скажите, пожалуйста, что я делаю не так?

На всякий случай:
Код
Fuses:
  OSCCAL = 5D, 5C
  EESAVE = 1
  WDTON = 1
  CKDIV = 1
  SUT = 2
  CKSEL = 2
  SELFPRGEN = 1
  DWEN = 1
  BODLEVEL = 3
  RSTDISBL = 1
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Arvenen
сообщение Jun 6 2008, 14:54
Сообщение #2





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



Код
Как мне кажется, проблема в прерываниях от АЦП. Согласно хекса ацп установлен в режим непрерывного преобразования, прерывания от ацп разрешены, а программа их обработки в конечном счете совершает переход на адрес 0х000. как я понял, явно обработка прерываний в данном исходнике на С не описана, хотя я могу ошибаться (С я не знаю), тем не менее она происходит.

Как глупо blush.gif да, ацп был включен в непрерывном режиме, и прерывания от него... Но самое глупое, что я пересохраняя каждый раз файл с исходником на новое имя, не меняла его в проекте и при компиляции использовала один и тот же самый первый файл без изменений... По сути даже выложенные мной выше код на си и hex получаются далеко не одинаковыми... Эх, голова садовая... smac, большое вам спасибо!

Код
Вообще если программа не сложная легче ее на АСМЕ написать, могу взяться если опишете алгоритмы подробно.

Нет, что вы, мне и так жутко неудобно... Тем более, что программа на самом деле планируется довольно большая, я даже сомневаюсь, что она поместится в 1 килобайт памяти tiny13...
Go to the top of the page
 
+Quote Post



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

 


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


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