Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » помогите с шим

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

1. mrbin - 20 Августа, 2013 - 20:13:28 - перейти к сообщению
помогите с программой,как зделать так чтобы диод мигал с частотой 38 КГц пример програмы ,желательно в code vizion,нужно для ик датчика припятствий
2. Artem - 20 Августа, 2013 - 21:27:22 - перейти к сообщению
А прога на СИ должна быть?
3. mrbin - 20 Августа, 2013 - 22:25:58 - перейти к сообщению
да
4. Vladimir72 - 21 Августа, 2013 - 13:04:05 - перейти к сообщению
CODE:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>

unsigned char counter= 0;

ISR(TIMER1_OVF_vect)
{
counter++;
if(counter == 30)
{
TCCR1A = TCCR1A ^ (1<<5);
counter = 0;
}
}

int main(void)
{

PORTB=0x02;
DDRB=0x04;
DDRD=0xFF;
PORTD=0x01;
TCCR1A=0x23;
TCCR1B=0x19;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0xDE;
OCR1BH=0x00;
OCR1BL=0x3F;
TIMSK=0x04;
sei();
while(1)
{
if(!(PINB & 0x02))
{
PORTD |= 0x01;
}
else
{
PORTD &= ~0x01;
}

}
}



(Добавление)
частота 36 КГц. МК 8МГц
5. mrbin - 21 Августа, 2013 - 13:29:23 - перейти к сообщению
ISR(TIMER1_OVF_vect)
пишет ошибка
6. Vladimir72 - 21 Августа, 2013 - 13:36:42 - перейти к сообщению
странно у меня все нормально, где ругается, в какой программе, в коде МК настроена 8МГц
7. Роботов - 21 Августа, 2013 - 13:38:15 - перейти к сообщению
mrbin пишет:
ISR(TIMER1_OVF_vect)
пишет ошибка

В КодеВижене надо писать так:
CODE:
interrupt [TIM0_OVF] void tim0_isr(void)

(Добавление)
...а если на
Vladimir72 пишет:
sei();
будет ругаться, то надо писать
CODE:
#asm("sei");
8. mrbin - 21 Августа, 2013 - 14:31:44 - перейти к сообщению
спасибо !сейчас попробую
(Добавление)
вот эта еще вылазиит незначительная ошибка /static inline unsigned char cpu_irq_save(void)
(Добавление)
что то не работает программа,в чем может быть причина?
(Добавление)
и частоту на 38 надо
9. mrbin - 24 Августа, 2013 - 19:11:25 - перейти к сообщению
можно коментарии к этой программе?
(Добавление)
да на 8
10. Artem - 27 Августа, 2013 - 13:34:02 - перейти к сообщению
Вот код, сам его использовал для того же дела, что и у вас, только не помню, какое значение должно лежать в регистре:
CODE:
#include <avr/io.h> // подключаем библиотеку АВР
#include <util/delay.h> // подключаем библиотеку задержек

int main (void) {

unsigned int f;

f=0;

int t;

t=0;

DDRB = 0xFF;

DDRC = 0xFF;

DDRD = 0x00;

PORTD = 0xFF;

TCCR1A |= (0<<WGM11)|(1<<WGM10)|(1<<COM1A1)|(0<<COM1A0);

TCCR1B |= (0<<WGM12)|(0<<WGM13)|(1<<CS11)|(0<<CS10)|(0<<CS12);

ICR1 = 0x00;

OCR1A = 0x00;

}

нужно изменять значение в регистре OCR1A
вот ссылка на сайт с формулой для всех подсчётов:
http://radioparty.ru/index.php/p...am-c/231-lesson5
мне очень помогло когда-то Улыбка
11. mrbin - 30 Августа, 2013 - 21:30:12 - перейти к сообщению
у меня почему то не одна из данных программ не идет,в чем может быть дело? может что то не так делаю?
12. Artem - 31 Августа, 2013 - 20:24:31 - перейти к сообщению
Какая у вас среда разработки? Может с микроконтроллером что-то не так?
13. mrbin - 02 Сентября, 2013 - 22:16:38 - перейти к сообщению
как понять,среда разработки?
14. Predator - 02 Сентября, 2013 - 22:30:26 - перейти к сообщению
как называется программа, которую вы запускаете, и в окошке которой пишете текст.
не в блокноте-же вы программируете....
хотя мне приходилось и так...
15. mrbin - 02 Сентября, 2013 - 22:41:41 - перейти к сообщению
code vision