Форум myROBOT.ru » Лаборатория » Микроконтроллеры » Привет помогите с настройкой таймера ATtiny13

Страниц (1): [1]
 

1. Azzazzel - 02 Ноября, 2015 - 23:49:04 - перейти к сообщению
Привет помогите с настройкой таймера ATtiny13
Только начал освоение ATtiny13 и никак не могу справиться с настройкой таймера .
вот мой код:
CODE:

#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
//#include <avr/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

#define F_CPU 9600000UL //14,7456 Mz




void Port_Init(void)
{
//setup ports i/o

DDRB= 0b11111111;
PORTB=0b00000000;//portB.5


//26t
}






int main(void)
{

cli();
Port_Init();



TCCR0A|=(0<<FOC0A)|(0<<WGM00)|(1<<WGM01)|(0<<CS02)|(0<<CS01)|(1<<CS00);
TIMSK0|=(1<<OCIE0A)|(0<<TOIE0);
TIFR0 |=(1<<OCF0A);
OCR0A=145;


sei();
// 73t
asm("NOP");
asm("NOP");

while(1)
{


asm("NOP"); //TODO:: Please write your application code
}
}
ISR( TIM0_COMPA_vect)
{


//


PORTB^=(1<<2);
//5c



}


спс заранее.

З.Ы. Делаю проверку на протеусе , емулятор контроллера молчит. Ламер
2. killgur - 03 Ноября, 2015 - 08:21:46 - перейти к сообщению
Azzazzel пишет:
Привет помогите с настройкой таймера ATtiny13
Только начал освоение ATtiny13 и никак не могу справиться с настройкой таймера .
вот мой код:
CODE:

#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
//#include <avr/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

#define F_CPU 9600000UL //14,7456 Mz




void Port_Init(void)
{
//setup ports i/o

DDRB= 0b11111111;
PORTB=0b00000000;//portB.5


//26t
}






int main(void)
{

cli();
Port_Init();



TCCR0A|=(0<<FOC0A)|(0<<WGM00)|(1<<WGM01)|(0<<CS02)|(0<<CS01)|(1<<CS00);
TIMSK0|=(1<<OCIE0A)|(0<<TOIE0);
TIFR0 |=(1<<OCF0A);
OCR0A=145;


sei();
// 73t
asm("NOP");
asm("NOP");

while(1)
{


asm("NOP"); //TODO:: Please write your application code
}
}
ISR( TIM0_COMPA_vect)
{


//


PORTB^=(1<<2);
//5c



}


спс заранее.

З.Ы. Делаю проверку на протеусе , емулятор контроллера молчит. Ламер



протеус может молчать по разным причинам но явно в программе ошибки

COM0A1
COM0A0
FOC0A (зачем то туда попытка записать 0)
не утановлен ни один в 1 и как следствие выводы отключены от таймера

все остальное не понятно так как цель программы не ясна
вроде как попытка на частоте таймера вручную прерыванием дрыгать отключенной 5 ногой досчитав до 145.
3. Azzazzel - 03 Ноября, 2015 - 11:42:52 - перейти к сообщению
Можете привести хоть пример настройки таймера на стс ?

буду благодарен
4. killgur - 03 Ноября, 2015 - 12:02:30 - перейти к сообщению
Azzazzel пишет:
Можете привести хоть пример настройки таймера на стс ?

буду благодарен


могу но вечером,
рабочий пример на 40 кГц
5. Azzazzel - 03 Ноября, 2015 - 13:20:47 - перейти к сообщению
ок спс
6. killgur - 04 Ноября, 2015 - 00:36:46 - перейти к сообщению
Azzazzel пишет:
ок спс


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

7 нога будет дрыгаться (меандр)

специально поставил этот протеус и в нем запустил кстати осцил показал только после некоторых раздумий о своем

не забыть убрать в фузах в протеусе делитель на 8 (если конечно надо)

CODE:

#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
//#include <avr/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

//#define F_CPU 9600000UL //14,7456 Mz

#define TEST_PIN 2




void Port_Init(void)
{
//setup ports i/o


DDRB |= (1<<TEST_PIN);

//26t
}






