реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Помогите найти ошибку
KiCom
сообщение Dec 4 2005, 15:02
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 4-12-05
Пользователь №: 11 786



Сегодня на доосуге проводил опыт, была составлена простейшая программа с помощью APPBuilder вот ее код:



//ICC-AVR application builder : 04.12.2005 18:35:13
// Target : 2313
// Crystal: 1.0000Mhz

#include <io2313v.h>
#include <macros.h>

void port_init(void)
{
PORTB = 0x80;
DDRB = 0x80;
PORTD = 0x00;
DDRD = 0x00;
}

//TIMER0 initialize - prescale:1024
// desired value: 4Hz
// actual value: 4,002Hz (0,1%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop timer
TCNT0 = 0x0C; //set count
TCCR0 = 0x05; //start timer
}

#pragma interrupt_handler timer0_ovf_isr:7
void timer0_ovf_isr(void)
{
PORTB ^=BIT(7);
TCNT0 = 0x0C; //reload counter value
}

//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();

MCUCR = 0x00;
GIMSK = 0x00;
TIMSK = 0x02;
SEI(); //re-enable interrupts
//all peripherals are now initialized
}

//
void main(void)
{
init_devices();
//insert your functional code here...
}


Потом она была просимулирована на симуляторе VML все мигало как надо потом это было прошито на МК, в МК я прошил фьюзы на использоваие внутренего кварца с частотой 4 МГЦ но вместо положеных 16 МГЦ мигания светодиода я получил 30 миганий за 25 секунд, тоесть примерно 0.8 Гц, потом я прошил фьзы МК на использование встроенного кварца с цастотой 8Мгц получил частоту 1.8 гц. Где я мог допустить косяк допустил косяк?
Вообще я в этом деле новичок может допустил какуето глупую ошибку, подскажите если не трудно
Go to the top of the page
 
+Quote Post
solidreg
сообщение Dec 4 2005, 18:53
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056



Забыли главную строку в коде: while(1);

Должно быть так:

void main(void)
{
init_devices();
while(1) // stop here and wait for timer interrupt
;
}
Go to the top of the page
 
+Quote Post
starter48
сообщение Dec 4 2005, 19:33
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(KiCom @ Dec 4 2005, 21:02) *
Сегодня на доосуге проводил опыт, была составлена простейшая программа с помощью APPBuilder вот ее код:
...

Потом она была просимулирована на симуляторе VML все мигало как надо потом это было прошито на МК, в МК я прошил фьюзы на использоваие внутренего кварца с частотой 4 МГЦ но вместо положеных 16 МГЦ мигания светодиода я получил 30 миганий за 25 секунд, тоесть примерно 0.8 Гц, потом я прошил фьзы МК на использование встроенного кварца с цастотой 8Мгц получил частоту 1.8 гц. Где я мог допустить косяк допустил косяк?
Вообще я в этом деле новичок может допустил какуето глупую ошибку, подскажите если не трудно

1) На частоте кварца 1МГц мигать должно с частотой 2Гц, т.к. прерывание вызывается с частотой 4Гц, а в нём ты инвертируешь состояние выхода - получается дополнительный делитель на 2.
2) 30 вспышек за 25 сек = 1.2Hz
Сейчас на всякий случай зашью твою прогу в железо и проверю что она выдаёт.
Go to the top of the page
 
+Quote Post
starter48
сообщение Dec 4 2005, 20:14
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(starter48 @ Dec 5 2005, 01:33) *
Цитата(KiCom @ Dec 4 2005, 21:02) *

Сегодня на доосуге проводил опыт, была составлена простейшая программа с помощью APPBuilder вот ее код:
...

Потом она была просимулирована на симуляторе VML все мигало как надо потом это было прошито на МК, в МК я прошил фьюзы на использоваие внутренего кварца с частотой 4 МГЦ но вместо положеных 16 МГЦ мигания светодиода я получил 30 миганий за 25 секунд, тоесть примерно 0.8 Гц, потом я прошил фьзы МК на использование встроенного кварца с цастотой 8Мгц получил частоту 1.8 гц. Где я мог допустить косяк допустил косяк?
Вообще я в этом деле новичок может допустил какуето глупую ошибку, подскажите если не трудно

