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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

вы прочитали предыдущий пост там где я про goto спрашиваю.все таки его не заменить кроме таймера, и про delay_us(переменная ) я писал . компилятор ошибку пишет если туда вписываешь переменую а не число, это происходит только с us с delay_ms такого не наблюдаетя
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

видимо не прочитал
начсет goto - заменить можно, просто я непрявильно понял логику работы(словесное описание понимается хуже блок схемы, поэтому рекомендуется составить ее)

вот полезная программка, сложные ветвления она конечно не осилит, но поможет
Изображение
c delay_us()действительно есть такая фишка, совсем об этом забыл - надо ей передавать число, поэтому делаем под разные звуки разные функции с жестко прописанными задержками

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

void sound1(char cycles)
{
   while(cycles)
   {
      delay_us(100);
      PORTB.6 = 1;
      delay_us(100);
      PORTB.6 = 0;
      cycles--;
   }
}



..........
нашел еще одну простенькую программку, поинтереснее
http://watts.cs.sonoma.edu/SFC/
Вложения
AFCE.PNG
(54.65 КБ) 1375 скачиваний
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

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

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

Сообщение unalex »

pashaumnov писал(а):жаль что посложнее ветвления не получаются


это для затравки

кстати поковырял намедни вторую прогу по ссылке, там уже возможности побогаче

насчет гото, кину на днях шаблоны, как что делать
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

огромное спасибо , буду ждать с нетерпением))
andr_lar
Нашел транзистор. Понюхал.
Сообщения: 166
Зарегистрирован: Вт янв 22, 2013 16:31:22

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

Сообщение andr_lar »

извиняюсь возможно за неразумный если вопрос .Связываю Atmega 8 с компьютером.С компьютера посылаю число и контроллер в прерывании высвечивает его на индикаторе.Как не странно всё работает.Но когда симулирую эту программу в AvrStudio 4.19 на while (tmp==0); ставлюточку останова,устанавливаю флаг RXC и программа выходит на прерывание по приёму байта,обрабатывает его,но при выходе из прерывания вываливается в таблицу с ассемлерным кодом.Причём судя по ассемблеру возвращяется куда надо,но симулировать конечно уже дальше не получится.Пробовал изменять параметры стека в Code Vision - не получилось. Где я на грабли наступаю ? С уважением...CodeVision 2.03.04 AvrStudio 4.19/4.15
Вложения
5.c
(6.6 КБ) 331 скачивание
С уважением...
master_74
Родился
Сообщения: 19
Зарегистрирован: Вт апр 06, 2010 09:50:34

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

Сообщение master_74 »

Народ просветите, кто нацарапал CVAVR посвежее с клизмой.
Сам доси пользую 1.25.9. На мой взгляд само правильно вылеченая.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Я 2.05.0 юзаю
master_74
Родился
Сообщения: 19
Зарегистрирован: Вт апр 06, 2010 09:50:34

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

Сообщение master_74 »

И как не глючит? Лечится генератором ключей или заменой файлов?
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Местами они все глючат.. Все лечится.
Коты! Подскажите пожалуйста, собрал устройство, слишком дофига ест (2,40 миллиампер), какой выбрать режим работы, необходимо что бы работали лишь нулевой и второй таймер! Пробовал понижать потребление методом записывания в регист MCUCR |= 0b0010000; не помогает...
Пробовал вызывать с помощью функций библиотеки <sleep.h> powerdown и все остальные режимы. Однако таймера продолжали работать только в режиме adc noise reduction...
А так же подскажите, как его будить(что в принципе не нужно, если таймеры будут работать). Микроконтроллер Atmega8L
Спасибо за помощь!
Аватара пользователя
MVGudkov
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Пт фев 11, 2011 13:34:31
Откуда: Москва - Жулебино

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

Сообщение MVGudkov »

Есть программа на tiny13. Я пытаюсь переделать её под tiny2313. Создал новый проект, выбрал вроде все что нужно, вставил код программы как был в исходнике. Подправил адреса портов, а CVawr выдает 3 ошибки: undefined sumbol `dt`. В оригинале все компилируется без ошибок. Что нужно поправить?
1 dt = GetData(); // считали и отфильтровали ввод со входов
2 if ((dt & 0x40) == 0x00) {
3 if ((dt & 0x30) == 0x20) {

Нашел косяк ))) потерял строку (unsigned char dt = 0;)