int main(void)
{


Port_Init();

cli();

TCCR0A|=(1<<WGM01);
TCCR0B|=(1<<CS00); // здесь было ошибочно написано что этот бит ставитяся в TCCR0A
TIMSK0|=(1<<OCIE0A);
//TIFR0 |=(1<<OCF0A);
OCR0A=145;

sei();

// 73t
asm("NOP");
asm("NOP");

while(1)
{


asm("NOP"); //TODO:: Please write your application code

}
}


ISR(TIM0_COMPA_vect)
{


//


PORTB ^= (1<<TEST_PIN);

//5c



}
7. Azzazzel - 04 Ноября, 2015 - 12:13:44 - перейти к сообщению
Спасибо!!!!!!!!!!!!
8. Azzazzel - 09 Ноября, 2015 - 12:44:34 - перейти к сообщению
помогите плз настроить таймер на период 1 милисекунда.
Янастраиваю таймер так :
TCCR0A|=(0<<FOC0A)|(0<<WGM00)|(1<<WGM01);
TCCR0B|=(1<<CS02)|(0<<CS00);
TIMSK0|=(1<<OCIE0A)|(0<<TOIE0);
OCR0A=57;

частота : #define F_CPU 14745600UL //14,7456 Mz
Заранее благодарен.
9. killgur - 09 Ноября, 2015 - 20:49:13 - перейти к сообщению
Azzazzel пишет:
помогите плз настроить таймер на период 1 милисекунда.
Янастраиваю таймер так :
TCCR0A|=(0<<FOC0A)|(0<<WGM00)|(1<<WGM01);
TCCR0B|=(1<<CS02)|(0<<CS00);
TIMSK0|=(1<<OCIE0A)|(0<<TOIE0);
OCR0A=57;

частота : #define F_CPU 14745600UL //14,7456 Mz
Заранее благодарен.


1000Гц

предделитель 64

Расчет OCROA			
F FCPU N OCR0A
1000 14745600 64 114,2
10. Azzazzel - 09 Ноября, 2015 - 21:27:01 - перейти к сообщению
спасибо а можно формулы по которым можно вычислять OCR и пределитель.
Буду премного благодарен.
11. killgur - 09 Ноября, 2015 - 21:35:02 - перейти к сообщению
Azzazzel пишет:
спасибо а можно формулы по которым можно вычислять OCR и пределитель.
Буду премного благодарен.


она написана в даташите на тини13

для генератора частоты F в режиме СТС

CODE:
OCRx=(Fcpu/(2*N*F))-1
12. Azzazzel - 10 Ноября, 2015 - 15:49:10 - перейти к сообщению
Ок строю таймер так:
CODE:

TCCR0A|=(0<<FOC0A)|(0<<WGM00)|(1<<WGM01);
TCCR0B|=(0<<CS02)|(1<<CS01)|(1<<CS00);
TIMSK0|=(1<<OCIE0A)|(0<<TOIE0);
// TIFR0 |=(1<<OCF0A);
// OCR0A=145;


OCR0A=114.2;
sei();




само прерывание выглядит так:
CODE:

ISR( TIM0_COMPA_vect)
{



PORTB^=(1<<2);

}



Но от протеус так не думает( . В его осцелографе вместо 1 милисекунды получаеться приблизительно 6 милисекунд.
13. killgur - 10 Ноября, 2015 - 16:21:26 - перейти к сообщению
Azzazzel пишет:
Ок строю таймер так:
CODE:

TCCR0A|=(0<<FOC0A)|(0<<WGM00)|(1<<WGM01);
TCCR0B|=(0<<CS02)|(1<<CS01)|(1<<CS00);
TIMSK0|=(1<<OCIE0A)|(0<<TOIE0);
// TIFR0 |=(1<<OCF0A);
// OCR0A=145;


OCR0A=114.2;
sei();




само прерывание выглядит так:
CODE:

ISR( TIM0_COMPA_vect)
{



PORTB^=(1<<2);

}



Но от протеус так не думает( . В его осцелографе вместо 1 милисекунды получаеться приблизительно 6 милисекунд.



или примерно 8 если не снят флажок деления на 8 в фузах

114 просто не надо с точкой то писать там целые числа Улыбка
14. Vontane - 30 Мая, 2016 - 14:20:20 - перейти к сообщению
Спасибо а то смотрим что тут не так, а оказалось что все было в теме