1) На частоте кварца 1МГц мигать должно с частотой 2Гц, т.к. прерывание вызывается с частотой 4Гц, а в нём ты инвертируешь состояние выхода - получается дополнительный делитель на 2.
2) 30 вспышек за 25 сек = 1.2Hz
Сейчас на всякий случай зашью твою прогу в железо и проверю что она выдаёт.

Под рукой не оказалось 2313, проверил на меге64. Программу адаптировал для компилятора iar320D.

Мигает с частотой 16Гц. Контроллер работает на внутреннем генераторе 8МГц. Т.е. на 1МГц будет мигать с частотой 2Гц.

Так что программа рабочая. Вполне возможно, что твой компилятор ICC не добавляет пустой цикл в конце main(), тогда solidreg прав. Компилятор IAR это сам добавляет for(;;) __sleep(); в конце main(), если программист этого не сделал.
Код
static void port_init(void)
{
PORTB = 0x80;
DDRB = 0xFF;//all pins to OUTPUT
PORTD = 0x00;
DDRD = 0xFF;
}

//TIMER0 initialize - prescale:1024
// desired value: 4Hz
// actual value: 4,002Hz (0,1%)
static void timer0_init(void)
{
TCNT0 = 0x0C; //set count
TCCR0 = 0x07; //start timer (change value to 5 for 90S2313)
}

#pragma vector=TIMER0_OVF_vect
__interrupt void timer0_ovf_isr(void)
{
PORTB_Bit7 ^= 1;//complement bit7
TCNT0 = 0x0C; //reload counter value
}

//call this routine to initialize all peripherals
static void init_devices(void)
{
//stop errant interrupts until set up
port_init();
timer0_init();

TIMSK = 1<<TOIE0;
__enable_interrupt(); //enable interrupts
//all peripherals are now initialized
}

//
void main(void)
{
  init_devices();
  for(;;) {
    MCUCR |= (1<<SE);
    __sleep();
  }
}
Go to the top of the page
 
+Quote Post
Laksus
сообщение Dec 5 2005, 00:47
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



"...Вполне возможно, что твой компилятор ICC не добавляет пустой цикл в конце main(), тогда solidreg прав. Компилятор IAR это сам добавляет for(;;) __sleep(); в конце main(), если программист этого не сделал."
____________________________________
ImageCraft Compiler 7 , по моему, тоже делает бесконечный цикл.

__________________
__________________
"...я прошил фьюзы на использоваие внутренего кварца с частотой 4 МГЦ
...потом я прошил фьзы МК на использование встроенного кварца с цастотой 8Мгц "
______________________________________
1- внутри ATtiny2313, по моему, не кварц, а RC-генератор. Частота которого может менятся от напряжения, температуры, а также настраиваться в широких пределах. Но всетаки вряд ли настолько.
2- использован
#include <io2313v.h>
по моему, для тайни2313 лучше использовать iot2313.h (если это ICC7). Хотя в данном случае наверное все равно.
__________________
Я бы попробовал нацепить внешний кварц, а если бы это помогло, то тщательнее разбирался бы с фузами.
Александр
2005 12 05
Go to the top of the page
 
+Quote Post
starter48
сообщение Dec 5 2005, 13:18
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(KiCom @ Dec 4 2005, 21:02) *
Потом она была просимулирована на симуляторе VML все мигало как надо потом это было прошито на МК, в МК я прошил фьюзы на использоваие внутренего кварца с частотой 4 МГЦ но вместо положеных 16 МГЦ мигания светодиода я получил 30 миганий за 25 секунд, тоесть примерно 0.8 Гц, потом я прошил фьзы МК на использование встроенного кварца с цастотой 8Мгц получил частоту 1.8 гц.

Скважность какая примерно получилась?
Go to the top of the page
 
+Quote Post
KiCom
сообщение Dec 6 2005, 08:49
Сообщение #7





Группа: Новичок
Сообщений: 2
Регистрация: 4-12-05
Пользователь №: 11 786



Всем спасибо разобрался, там стоял какйо-то предделитель на 8 убрал какой-то фьюз и все заработало как надо
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.014 секунд с 7
ELECTRONIX ©2004-2016