CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

,виноват—писать код си на андроиде не очень удобно
Да ну? Постоянно этим занимаюсь, вот компилировать не получается жаль.
hfelyx
Встал на лапы
Сообщения: 102
Зарегистрирован: Вт дек 28, 2010 18:25:31

Re: CodeVision AVR в вопросах и ответах

Сообщение hfelyx »

Всем привет! Я начинающий и наверно до меня очень туго доходит....ведь уже пролистал не одну книгу по прошраммированию, но возникают вопросы,чтоб проверить в железе ,а спросить нет у кого...Если позволите Ув. Коты-программисты помучаю вопросами Вас.
1.Как мигать светодиодом с разной частотой(например 1,2,3,4,5,6,7 Гц) в зависимости от нажимаемой кнопки(1из7),с использованием таймера1 в аттини2313 и кварцем 4MHz???

Какой режим таймера выбрать,какой предделитель установить и т.д.

СПАСИБО!!!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение ibiza11 »

Книги о прошраммировании читать не надо. маньяком можно стать :))

по теме: ответье мне на вопросы: что такое мигание? от чего зависит частота мигания?
Ставим плюсы: )
hfelyx
Встал на лапы
Сообщения: 102
Зарегистрирован: Вт дек 28, 2010 18:25:31

Re: CodeVision AVR в вопросах и ответах

Сообщение hfelyx »

....тогда по сути. ..
Помогите написать программу для светодиодной матрицы 5*8(5столбцов,8строк) с динамическим выводом символов(например 0={03xE,0x41,0x41,0x41,0x3E}) из памяти контроллера ATtiny2313,в зависимости от состояния кнопки.
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

Re: CodeVision AVR в вопросах и ответах

Сообщение Marchello »

Добрый вечер все Котам полуночникам! Очень нужен ваш совет!
Что имеем?

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 в вопросах и ответах

Сообщение U235 »

Сделать глобальную переменную с числом шагов. В нужное время её установить. А в прерывании делать шаг и уменьшать эту переменную на единицу до тех пор, пока переменная не равна нулю.
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Re: CodeVision AVR в вопросах и ответах

Сообщение unalex »

Код: Выделить всё

//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 в вопросах и ответах

Сообщение unalex »

идеальный вариант в назначенное время разрешить прерывание

в самом прерывании вращать мотор на один шаг и возвращаться к остальным процедурам - считывание температуры, времени, проверки положения ротора двигателя, выбор направления вращения, отрисовка экрана

естественно во время какой либо процедуры прерывания временно отключать
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

Re: CodeVision AVR в вопросах и ответах

Сообщение Marchello »

Спасибо за советы! Что то полезно все равно в них есть! Но меня все таки больше интересует не один шаг вправо, один влево, а три полных оборота по часовой и три полных до возврата в начальное положение в реверсе! Причем количество оборотов должно быть переменным!
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

Re: CodeVision AVR в вопросах и ответах

Сообщение Marchello »

Усё! Разобрался! Код сформировался и все работает стабильно! Добавил условие проверки с обнулением шага!

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;
lenivec87
Родился
Сообщения: 4
Зарегистрирован: Пн мар 22, 2010 15:40:53

Re: CodeVision AVR в вопросах и ответах

Сообщение lenivec87 »

Добрый день! [quote][/quote]
Вопрос в следущем: Есть датчик APDS-9300, работающий по и2с. Использую родную библу и2с если датчик отключить - зависаем , по идее в цикле while когда ожидается аск. Но найти его не смог(в i2c.h - кода строк 6), может кто знает где посмотреть?
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: CodeVision AVR в вопросах и ответах

Сообщение eduardo »

pyzhman писал(а):Или проще

Можно и так. Привет земляк,я тоже изТольятти
hfelyx
Встал на лапы
Сообщения: 102
Зарегистрирован: Вт дек 28, 2010 18:25:31

Re: CodeVision AVR в вопросах и ответах

Сообщение hfelyx »

Подскажите ,пожалуйста,что означают эти цыфры
timer1.txt
таймер1
(528 байт) 151 скачивание
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

СпойлерИзображение
Вложения
TCCR1B.jpg
(142.94 КБ) 1018 скачиваний
Docendo discimus
hfelyx
Встал на лапы
Сообщения: 102
Зарегистрирован: Вт дек 28, 2010 18:25:31

Re: CodeVision AVR в вопросах и ответах

Сообщение hfelyx »

Спасибо! Я так понимаю что это предделитель частоты ,и для atmega8 тоже такое в даташите смотреть....????
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

Да. И то, и другое.
Docendo discimus
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

Re: CodeVision AVR в вопросах и ответах

Сообщение ELcat »

hfelyx писал(а):Подскажите ,пожалуйста,что означают эти цифры
TCCR1A=0x00;
TCCR1B=0x15; //что это значит???
Режим синтеза ШИМ, корректного по фазе и частоте с вершиной счёта в ICR1 (PWM, Phase and Frequency Correct, TOP=ICR1). Предделитель частоты - f/1024.
Кроме того оба выхода каналов ШИМ отключены (Normal port operation, OC1A/OC1B disconnected.)
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: CodeVision AVR в вопросах и ответах

Сообщение CS16AMX »

чтото я жоско тормажу ,как 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
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: CodeVision AVR в вопросах и ответах

Сообщение CS16AMX »

Неужели не кто не занимался сэнсорным меню?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Что-то тема начинает плавно перетекать из "вопросы по CodeVision AVR" в "Вопросы по Си"...
Народ, ну есть же для этого специальная тема, зачем сюда постить ?
Ответить

Вернуться в «AVR»