Да ну? Постоянно этим занимаюсь, вот компилировать не получается жаль.,виноват—писать код си на андроиде не очень удобно
CodeVision AVR в вопросах и ответах
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Всем привет! Я начинающий и наверно до меня очень туго доходит....ведь уже пролистал не одну книгу по прошраммированию, но возникают вопросы,чтоб проверить в железе ,а спросить нет у кого...Если позволите Ув. Коты-программисты помучаю вопросами Вас.
1.Как мигать светодиодом с разной частотой(например 1,2,3,4,5,6,7 Гц) в зависимости от нажимаемой кнопки(1из7),с использованием таймера1 в аттини2313 и кварцем 4MHz???
Какой режим таймера выбрать,какой предделитель установить и т.д.
СПАСИБО!!!
1.Как мигать светодиодом с разной частотой(например 1,2,3,4,5,6,7 Гц) в зависимости от нажимаемой кнопки(1из7),с использованием таймера1 в аттини2313 и кварцем 4MHz???
Какой режим таймера выбрать,какой предделитель установить и т.д.
СПАСИБО!!!
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Книги о прошраммировании читать не надо. маньяком можно стать 
по теме: ответье мне на вопросы: что такое мигание? от чего зависит частота мигания?
по теме: ответье мне на вопросы: что такое мигание? от чего зависит частота мигания?
Ставим плюсы: )
Re: CodeVision AVR в вопросах и ответах
....тогда по сути. ..
Помогите написать программу для светодиодной матрицы 5*8(5столбцов,8строк) с динамическим выводом символов(например 0={03xE,0x41,0x41,0x41,0x3E}) из памяти контроллера ATtiny2313,в зависимости от состояния кнопки.
Помогите написать программу для светодиодной матрицы 5*8(5столбцов,8строк) с динамическим выводом символов(например 0={03xE,0x41,0x41,0x41,0x3E}) из памяти контроллера ATtiny2313,в зависимости от состояния кнопки.
Re: CodeVision AVR в вопросах и ответах
Добрый вечер все Котам полуночникам! Очень нужен ваш совет!
Что имеем?
while (1) //цикл в котором считывается время, дата и температура с DS1307 и DS18b20
{
if (1) // счет текущего времени и даты с отображением на LCD
{
}
if (2) // счет температуры с отображением на LCD
{
}
if (3) // а вот здесь загвоздка. В этом условии проверки считываем сигнал флага от timer1 который выдает единичку с частотой 400мс (для работы шагового двигателя). Можно было бы работу ДШ задать отдельной функцией и вызывать ее при заданном времени, но в таком случае в период пока отработаются все циклы отображение времени на LCD притормаживается, а мне хотелось бы чтобы обе операции выполнялись одновременно. Загвоздка заключается в том что я не могу остановить двигатель.
Т.е.:
if ((hour == 20) && (min == 43) && (flag_timer == 1))
{
flag_timer = 0;
if (step<=x) PORTB=step_motor[j]; else PORTB=step_motor1[j];
if (++j>=8) j=0;
if (++step>x*2) step = 1;
запустили движок, а как его остановить? Он должен запускаться ежедневно для совершения определенного числа оборотов в одну сторону и реверс до первоначального положения ротора!
Что имеем?
while (1) //цикл в котором считывается время, дата и температура с DS1307 и DS18b20
{
if (1) // счет текущего времени и даты с отображением на LCD
{
}
if (2) // счет температуры с отображением на LCD
{
}
if (3) // а вот здесь загвоздка. В этом условии проверки считываем сигнал флага от timer1 который выдает единичку с частотой 400мс (для работы шагового двигателя). Можно было бы работу ДШ задать отдельной функцией и вызывать ее при заданном времени, но в таком случае в период пока отработаются все циклы отображение времени на LCD притормаживается, а мне хотелось бы чтобы обе операции выполнялись одновременно. Загвоздка заключается в том что я не могу остановить двигатель.
Т.е.:
if ((hour == 20) && (min == 43) && (flag_timer == 1))
{
flag_timer = 0;
if (step<=x) PORTB=step_motor[j]; else PORTB=step_motor1[j];
if (++j>=8) j=0;
if (++step>x*2) step = 1;
запустили движок, а как его остановить? Он должен запускаться ежедневно для совершения определенного числа оборотов в одну сторону и реверс до первоначального положения ротора!
- U235
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Вт фев 21, 2012 20:42:26
- Откуда: Санкт-Петербург, Россия, Земля
Re: CodeVision AVR в вопросах и ответах
Сделать глобальную переменную с числом шагов. В нужное время её установить. А в прерывании делать шаг и уменьшать эту переменную на единицу до тех пор, пока переменная не равна нулю.
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
//main
step = MAX_COUNT;
flag = 1; //для совершения только одного оборота
//while(1)
if(flag == 1)
{
if(hour == 20)&&(min == 44)
{
while(step >= 0)
{
//1 шаг в прямом направлении
//отрисовка LCD
step--;
}
while(step < MAX_COUNT)
{
//1 шаг в обратном направлении
//отрисовка LCD
step++;
}
flag = 0; //больше не вращать
}
else flag = 1; //можно вращать
}Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
идеальный вариант в назначенное время разрешить прерывание
в самом прерывании вращать мотор на один шаг и возвращаться к остальным процедурам - считывание температуры, времени, проверки положения ротора двигателя, выбор направления вращения, отрисовка экрана
естественно во время какой либо процедуры прерывания временно отключать
в самом прерывании вращать мотор на один шаг и возвращаться к остальным процедурам - считывание температуры, времени, проверки положения ротора двигателя, выбор направления вращения, отрисовка экрана
естественно во время какой либо процедуры прерывания временно отключать
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: CodeVision AVR в вопросах и ответах
Спасибо за советы! Что то полезно все равно в них есть! Но меня все таки больше интересует не один шаг вправо, один влево, а три полных оборота по часовой и три полных до возврата в начальное положение в реверсе! Причем количество оборотов должно быть переменным!
Re: CodeVision AVR в вопросах и ответах
Усё! Разобрался! Код сформировался и все работает стабильно! Добавил условие проверки с обнулением шага!
if ((hour == hour_timer_SM) && (min == min_timer_SM) && (step > 0))
if (flag_timer == 1)
{
x=shag*8;
flag_timer = 0;
if (step<=x) PORTB=step_motor[j]; else PORTB=step_motor1[j];
if (++j>=8) j=0;
if (++step>x*2) step = 0;
if ((hour == hour_timer_SM) && (min == min_timer_SM) && (step > 0))
if (flag_timer == 1)
{
x=shag*8;
flag_timer = 0;
if (step<=x) PORTB=step_motor[j]; else PORTB=step_motor1[j];
if (++j>=8) j=0;
if (++step>x*2) step = 0;
Re: CodeVision AVR в вопросах и ответах
Добрый день! [quote][/quote]
Вопрос в следущем: Есть датчик APDS-9300, работающий по и2с. Использую родную библу и2с если датчик отключить - зависаем , по идее в цикле while когда ожидается аск. Но найти его не смог(в i2c.h - кода строк 6), может кто знает где посмотреть?
Вопрос в следущем: Есть датчик APDS-9300, работающий по и2с. Использую родную библу и2с если датчик отключить - зависаем , по идее в цикле while когда ожидается аск. Но найти его не смог(в i2c.h - кода строк 6), может кто знает где посмотреть?
Re: CodeVision AVR в вопросах и ответах
pyzhman писал(а):Или проще
Можно и так. Привет земляк,я тоже изТольятти
Re: CodeVision AVR в вопросах и ответах
Подскажите ,пожалуйста,что означают эти цыфры
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Спойлер
- Вложения
-
- TCCR1B.jpg
- (142.94 КБ) 1018 скачиваний
Docendo discimus
Re: CodeVision AVR в вопросах и ответах
Спасибо! Я так понимаю что это предделитель частоты ,и для atmega8 тоже такое в даташите смотреть....????
Re: CodeVision AVR в вопросах и ответах
Режим синтеза ШИМ, корректного по фазе и частоте с вершиной счёта в ICR1 (PWM, Phase and Frequency Correct, TOP=ICR1). Предделитель частоты - f/1024.hfelyx писал(а):Подскажите ,пожалуйста,что означают эти цифры
TCCR1A=0x00;
TCCR1B=0x15; //что это значит???
Кроме того оба выхода каналов ШИМ отключены (Normal port operation, OC1A/OC1B disconnected.)
Re: CodeVision AVR в вопросах и ответах
чтото я жоско тормажу ,как 1 вкладку меню создать я понял ,а вот дальше охинея полная,
мне нужно или переход на функцию или возврат в общие условия где по переменным перейду на нужную вкладку ,подскажи плизз
char txt0[]="POWER";
char txt1[]="MENU";
char txt6[]="A B C D";
char txt3[]="HACTP*";
char txt4[]="RS232";
char txt5[]="AKYM";
char txt2[]="CBET"; //меню
char txt7[]="RGB";
char txt8[]="<HAZAD";
char txt9[]="lampa1";
char txt10[]="lampa2";
char txt11[]="lampa3";
char txt12[]="lampa4"; //свет
char txt13[]="lampa5";
char txt14[]="lampa6";
char txt15[]="CLOCK";
char txt16[]="TIMER";
char txt17[]="TEMPER";
char txt18[]="TELEPHONE"; //настройки
char txt19[]="INPUT ";
char txt20[]="OUTPUT";
unsigned int z,x,y ;
unsigned int n=1; //переменная меню
unsigned int cvet=0,menu=1;
#define ADC_DDR DDRF
#define ADC_PORT PORTF
void main(void)
{
PORTA=0x00;DDRA=0x00;PORTB=0x00;DDRB=0xFF;PORTC=0xFF;DDRC=0x00;PORTD=0xFF;DDRD=0x00;TCCR0=0x00;
TCNT0=0x00;OCR0=0x00;TCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;
OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;ASSR=0x00;TCCR2=0x00;TCNT2=0x00;OCR2=0x00;
;MCUCR=0x0A;MCUCSR=0x00;TIMSK=0x00;ACSR=0x80;SFIOR=0x00;SPCR=0x50;SPSR=0x01;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
#asm("sei")
ACSR=0x80;
SFIOR=0x00;
lcd_init_c(); // инициализация дисплея
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;
fill_screen(bgcolor); // заливка черным
put_string(00,00,txt0,0, textcolor); //power
while (1)
{
ADC_DDR=0b00001001; // питалово ОК
ADC_PORT=0b00001000;
delay_ms(2);
z=read_adc(2) ;
if(z>60) // если есть нажатие ( проверяем нажатие )
{{ADC_DDR=0b00001010; //питалово
ADC_PORT=0b00001000; // питалово у
delay_ms(2);
y=read_adc(0); //порты
}
{ADC_DDR=0b00000101; // питалово
ADC_PORT=0b00000100; // питалово х
delay_ms(2);
x=read_adc(1);} //порты
// put_string(40,60,txt6,0, textcolor); // АБС
printf("y%d, x%d ",y,x); // печатаем в УАРТ значение
// sprintf(n,"%u",0);
// put_string(68,60,n,0,GREEN); // вывод полученной строки
if (n==1) { if ((x > 496) && (x < 523) && (y > 163) && (y < 375)) { n=2 ;
// заливка черным
fill_screen(bgcolor);
put_string(70,120,txt1,0, textcolor); //МЕНЮ
put_string(40,105,txt2,0, textcolor); // CBET
put_string(100,105,txt7,0, textcolor); // РГБ
put_string(40,30,txt3,0, textcolor); // НАСТР
put_string(100,30,txt4,0, textcolor); // РС232
put_string(40,80,txt5,0, textcolor); // АКБ
printf("A",1); // вы в главном меню
if ((x > 600) && (x < 630) && (y > 304) && (y < 490)) { n=3 ;}
} }
if (n==2)
{ if ((x > 822) && (x < 856) && (y > 316) && (y < 457))
{
n=1; //menu
fill_screen(bgcolor); // заливка черным
printf("B"); // вы находитесь в меню освещения
put_string(10,30,txt14,0, textcolor); //1
put_string(10,45,txt13,0, textcolor); // 2
put_string(10,60,txt12,0, textcolor); // 3
put_string(10,75,txt11,0, textcolor); // 4
put_string(10,90,txt10,0, textcolor); // 5
put_string(10,105,txt9,0, textcolor); // 6
put_string(00,00,txt8,0, textcolor); //НАЗАД
} }
if (n==3)
{ put_string(00,00,txt8,0, textcolor); } //НАЗАД
//{ if ((x > 780) && (x < 679) && (y > 304) && (y < 489))
};
}
}
http://www.youtube.com/watch?v=DtH-K8PBCQ8
мне нужно или переход на функцию или возврат в общие условия где по переменным перейду на нужную вкладку ,подскажи плизз
char txt0[]="POWER";
char txt1[]="MENU";
char txt6[]="A B C D";
char txt3[]="HACTP*";
char txt4[]="RS232";
char txt5[]="AKYM";
char txt2[]="CBET"; //меню
char txt7[]="RGB";
char txt8[]="<HAZAD";
char txt9[]="lampa1";
char txt10[]="lampa2";
char txt11[]="lampa3";
char txt12[]="lampa4"; //свет
char txt13[]="lampa5";
char txt14[]="lampa6";
char txt15[]="CLOCK";
char txt16[]="TIMER";
char txt17[]="TEMPER";
char txt18[]="TELEPHONE"; //настройки
char txt19[]="INPUT ";
char txt20[]="OUTPUT";
unsigned int z,x,y ;
unsigned int n=1; //переменная меню
unsigned int cvet=0,menu=1;
#define ADC_DDR DDRF
#define ADC_PORT PORTF
void main(void)
{
PORTA=0x00;DDRA=0x00;PORTB=0x00;DDRB=0xFF;PORTC=0xFF;DDRC=0x00;PORTD=0xFF;DDRD=0x00;TCCR0=0x00;
TCNT0=0x00;OCR0=0x00;TCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;
OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;ASSR=0x00;TCCR2=0x00;TCNT2=0x00;OCR2=0x00;
;MCUCR=0x0A;MCUCSR=0x00;TIMSK=0x00;ACSR=0x80;SFIOR=0x00;SPCR=0x50;SPSR=0x01;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
#asm("sei")
ACSR=0x80;
SFIOR=0x00;
lcd_init_c(); // инициализация дисплея
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;
fill_screen(bgcolor); // заливка черным
put_string(00,00,txt0,0, textcolor); //power
while (1)
{
ADC_DDR=0b00001001; // питалово ОК
ADC_PORT=0b00001000;
delay_ms(2);
z=read_adc(2) ;
if(z>60) // если есть нажатие ( проверяем нажатие )
{{ADC_DDR=0b00001010; //питалово
ADC_PORT=0b00001000; // питалово у
delay_ms(2);
y=read_adc(0); //порты
}
{ADC_DDR=0b00000101; // питалово
ADC_PORT=0b00000100; // питалово х
delay_ms(2);
x=read_adc(1);} //порты
// put_string(40,60,txt6,0, textcolor); // АБС
printf("y%d, x%d ",y,x); // печатаем в УАРТ значение
// sprintf(n,"%u",0);
// put_string(68,60,n,0,GREEN); // вывод полученной строки
if (n==1) { if ((x > 496) && (x < 523) && (y > 163) && (y < 375)) { n=2 ;
// заливка черным
fill_screen(bgcolor);
put_string(70,120,txt1,0, textcolor); //МЕНЮ
put_string(40,105,txt2,0, textcolor); // CBET
put_string(100,105,txt7,0, textcolor); // РГБ
put_string(40,30,txt3,0, textcolor); // НАСТР
put_string(100,30,txt4,0, textcolor); // РС232
put_string(40,80,txt5,0, textcolor); // АКБ
printf("A",1); // вы в главном меню
if ((x > 600) && (x < 630) && (y > 304) && (y < 490)) { n=3 ;}
} }
if (n==2)
{ if ((x > 822) && (x < 856) && (y > 316) && (y < 457))
{
n=1; //menu
fill_screen(bgcolor); // заливка черным
printf("B"); // вы находитесь в меню освещения
put_string(10,30,txt14,0, textcolor); //1
put_string(10,45,txt13,0, textcolor); // 2
put_string(10,60,txt12,0, textcolor); // 3
put_string(10,75,txt11,0, textcolor); // 4
put_string(10,90,txt10,0, textcolor); // 5
put_string(10,105,txt9,0, textcolor); // 6
put_string(00,00,txt8,0, textcolor); //НАЗАД
} }
if (n==3)
{ put_string(00,00,txt8,0, textcolor); } //НАЗАД
//{ if ((x > 780) && (x < 679) && (y > 304) && (y < 489))
};
}
}
http://www.youtube.com/watch?v=DtH-K8PBCQ8
Re: CodeVision AVR в вопросах и ответах
Неужели не кто не занимался сэнсорным меню?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Что-то тема начинает плавно перетекать из "вопросы по CodeVision AVR" в "Вопросы по Си"...
Народ, ну есть же для этого специальная тема, зачем сюда постить ?
Народ, ну есть же для этого специальная тема, зачем сюда постить ?