Код:
Спойлер/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 26.01.2014
Author : PerTic@n
Company : If You Like This Software,Buy It
Comments:


Chip type : ATtiny2313
AVR Core Clock frequency: 4,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*****************************************************/

#include <tiny2313.h>
#include <delay.h>

unsigned char GetData (void)
{
unsigned char i, j;
for(i=0;i<30;i++)
{
delay_us(1000);
j = (PINB & 0xF3); // pb0,1,4 - pb7
delay_us(1000);
if(j != (PINB & 0xF3)) i=0;
}
return j;
}

eeprom int pwm_level;
int pwm_current = 0;
int pwm_step = 1;
unsigned char laststate = 0x00;

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=0 State2=0 State1=P State0=P
PORTB=0xF3;
DDRB=0x0C;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: Fast PWM top=0xFF
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
TCCR0A=0x83;
TCCR0B=0x04;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

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

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
// Watchdog Timer interrupt: Off
#pragma optsize-
WDTCR=0x39;
WDTCR=0x29;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

while (1)
{
#asm("wdr") // сброс WDT

dt = GetData(); // считали и отфильтровали ввод со входов

delay_ms(100);

if ((dt & 0x40) == 0x00) {
// режим настройки
if (laststate == 0x00) {
laststate = 0x01;
pwm_level += 16;
if (pwm_level > 239) {
pwm_level = 15;
pwm_current = 0;
}
pwm_step = pwm_level / 10 + 1; // шаг розжига.
}
} else {
laststate = 0x00;
if ((dt & 0x30) == 0x20) {
// разжигаем
if (pwm_current < pwm_level) {
pwm_current += pwm_step;
if (pwm_current > pwm_level) {
pwm_current = pwm_level;
}
}
} else {
// гасим
if (pwm_current > 0) {
pwm_current -= pwm_step;
if (pwm_current < 0) {
pwm_current = 0;
}
}
}
}

if (pwm_current == 0x00) {
OCR0A = 0x00;
TCCR0A = 0x00;
PORTB.3 = 0x00;
} else {
OCR0A = pwm_current;
TCCR0A = 0x83;
PORTB.3 = 0x01;
}

}
}
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Создай переменную dt для начала...
Аватара пользователя
olegleon
Родился
Сообщения: 15
Зарегистрирован: Ср янв 22, 2014 17:44:19
Откуда: Одесса

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

Сообщение olegleon »

Сериг писал(а):Местами они все глючат.. Все лечится.
Коты! Подскажите пожалуйста, собрал устройство, слишком дофига ест (2,40 миллиампер), какой выбрать режим работы, необходимо что бы работали лишь нулевой и второй таймер! Пробовал понижать потребление методом записывания в регист MCUCR |= 0b0010000; не помогает...
Пробовал вызывать с помощью функций библиотеки <sleep.h> powerdown и все остальные режимы. Однако таймера продолжали работать только в режиме adc noise reduction...
А так же подскажите, как его будить(что в принципе не нужно, если таймеры будут работать). Микроконтроллер Atmega8L
Спасибо за помощь!


Используйте режим Power-save,

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

MCUCR |= (1 << SM0)|(1 << SM1)|(0 << SM2)|(1 << SE);   // Power-save enable


для того чтобы таймер2 работал надо бит AS2 в регистре ASSR установить ( If AS2bit in ASSR is set -из ДШ, стр.35)
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Спасибо огромное! Буду пробовать. Но остался вопрос, как будить мк?
Аватара пользователя
MVGudkov
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Пт фев 11, 2011 13:34:31
Откуда: Москва - Жулебино

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

Сообщение MVGudkov »

Подскажите пожалуйста как уменшить время розжига ШИМ в коде. Сейчас розжиг примерно 1-2 сек. В идеале чтоб гас сразу а зажигался примерно 0.5 сек.
Спойлер/*****************************************************
T
Chip type : ATtiny2313
AVR Core Clock frequency: 4,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*****************************************************/

#include <tiny2313.h>
#include <delay.h>

unsigned char GetData (void)
{
unsigned char i, j;
for(i=0;i<30;i++)
{
delay_us(1000);
j = (PINB & 0xF3); // pb0,1,4 - pb7
delay_us(1000);
if(j != (PINB & 0xF3)) i=0;
}
return j;
}

eeprom int pwm_level;
int pwm_current = 0;
int pwm_step = 1;
unsigned char laststate = 0x00;

