Easyelectronics.ru

Электроника для всех
Текущее время: 08 мар 2021, 09:25

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 17:14 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1027
Откуда: Винница
Покажи инициализацию таймера. Ты его вообще включаешь? :)

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 17:21 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Вот весь текст:
Цитата:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date :
Author :
Company :
Comments:


Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega16.h>
#include <delay.h>
// Standard Input/Output functions
#include <stdio.h>
unsigned int a;
// Timer 1 input capture interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
// Place your code here
a=(256*ICR1H)+ICR1L;
UDR=(a);
delay_ms(500);
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0xFF;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: CTC top=ICR1
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Rising Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: On
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x5D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x20;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here

};
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 17:36 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1027
Откуда: Винница
Asche писал(а):
TCCR1B=0x5D;


Я так понял, включается режим сброса по совпадению, с максимумом в ICR1, в который ты записываешь 0 дальше по тексту. А если попробовать TCCR1B=0x45?

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 18:01 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Вроде работает, спасибо.
А как правильно настроить с помощью CVAVR?
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 18:04 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1027
Откуда: Винница
Ну например Mode: Normal top=FFFFh. Тогда точно будет работать.
А вообще, теоретически, любые режимы у которых top не задается в ICR1. Смотря что ты хочешь получить :)

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 18:24 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
ИМХО, нужно самостоятельно разбираться в значениях регистров для загрузки. Все эти визарды - от лукавого. Если придётся перестраивать тот же таймер на ходу... мало не покажется Например, у меня в синтезаторе, таймер только слегка инициализируется на старте (разрешаются прерывания по переполнению), вся работа с ним - внутри программы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 18:35 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1027
Откуда: Винница
THE BEAST писал(а):
ИМХО, нужно самостоятельно разбираться в значениях регистров для загрузки. Все эти визарды - от лукавого. Если придётся перестраивать тот же таймер на ходу...

Если придется перестраивать таймер, то открывается визард, настраивается как надо и делается превью кода. Из него копируется нужная часть и вставляется куда надо ;)

А вообще, конечно, надо знать что за что отвечает. Но визард в cvavr удобный :)

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 18:53 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
xrayman писал(а):
то открывается визард, настраивается как надо и делается превью кода. Из него копируется нужная часть и вставляется куда надо ;)


А как без знания определить нужную часть? Особенно, когда настройки рассчитаны и лежат в регистрах/переменных? И как это рассчитать визардом?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB