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

Обсуждаем контроллеры компании Atmel.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Подскажите как правильнее сделать. В прерывании по таймеру надо выдержать пару 1-2мк
делаю это нопами. Но так как оптимизация включена по скорости(и уровень максимальный) боюсь что бы СV их не с оптимизировал.
как #pragma optsize- загнать в define можно ?
функцию делать неохота (дополнительные задержки получаются)

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

#define delay_15us_nop   #pragma optsize-\
                         #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");\
                         #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");\
                         #asm("nop");#asm("nop");#asm("nop");\
                         #pragma optsize+

Пока сделал без #pragma optsize работает. Но всё же хочу запретить оптимизацию их. Что бы неожиданно они не отвалились.
X200881
Родился
Сообщения: 17
Зарегистрирован: Вт янв 25, 2011 12:52:34

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

Сообщение X200881 »

Здравствуйте. Подскажите пожалуйста что означает эта ошибка: "Error: D:nespadusb\main.c(115): function argument #1 of type 'struct <unnamed> *' is incompatible with required parameter of type 'unsigned char *' ". Вот на эту строку: "usbSetInterrupt(&reportBuffer, sizeof(reportBuffer));". Спасибо.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Не тот тип передаёте в функцию в первом аргументе.
MS24
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

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

Сообщение MS24 »

X200881 писал(а):Здравствуйте. Подскажите пожалуйста что означает эта ошибка: "Error: D:nespadusb\main.c(115): function argument #1 of type 'struct <unnamed> *' is incompatible with required parameter of type 'unsigned char *' ". Вот на эту строку: "usbSetInterrupt(&reportBuffer, sizeof(reportBuffer));". Спасибо.

Функция принимает ссылку на reportBuffer. Т.е нужно передать функции указатель на этот буфер.
igumich
Встал на лапы
Сообщения: 100
Зарегистрирован: Сб ноя 06, 2010 19:17:02
Откуда: Россия, Омск

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

Сообщение igumich »

делаю индикацию отрытых дверей, уровня воды в омывателе, уровень тосолаи конечно часы. со спецсимволами вроде разобрался, но вот с часами не очень. настройка ЧАСЫ и МИНУТЫ работает, но вот секунды не отсчитывает, т.е. что-то не так с прерываниями.
вот код программы
Спойлер

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