void main(void)
{
unsigned char dt = 0;

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=0 State2=0 State1=P State0=P
PORTB=0xF3;
DDRB=0x0C;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: Fast PWM top=0xFF
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
TCCR0A=0x83;
TCCR0B=0x04;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
DIDR=0x00;

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
// Watchdog Timer interrupt: Off
#pragma optsize-
WDTCR=0x39;
WDTCR=0x29;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

pwm_step = pwm_level / 10 + 1; // шаг розжига.

while (1)
{

#asm("wdr") // сброс WDT

dt = GetData(); // считали и отфильтровали ввод со входов

delay_ms(100);

if ((dt & 0x40) == 0x00) {
// режим настройки
if (laststate == 0x00) {
laststate = 0x01;
pwm_level += 16;
if (pwm_level > 239) {
pwm_level = 15;
pwm_current = 0;
}
pwm_step = pwm_level / 10 + 1; // шаг розжига.
}
} else {
laststate = 0x00;
if ((dt & 0x30) == 0x20) {
// разжигаем
if (pwm_current < pwm_level) {
pwm_current += pwm_step;
if (pwm_current > pwm_level) {
pwm_current = pwm_level;
}
}
} else {
// гасим
if (pwm_current > 0) {
pwm_current -= pwm_step;
if (pwm_current < 0) {
pwm_current = 0;
}
}
}
}

if (pwm_current == 0x00) {
OCR0A = 0x00;
TCCR0A = 0x00;
PORTB.3 = 0x00;
} else {
OCR0A = pwm_current;
TCCR0A = 0x83;
PORTB.3 = 0x01;
}

}
}


Разобрался. Изменил
// гасим
if (pwm_current > 0) {
pwm_current = 0;}
Последний раз редактировалось MVGudkov Пн янв 27, 2014 00:55:07, всего редактировалось 1 раз.
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Сериг писал(а):Спасибо огромное! Буду пробовать. Но остался вопрос, как будить мк?

В даташите есть табличка Active Clock Domains and Wake-up Sources in the Different Sleep Modes где показано в каком режиме чем можно разбудить.

P.S. Каким боком это относится к CVAVR?
«И всё-таки она вертится!»
andr_lar
Нашел транзистор. Понюхал.
Сообщения: 166
Зарегистрирован: Вт янв 22, 2013 16:31:22

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

Сообщение andr_lar »

Попробую ещё раз.В CV 2.03.4 написал програмку,которую отлаживаю в AvrStidio 4.19.Отлаживается хорошо,но по выходу из прерывания UART возвращается не в текст на Си а в ассемблерный код.Может что не так поставил в настройках AStudio ?
Самое интересное то что тот-же код,написанный в CV 1.25.9 отлаживается в AStudio 3.56 нормально...Конечно можно сказать что отлаживай на старых программах,но в старых нет поновее микроконтроллеров да и в большинстве на W7 x64 они даже запускаться не желают (кстати можно их запустить ?)

С уважением...
С уважением...
Аватара пользователя
olegleon
Родился
Сообщения: 15
Зарегистрирован: Ср янв 22, 2014 17:44:19
Откуда: Одесса

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

Сообщение olegleon »

Сериг писал(а):Спасибо огромное! Буду пробовать. Но остался вопрос, как будить мк?


в секции main поставить #asm("Sei") - разрешение прерываний,
ну а будится он от таймера будет сам, так ка возникнет прерывание по переполнению например.
Усыплять можно по окончанию отработанных действий командой #asm("Sleep")
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Сделал так MCUCR |= (1<<SM0) | (1 << SM1) | (0 << SM2) | (1 << SE);
ASSR = (0 << AS2);
Не запускается таймер 2, не могу понять почему...
Аватара пользователя
olegleon
Родился
Сообщения: 15
Зарегистрирован: Ср янв 22, 2014 17:44:19
Откуда: Одесса

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

Сообщение olegleon »

Сериг писал(а):Сделал так MCUCR |= (1<<SM0) | (1 << SM1) | (0 << SM2) | (1 << SE);
ASSR = (0 << AS2);
Не запускается таймер 2, не могу понять почему...


в ДШ на стр.34 сказано after wake-up in Power-save mode if AS2 is 0.

т.е. этот бит сбрасывается в 0, думаю его тогда нужно устанавливать в 1-цу. ASSR = (1 << AS2);
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
Ответить

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