Полная версия этой страницы:
Tiny13. Таймер в режиме СТС.
Столкнулся с ситуацией, когда меандр, сгенерированный таймером, не проходит на вывод контроллера. В AVRstudio такая же ситуация. Вывод кажись сконфигурирован верно... хотя я уже ни в чем не уверен... Если у кого было подобное, подскажите где нужно хомутнуть чтоб получить такую ситуацию. Чтение даташита не дало ничего толкового в данном приложении. Файлик с кодом прицепляю...
Ничего не понимаю... чтоб вот такое не заработало....
#include <tiny13.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out
// State5=T State4=T State3=T State2=1 State1=0 State0=0
PORTB=0x04;
DDRB=0x07;
TCCR0B = 0x00; //stop
OCR0A = 0xBB;
OCR0B = 0xBB;
TCNT0 = 0x45; //set count
TCCR0A = 0x42;
TCCR0B = 0x04; //start timer
// 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=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
while (1)
{
// Place your code here
};
}
у меня уже ступор.... HELP!!!
Если нет советов, то подскажите кто в курсе... Где в AVR Studio видно изменение состояния вывода OC0A? Если он подключен к выводу, будет ли меняться состояние регистра PORT? Состояние PIN меняется...
А во вкладке I/O View->I/O ATTINI13->"Соответствующий порт" - нету?
Судя по коду у вас CodeVisionAVR, а может воспользоваться мастером проекта, там вроде есть настройки выхода регистра сравнения.
Цитата
TCNT0 = 0x45; //set count
TCCR0A = 0x42;
TCCR0B = 0x04; //start timer
Почему это у вас начальное значение счетного регистра таймера больше чем значения регистров сравнения? Так и не будет ничего работать, т.е совпадения со значениями 0х42 и 0х04 никогда не произойдет.
Цитата
А во вкладке I/O View->I/O ATTINI13->"Соответствующий порт" - нету?
Судя по коду у вас CodeVisionAVR, а может воспользоваться мастером проекта, там вроде есть настройки выхода регистра сравнения.
Нету ничего. Прога написана мастером.
Цитата
Почему это у вас начальное значение счетного регистра таймера больше чем значения регистров сравнения? Так и не будет ничего работать, т.е совпадения со значениями 0х42 и 0х04 никогда не произойдет.
Это ICC штучки... но не важно, он обнулится и на второй круг все пойдет чередом.
Цитата
Это ICC штучки... но не важно, он обнулится и на второй круг все пойдет чередом.
Да тут я попутал, причем попутал даже и регистры OCR0х и TCСR0х.
Могу посоветовать все же установить TCNT0 = 0 и разрешить прерывания по совпадению и в Студии проверить происходят ли эти прерывания. И еще в порт тоже не выводите ничего т.е. PORTB = 0.
Да у вас все должно работать, в студии на выходе счетчика сигнал меняется. Порт и выход счетчика, РАЗНЫЕ аппаратные узлы, подключенные к одному выводу в зависимости от конфигурации.
Состояние бита порта в вашем случае не должно менятся.
Удачи!
sseett, спасибо! Так и поступлю.
И Вам удачи!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.