#include <mega8.h>  // Подключаем библиотеку микроконтроллера  
 #asm
 .equ __lcd_port=0x12 ;PORTD
 #endasm
 #include <lcd.h>   // Подключаем библиотеку дисплея
 #include <delay.h>  // Подключаем библиотеку реализации задержек   
 
 
 unsigned int sek;        // переменная сек.
 unsigned int min;        // пересенная мин.
 unsigned int hour;       // переменная часов
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)  // таймер выставлен на частоту 1 Гц
{
// Place your code here
       TCNT1H=0;
       TCNT1L=0;
       sek++;            // инкрементируем секунду
       
}

 // Объявляем переменную pause, которая будет осуществлять задержку
 char i; // Переменная для счетчика для анимации
 typedef unsigned char byte; // Новый тип переменной для наших символов

 
 flash byte char0[8]={0, 0, 0, 0, 0, 0, 0, 0};

 flash byte char1[8]={0, 28, 18, 17, 31, 31, 31, 0}; // правая

 flash byte char2[8]={0, 7, 9, 17, 31, 31, 31, 31}; //левая

 flash byte char3[8]={0, 7, 9, 17, 17, 31, 31, 31}; //передние

 flash byte char4[8]={4, 20, 20, 4, 4, 4, 4, 4}; //передняя правая

 flash byte char5[8]={4, 5, 5, 4, 4, 4, 4, 4};//передняя левая
 
 flash byte char6[8]={0, 0, 0, 0, 0, 0, 0, 0};
 // Функция записи символа в контроллер дисплея
 void define_char(byte flash *pc,byte char_code)
 {
 byte i,a;
 a=(char_code<<3)|0x40;
 for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
 }
 // Функция инициализации микроконтроллера
 void avr_init(void)
 {
 
 PORTB=0x0F;
 DDRB=0x00;
 PORTC=0x03;
 DDRC=0x00;
 PORTD=0x00;
 DDRD=0x00;


 }
 // Основная программа
 void main(void)
 {   
 
 // Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x1E;
OCR1AL=0x85;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
 
 avr_init();
 lcd_init(16); // Инициализация экрана
 // Запись символов char0 - char4 по адресам 0х00 - 0х04 соответственно
 define_char(char0,0);
 define_char(char1,1);
 define_char(char2,2);
 define_char(char3,3);
 define_char(char4,4);
 define_char(char5,5);
 define_char(char6,6);
 lcd_clear(); // Очищаем экран
 while (1)
 {  // код вывода анимации из новых символов на дисплей

 i=5;
   
       
   while(i)
  { 
        //работа с часами
    if (PINC.0==0)         // если нажата первая кнопка
        {
          delay_ms(250);      // задержка 1/4 сек. (для удобства) выбора
          min++;              // к значению минуты добавляем еденицу
        }
        if (PINC.1==0)        // если нажата вторая кнопка
        {
          delay_ms(250);      // задержка 1/4 сек. (для удобства) выбора
          hour++;             // к значению часов добавляем еденицу
        }
        ///// Условия часов.
       if(sek==60)          // если сек = 60
       {
       min++;              // добавляем 1 к переменной "минута"
       sek=0;              // зануляем переменную "секунда"
       }
       if(min==60)         // если мин = 60
       {
       hour++;             // добавляем 1 к переменной "час"
       min=0;              // зануляем переменную "минута"
       }
       if (hour==24)        // так как у нас часы имеют 24 часовый формат
       {                    // при достыжении 24 часов, онулируем все переменные.
       hour=0;
       min=0;
       sek=0;
       }
         // выводим переменные
        lcd_gotoxy(0,0);       
        lcd_putchar(hour/10+0x30);
        lcd_putchar(hour%10+0x30);
        lcd_putchar(':');
        lcd_putchar(min/10+0x30);
        lcd_putchar(min%10+0x30);
        lcd_putchar(':');
        lcd_putchar(sek/10+0x30);
        lcd_putchar(sek%10+0x30);
       
       
   if (PINB.0==0)// передняя левая
   {
      lcd_gotoxy(14,0);
      lcd_putchar(0x02);
    }
    else
    {
     lcd_gotoxy(14,0);
     lcd_putchar(0x00);
    }
       if (PINB.1==0) //передняя правая
      {
      lcd_gotoxy(15,0);
      lcd_putchar(0x01);
      }
      else
    {
     lcd_gotoxy(15,0);
    lcd_putchar(0x00);
    }
         if (PINB.2==0)//задняя левая
        {
         lcd_gotoxy(14,1);
         lcd_putchar(0x02);
        }
        else
    {
     lcd_gotoxy(14,1);
     lcd_putchar(0x00);
    }       
          if (PINB.3==0)//задняя правая
        {
         lcd_gotoxy(15,1);
         lcd_putchar(0x01);
        }
        else
    {
     lcd_gotoxy(15,1);
     lcd_putchar(0x00);
    }   
   
   
 };
 };
 }
Последний раз редактировалось Аlex Вс апр 20, 2014 21:57:21, всего редактировалось 2 раза.
Причина: теги
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

igumich, а где у вас разрешение прерывания ?

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

#asm("sei")
igumich
Встал на лапы
Сообщения: 100
Зарегистрирован: Сб ноя 06, 2010 19:17:02
Откуда: Россия, Омск

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

Сообщение igumich »

pokk писал(а):igumich, а где у вас разрешение прерывания ?

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

#asm("sei")

Благодарю,упустил момент, ступил немножко
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Здравствуйте!
Подскажите пожалуйста, почему так пляшут показания при подсчёте импульсов и можно ли это как-то поправить?
Вложения
Проект протеус.rar
(48.2 КБ) 171 скачивание
sanyo.95
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Вс мар 30, 2014 21:41:24
Откуда: Украина

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

Сообщение sanyo.95 »

Здравствуйте. Не могу реализовать алгоритм включения нагрузки по нажатию кнопки дважды.
То есть выполнить такой-то код, если кнопка была нажата 2 раза.

Вот моя безуспешная попытка:

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

#include <mega8.h>
#include <delay.h>

void main(void)
{
PORTB=0x00;         // PORTB - выход
DDRB=0x01;                 
PORTC=0x01;         // PORTC - вход
DDRC=0x00;

while (1)

{     
unsigned char a=0; // переменной а присвоить 0
    if(PINC.0==0) // если кнопка нажата
    {
    a++;            // инкриминируем а
        if(a==2)    // если а равно 2 (кнопка нажата 2 раза)
        {
        PORTB.0=1;   // выводим 1
        a=0;         // обнуляем а
        }
        }
}
}     

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

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

Сообщение pyzhman »

Вам нужно отследить именно нажатие. А вы этого не делаете. Переменная а, вообще говоря, при отпускании кнопки принимает случайное значение.
Docendo discimus
sanyo.95
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Вс мар 30, 2014 21:41:24
Откуда: Украина

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

Сообщение sanyo.95 »

pyzhman писал(а):Вам нужно отследить именно нажатие.

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

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

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

Аж 2 темы есть по кнопкам :
viewtopic.php?f=61&t=79801
viewtopic.php?f=61&t=39341
Почитайте, там найдёте ответы на свои вопросы. Даже примеры есть для CV. Там же, если что и пишите...
Ваши вопросы никакого отношения не имеют к CVAVR.
sanyo.95
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Вс мар 30, 2014 21:41:24
Откуда: Украина

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

Сообщение sanyo.95 »

Большое спасибо, что направили.
Приношу извинения что не туда написал.
Fleshmax
Родился
Сообщения: 16
Зарегистрирован: Сб окт 11, 2008 14:45:44

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

Сообщение Fleshmax »

Здравствуйте Уважаемые Коты пытаюсь подключить си файл к codevision подключил его в меню project и прописал в самой программе а при компиляции получаю вот такую ошибку
Вложения
ошибка.png
(126.54 КБ) 521 скачивание
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Fleshmax писал(а):Здравствуйте Уважаемые Коты пытаюсь подключить си файл к codevision подключил его в меню project и прописал в самой программе а при компиляции получаю вот такую ошибку
никогда не "подключайте" Си-шный исходник директивой #include! этой директивой подключаются соответствующие заголовочные файлы.

исправьте и сделайте ReBuild All
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

там еще может быть проблема с русскими буквами в путях к файлу.
Fleshmax
Родился
Сообщения: 16
Зарегистрирован: Сб окт 11, 2008 14:45:44

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

Сообщение Fleshmax »

Все исправил БОЛЬШОЕ СПАСИБО :beer:
master_74
Родился
Сообщения: 19
Зарегистрирован: Вт апр 06, 2010 09:50:34

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

Сообщение master_74 »

Привет коты.
Кто видал программный USB под CVAVR.
Заделитесь ПЛЗ.
hfelyx
Встал на лапы
Сообщения: 102
Зарегистрирован: Вт дек 28, 2010 18:25:31

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

Сообщение hfelyx »

Всем привет! Помогите разобраться с ШИМом Аттини13 в CVAVR. На ногу В.0 (OCR0A) повесил через полевик( 10к между G и S, 100Om от ноги мк на G) светодиод , а он не хочет полностью тухнуть при значении OCR0A=0; !!! Что можно сделать чтоб убрать засветку??? Спасибо!
P.S. Если написал не в той ветке извините и направьте!
Vrungel
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт сен 07, 2007 22:13:42
Откуда: Мариуполь

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

Сообщение Vrungel »

Добрый вечер.
В версии 2.05.3 есть штатная библиотека для работы с графическим экраном ks0108 (128*64).
Есть даже пять шрифтов. Но они без русских букв - вот в чём беда :cry:
Может попадались кому-то совместимые с CV русифицированные шрифты?

p.s. Пытался генерировать сам с помощью LCD Vision - их экран почему-то не отображает.
Ответить

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