Jump to content

elektromonter

Members
  • Content Count

    5
  • Joined

  • Last visited

Community Reputation

0 Обычный

About elektromonter

  • Rank
    Новенький

Электроника

  • Стаж в электронике
    6-10 лет
  1. SOKPOWENEU спасибо большое за помощь! как раз и была проблема с фузами, изменил CLKDIV8 и о ч удо! Все зароботало! Я тему не буду закрывать, а то вопросов еще будет наверное много )))
  2. SOKPOWENEU могу порядок записи байтов напутать. напишите как надо пожалуйста. я с этим старшим и младшим регистром голову сломал! мне надо чтоб таймер до захвата считал в мою переменную INT bufer записывал 1,2,3,4,5,6,7,8,9,..... и так по порядку до заполнения переменной INT.
  3. ясно, спасибо что с портами разъяснили. SOKPOWENEU в атмел студио теги [СОDE] [/СОDE] вроде бы как не нужну, это в cvavr они необходимы. по поводу SIGNAL я всегда и писал ISR, но оказалось при подключении файлика #include <avr/signal.h> студия понимает и SIGNAL . записывал в вектор прерываний PORTD|=1<<PORTD1; PORTD|=0<<PORTD1; и смотрел на ножке осциллографом, прерывание отрабатывает исправно при каждом импульсе на ICP. Я уже на компилятор грешу. почему на меге прокатывает, а на тиньке нет?.. просто на тини2313 уже куплена и не одна. Да и незачем там такое количество наворотов, я когда учился на радиоконструктора то вбили в голову что элементы надо выбирать оптимально под поставленную задачу. Вот и стало это моим девизом. Зачем ставить 100А МОСФЕТ на управление релюшкой с током 0.1А?
  4. ForumUser: тактирование задал с предделителя на 1024, вот эта строчка- TCCR1B=(1<<CS10)|(0<<CS11)|(1<<CS12)| //предделитель 1024 DmitryS: Студия позволяет и такую запись... пробовал и так как на ваших примерах, разници ни какой. Но вот какая штука получилась... Перепортировал я эту программу под ATmega8 и она заработала! Ни чего не менял! только названия портов и регистр TIMSK=1<<ICIE1 в TIMSK у ATmega8 незывается TICIE1, и все! там все четко заработало по приведенному мной расчету!
  5. Всем доброго времени суток.. Только начал изучать программирование АВР МК, пишу в AtmelStudio6 на СИ. Пару простых программ управления шаговым двигателем по опросу ножек, ацп и компаратора написал, прошил МК все работает.. Вот появилась задача сделать управление шаговым двигателем в зависимости от температуры и частоты поступающих импульсов. МК выбрал ATtiny2313. Застрял в самом начале, а именно с счетчиком Т1. Попробовал задавать временной интервал с помощью переполнения таймера Т0 с дополнительным делением частоты в обработчике прерываний и считать приходящие импульсы по внешнему прерыванию, пробовал брать за временной интервал внешние прерывания и считать количество переполнений Т0. все это моделировал в Протеусе, так как измеряемая частота низкая от 30 до 80 Гц то погрешность допускается максимум до 1-го Гц, при моделировании погрешность достигала 3-х Гц что не допустимо. Выбор пал на Т1 так как там есть режим "захвата" и защита от ложных срабатываний. Вот и бьюсь с ним вторые сутки! Проблема в следующем: выставил я прерывание по захвату, настроил делитель на 1024, и считаю сколько раз натикает счетчик в регистр ICR1 от одного прерывания до другого, заношу значение посчитанного в переменную INT и в теле программы выполняю для (проверки правильности алгоритма мышления и написания) через оператор IF зажигание светодиода... Тактовая частота 8 мГц. Вот и считаю 8000000/1024=7812.5 Гц тактовая частота на входе в счетчик, 1/7812.5=0.128 мс. Беру для примера частоту измеряемого сигнала 80 Гц, 1/80= период 12.5 мс. Значит за время между прерываниями в регистр он должен положить 12.5/0.128=97.65..., округляю до 98 (тут можно вроде бы как обойтись одним младшим регистром ICR1L. пробовал, таже белеберда что и с считыванием ICR1L и ICR1Н только порог на 10 Гц становится) и записываю условия функции, надеюсь что светодиод загорится до 80 Гц и потухнет после 80 Гц. В результате протеус зажигает его до 940 Гц и тушит после. Что не так? Где ошибка? поиск ничего вразумительного не дал! #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <avr/portpins.h> volatile unsigned int bufer; SIGNAL (TIMER1_CAPT_vect) { bufer=ICR1L<<8; bufer|=ICR1H; ICR1L=0; ICR1H=0; TCNT1=0; } int main(void) { DDRD=(0<<PD6)|(1<<PD5)|(1<<PD4)|(1<<PD3)|(1<<PD2)|(1<<PD1)|(1<<PD0); PORTD=0x00; DDRB=0xFF; PORTB=0x00; // инициализация таймера в режиме захвата TCCR1B=(1<<CS10)|(0<<CS11)|(1<<CS12)| //предделитель 1024 (1<<ICNC1)|(1<<ICES1); TIMSK=1<<ICIE1; sei(); while(1) { if (bufer<98) { PORTB=1<<PB0; } else { PORTB=0<<PB0; } } }
×
×
  • Create New...