Страница 306 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн апр 14, 2014 08:59:06
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 работает. Но всё же хочу запретить оптимизацию их. Что бы неожиданно они не отвалились.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб апр 19, 2014 22:50:17
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));". Спасибо.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб апр 19, 2014 23:51:12
Аlex
Не тот тип передаёте в функцию в первом аргументе.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс апр 20, 2014 19:54:31
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. Т.е нужно передать функции указатель на этот буфер.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс апр 20, 2014 21:27:57
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);
}
};
};
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн апр 21, 2014 04:22:14
pokk
igumich, а где у вас разрешение прерывания ?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн апр 21, 2014 08:45:56
igumich
pokk писал(а):igumich, а где у вас разрешение прерывания ?
Благодарю,упустил момент, ступил немножко
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн апр 21, 2014 16:06:40
isx
Здравствуйте!
Подскажите пожалуйста, почему так пляшут показания при подсчёте импульсов и можно ли это как-то поправить?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср апр 23, 2014 20:58:18
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; // обнуляем а
}
}
}
}
Буду благодарен за любые советы.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср апр 23, 2014 21:07:22
pyzhman
Вам нужно отследить именно нажатие. А вы этого не делаете. Переменная а, вообще говоря, при отпускании кнопки принимает случайное значение.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср апр 23, 2014 21:15:59
sanyo.95
pyzhman писал(а):Вам нужно отследить именно нажатие.
Подскажите как это сделать, стоит ли для данной цели использовать внешние прерывания, или это тоже не то?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср апр 23, 2014 21:55:04
Аlex
Аж 2 темы есть по кнопкам :
http://radiokot.ru/forum/viewtopic.php?f=61&t=79801
http://radiokot.ru/forum/viewtopic.php?f=61&t=39341
Почитайте, там найдёте ответы на свои вопросы. Даже примеры есть для CV. Там же, если что и пишите...
Ваши вопросы никакого отношения не имеют к CVAVR.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср апр 23, 2014 22:46:21
sanyo.95
Большое спасибо, что направили.
Приношу извинения что не туда написал.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 25, 2014 15:23:03
Fleshmax
Здравствуйте Уважаемые Коты пытаюсь подключить си файл к codevision подключил его в меню project и прописал в самой программе а при компиляции получаю вот такую ошибку
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 25, 2014 15:25:56
ARV
Fleshmax писал(а):Здравствуйте Уважаемые Коты пытаюсь подключить си файл к codevision подключил его в меню project и прописал в самой программе а при компиляции получаю вот такую ошибку
никогда не "подключайте" Си-шный исходник директивой #include! этой директивой подключаются соответствующие заголовочные файлы.
исправьте и сделайте ReBuild All
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 25, 2014 16:58:55
ИС-пытатель
там еще может быть проблема с русскими буквами в путях к файлу.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 25, 2014 17:25:01
Fleshmax
Все исправил БОЛЬШОЕ СПАСИБО

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн май 05, 2014 21:00:05
master_74
Привет коты.
Кто видал программный USB под CVAVR.
Заделитесь ПЛЗ.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт май 20, 2014 17:12:28
hfelyx
Всем привет! Помогите разобраться с ШИМом Аттини13 в CVAVR. На ногу В.0 (OCR0A) повесил через полевик( 10к между G и S, 100Om от ноги мк на G) светодиод , а он не хочет полностью тухнуть при значении OCR0A=0; !!! Что можно сделать чтоб убрать засветку??? Спасибо!
P.S. Если написал не в той ветке извините и направьте!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб май 24, 2014 20:02:04
Vrungel
Добрый вечер.
В версии 2.05.3 есть штатная библиотека для работы с графическим экраном ks0108 (128*64).
Есть даже пять шрифтов. Но они без русских букв - вот в чём беда
Может попадались кому-то совместимые с CV русифицированные шрифты?
p.s. Пытался генерировать сам с помощью LCD Vision - их экран почему-то не отображает.