роботы робототехника микроконтроллеры


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

> Описание: Привет помогите с настройкой таймера ATtiny13
Azzazzel Post Id



Рядовой


Сообщений всего: 7
Дата рег-ции: Нояб. 2015  



Привет помогите с настройкой таймера 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



}


спс заранее.

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



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



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.
 
 Top
Azzazzel Post Id



Рядовой


Сообщений всего: 7
Дата рег-ции: Нояб. 2015  



Можете привести хоть пример настройки таймера на стс ?

буду благодарен
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



Azzazzel пишет:
Можете привести хоть пример настройки таймера на стс ?

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


могу но вечером,
рабочий пример на 40 кГц
 
 Top
Azzazzel Post Id



Рядовой


Сообщений всего: 7
Дата рег-ции: Нояб. 2015  



ок спс
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



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



}

(Отредактировано автором: 03 Ноября, 2015 - 23:44:13)

 
 Top
Azzazzel Post Id



Рядовой


Сообщений всего: 7
Дата рег-ции: Нояб. 2015  



Спасибо!!!!!!!!!!!!
 
 Top
Azzazzel Post Id



Рядовой


Сообщений всего: 7
Дата рег-ции: Нояб. 2015  



помогите плз настроить таймер на период 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
Заранее благодарен.
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



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

(Отредактировано автором: 09 Ноября, 2015 - 19:50:29)

 
 Top
Azzazzel Post Id



Рядовой


Сообщений всего: 7
Дата рег-ции: Нояб. 2015  



спасибо а можно формулы по которым можно вычислять OCR и пределитель.
Буду премного благодарен.
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



Azzazzel пишет:
спасибо а можно формулы по которым можно вычислять OCR и пределитель.
Буду премного благодарен.


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

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

CODE:
OCRx=(Fcpu/(2*N*F))-1
 
 Top
Azzazzel Post Id



Рядовой


Сообщений всего: 7
Дата рег-ции: Нояб. 2015  



Ок строю таймер так:
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 милисекунд.
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



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 просто не надо с точкой то писать там целые числа Улыбка

(Отредактировано автором: 10 Ноября, 2015 - 15:23:26)

 
 Top
Vontane Post Id


Рядовой


Сообщений всего: 4
Дата рег-ции: Май 2016  



Спасибо а то смотрим что тут не так, а оказалось что все было в теме

(Отредактировано автором: 30 Мая, 2016 - 13:21:13)

 
 Top
Страниц (1): [1]
« Микроконтроллеры »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru