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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
java
Держит паяльник хвостом
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

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

Сообщение java »

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

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

Сообщение vitalik_1984 »

учили мы такой светофор на лекциях (образование дорожник неоконченное)
там за счет едущих автомобилей отодвигается включение красного сигнала,но не более определенного предела.
В поисках истины человек развивается.
Реклама
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

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

Сообщение demiurg301 »

Здорова Коты
ТАкой вопрос по CVAVR 2.05: Как сделать нормальную адресацию для структур?

Т.е. есть Nтое кол-во объектов с Mтым кол-вом свойств.
Делаю так
typedef struct
{
unsigned char address;
unsigned char activ;
unsigned char size;
unsigned char devider;
}data;

struct
{
data t1;
data t2;
}pm;

Вроде компилится, всё нормально. НО! Почему то pm. даёт выпадающий список, а pm.t1. - не даёт.

Т.е. вот что видно по распределению памяти
cv.JPG
(7.33 КБ) 468 скачиваний

Как сделать, чтобы и t1 и t2 вели себя как их "родитель"? :) Или это так, фантастика?
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

код вижн вообще мало что сам делает.если вручную прописать и не работает,значит нужно через наследование делать и вообще по другому объявлять.
это уже си ++.
тут лучше спросить у совести.(есть такой спец в коте)
В поисках истины человек развивается.
Реклама
Эиком - электронные компоненты и радиодетали
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Сообщение Совесть »

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

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

Сообщение vitalik_1984 »

я так и думал,что это кв.только проверить не на чем было.
этот кв. удивительно как в нем для структуры автозаполнение работает.
В поисках истины человек развивается.
Реклама
Demon
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

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

Сообщение Demon »

Возникла необходимость в приеме данных от 3-х устройств по UART. Недостающие решил реализовать через внешние прерывание и таймер. Но прерывание генерируется 2 раза даже когда нет перепада из 1 в 0.
Инициализация визарда
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// INT2: Off
GICR|=0xC0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xC0;

Старт приема
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
PORTB.0=1;
delay_us(1);
PORTB.0=0;
GICR=GICR&0x0b10111111; //запретили 0 прерывание
TCNT0=T1;
TCCR0=0x02; //ждем прохода стартового бита
Data0=0;
GIFR=GIFR|0x40; //сбрасываем флаг прерывания записью 1
}

Прием данных
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=T2;
++State0;
if(State0<9){ if(P_INT0) Data0=Data0+0x80; //прием пакета
Data0=Data0>>1; }
if(State0==9){ if(P_INT0) OutM0=Data0; //принято 8 бит и есть стоп-бит
State0=0;
TCCR0=0; //останавливаем таймер 0
GICR=GICR|0x40; //разрешаем прерывание 0
}
}

В чем ошибся или это глюк протеуса?
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

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

Сообщение demiurg301 »

Совесть писал(а):Синтаксис верный, с++ тут вообще не при чем. Судя по руководству в CV автозаполнение можно либо включить, либо выключить, ничего более. Так что видимо не судьба.


Да, таки не судьба :) Шшшштож придётся ручками, ручками :))) Странно почему не сделали для вложеных структур...
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

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

Сообщение demiurg301 »

vitalik_1984 писал(а):я так и думал,что это кв.только проверить не на чем было.
этот кв. удивительно как в нем для структуры автозаполнение работает.

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

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

Сообщение vitalik_1984 »

demiurg301 писал(а):Да, таки не судьба :) Шшшштож придётся ручками, ручками :))) Странно почему не сделали для вложеных структур...

переходи на тормознутую, зато с автозаполнением студию шесть. :))
вечером проверю как она это дело отрабатывает.
demiurg301 писал(а):только для глобальных переменных.

не знал

UPD

Проверил, STUDIO6 нормально реагирует.

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

pm.t1.address=50

список на все выпадает...
Так что ленивых просим в студию :)))
В поисках истины человек развивается.
Аватара пользователя
within
Открыл глаза
Сообщения: 52
Зарегистрирован: Ср сен 02, 2009 21:39:06
Откуда: Николаев

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

Сообщение within »

А подскажите ка, как настроить timer1\counter1 на определённое время. Экспериментировал на часах. Пробовал так: частоту поставил 7813, Compare A Match, в значение А записал 1е85(7813). Работает отлично, вызывает прерывание раз в секунду(в Протэусе). Решил попробовать прерывание 4 раза в секунду. Поделил 7813 на 4, перевёл в хекс. И вот тут вот произошло "чудо") Часы пошли так, что разглядеть можно было только "часы". Минуты бежали, что поймать невозможно, а в секундах вообще одни восьмёрки) Или я чё-то не понял, или Протэус прикалывается, или создатели CVAVR'a делили не по-русски) Подскажите :)
Очень жаль, когда люди упираются лбом в что-то, хотя это и не логично совсем. А свою логику не объясняют.
Аватара пользователя
hd44780
Встал на лапы
Сообщения: 132
Зарегистрирован: Вт июл 14, 2009 09:27:37
Откуда: Донецк, Украина

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

Сообщение hd44780 »

Если надо 0.5 сек или 1 сек для часов, то лучше взять контроллер со спец таймером и часовым кварцем. Оно для этого и предназначено :) .
Обычные таймеры, работающие от основного генератора для этого плохо подходят.

PS.
Замечание в стиле "Омар фигня, лобстер круче" :)) .
У протеуса есть ряд "противных" особенностей. Лично у меня там даже тупая светодиодная мигалка не работала - мигала не раз в секунду, а гораздо реже ... Хотя в железе всё как часы.
Не исключено, что и у Вас родственный глюк.
Мой совет - выкиньте шпротеус на помойку и делайте всегда в железе.

Насчёт CvAvr - сколько лет пишу, тьфу-тьфу всё там чисто.
Это в WinAVR-е с delay_ms вечные приключения, а здесь чисто.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

within писал(а):А подскажите ка, как настроить timer1\counter1 на определённое время.

проще простого....., вот сдесь можна быстро расчитать....., сам пользуюсь и вам советую :tea:
http://eugenemcu.ru/index/0-32
Tell Me The Truth
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

hd44780 писал(а):У протеуса есть ряд "противных" особенностей. Лично у меня там даже тупая светодиодная мигалка не работала - мигала не раз в секунду, а гораздо реже ... Хотя в железе всё как часы.
Не исключено, что и у Вас родственный глюк.
Мой совет - выкиньте шпротеус на помойку и делайте всегда в железе.



Комп менять не пробовали, протеус тормозит, потому что комп тормозной, кстати в протеусе есть внизу строка состояния, в которой видно загрузку процессора и часы во время симуляции, чё трудно сопоставить время. Если хотите, чтобы протеус работал быстрее, тогда убирайте обвязки из схемы в симуляторе, конечно же не в железе.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

hd44780 писал(а):Мой совет - выкиньте шпротеус на помойку и делайте всегда в железе.


Родственная душа :)

Щас придут Прот-офилы и нам наваляют :(
Аватара пользователя
within
Открыл глаза
Сообщения: 52
Зарегистрирован: Ср сен 02, 2009 21:39:06
Откуда: Николаев

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

Сообщение within »

Протэус хорош для изучения простых основ, типа включения транзистора, небольших простеньких схемок. А вот с более "умными" схемами трудновать( Ну, да ладно, это всё не в тему)
Очень жаль, когда люди упираются лбом в что-то, хотя это и не логично совсем. А свою логику не объясняют.
Buffalo
Открыл глаза
Сообщения: 68
Зарегистрирован: Вс ноя 13, 2011 15:09:58

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

Сообщение Buffalo »

Help!!! AVRstudio выдает следующее:

AVRASM: AVR macro assembler version 1.77.3 (Dec 20 2006 14:29:41)
Copyright (C) 1995-2005 ATMEL Corporation


Assembling 'C:\Program Files\Atmel\AVR Tools\MY_PROJECTS\Button_Tranz_Cooler\Button_Tranz_Cooler.asm'
Including 'C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc'
C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc(39) : warning : Only one .device directive allowed (line ignored)
C:\Program Files\Atmel\AVR Tools\MY_PROJECTS\Button_Tranz_Cooler\Button_Tranz_Cooler.asm(39) : error : Undefined variable referenced

Assembly complete with 1 error



Программа:
Вложения
Button_TRanz_Cooler.JPG
(73.31 КБ) 413 скачиваний
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Тут вообще то не по ассемблеру справка, А по CVAVR.
Сходу непонятно, но похоже что не нужно было вам включать

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

.include C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc

так как вы уже написали

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

.device atmega8

Второе по ходу программы просто игнорируется.Так прям и написано.
Далее

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

 C:\Program Files\Atmel\AVR Tools\MY_PROJECTS\Button_Tranz_Cooler\Button_Tranz_Cooler.asm(39): error : Undefined variable referenced
Тут пишет:ссылка на неопределенную переменную.

Причем как то странно у вас на картинке в заголовке программы написано, что файл называется flash_led.asm, А в пути файла почему то Button_Tranz_Cooler.asm :dont_know: Это типа ctrl+C,ctrl+V что ли?


Судя по программе она не видит метку turn_off
Видимо поменяв метку в переходе

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

rjmp turn_off 

забыли поменять само название метки LEDoff на turn_off

PS. Неплохо было бы вместо того, чтобы фоткать экран скопировать текст и отправить, может какие то добрые, но ленивые люди взяли бы да скомпилировали вам прогу.
Ленивые это потому что лень забивать в редактор программу, которая уже кем то набрана,тем более не для себя.

Странная вообще прога, если она рассчитана на включение какого либо вентилятора - жмем кнопку - вентилятор работает.
Не проще было сделать на одном транзисторе?Или уж тогда вместо кнопки использовать датчик температуры - ведь в МК встроен вольтметр(АЦП) и с его помощью можно регулировать скорость работы данного вентилятора или, хотя бы определять периодичность включения.
В поисках истины человек развивается.
Buffalo
Открыл глаза
Сообщения: 68
Зарегистрирован: Вс ноя 13, 2011 15:09:58

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

Сообщение Buffalo »

1. Нужно удалить путь "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc" ?
2. По поводу заголовка, просто забыл исправить его.
3. Про метку я забыл совершенно.
4.Вчера пытался вставить но выдавало какую-то абра-кодабру, хотя сегодня вствляется нормально.



;************************************
; Author: Buffalo *
; Date: 4/7/2012 *
; Version: 1.0 *
; Name file: flash_led.asm *
; For AVR: ATMega8 *
; Clock frequence: 4 Mc *
;************************************


; Task: Включение вентилятора

.device atmega8
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc"
.list

;===============
; Advertise:

.def temp = r16

;===============
; Beginning program

rjmp Init ; Первая выполняемая программа

;===============
Init:
ldi temp, 0b11111110;
out DDRB, temp;

ldi temp, 0b00000001;
out PortB, temp;
;===============
;Основное тело программы
Start:
sbic PinB,0 ; Проверяем, нажата ли кнопка
rjmp turn_off ; Переходми к метке turn_off
sbi PortB,1 ; Подаем 5 вольт через резистор на базу транзистора
rjmp Start ; Возвращаемся к метке Start

LEDoff:
cbi PortB,1 ; Не подаем напряжение на транзистор
rjmp Start ; Возвращаемся к метке Start


5. Насчет включения, вы абсолютно правы, жмём кнопку- дальше МК делает своё дело-подает 5 вольт на базу транзистора- включение вентилятора.

А насчет АЦП- это уже следующий шаг.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

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

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

;************************************
; Author: Buffalo *
; Date: 4/7/2012 *
; Version: 1.0 *
; Name file: flash_led.asm *
; For AVR: ATMega8 *
; Clock frequence: 4 Mc *
;************************************


; Task: Включение вентилятора

;.device atmega8
.nolist
.include "m8def.inc"
.list

;===============
; Advertise:

.def temp = r16

;===============
; Beginning program

 rjmp Init ; Первая выполняемая программа

;===============
Init:
 ldi temp, 0b11111110;
 out DDRB, temp;

 ldi temp, 0b00000001;
 out PortB, temp;
;===============
;Основное тело программы
Start:
 sbic PinB,0 ; Проверяем, нажата ли кнопка
 rjmp turn_off ; Переходми к метке turn_off
 sbi PortB,1 ; Подаем 5 вольт через резистор на базу транзистора
 rjmp Start ; Возвращаемся к метке Start

turn_off:
 cbi PortB,1 ; Не подаем напряжение на транзистор
 rjmp Start ; Возвращаемся к метке Start
Ответить

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