Страница 300 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт янв 23, 2014 01:42:49
pashaumnov
вы прочитали предыдущий пост там где я про goto спрашиваю.все таки его не заменить кроме таймера, и про delay_us(переменная ) я писал . компилятор ошибку пишет если туда вписываешь переменую а не число, это происходит только с us с delay_ms такого не наблюдаетя
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт янв 23, 2014 03:36:45
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/
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт янв 23, 2014 18:54:13
pashaumnov
спасибо за програмку))) скачал такую же как у вас. да жаль что посложнее ветвления не получаются. и поэтому я даже в ней не могу блок схему составить для опроса ручника в нужном мне режиме. проще на листочке набросать, я кстати так и делал , только не знаю чем можно заменить goto? или точнее как ее перестроить чтобы не использовать goto все было бы проще если бы я мог использовать таймер.((( я писал прогу для работы с таймером выставлял прерывание про совпадению , но прерывание не происходило , проверял в симуляторе аврстудио. счет битов таймера шел, а вот прерывания так ине наступило(( хотя все переписывал как в уроке было показанно
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт янв 24, 2014 00:39:31
unalex
pashaumnov писал(а):жаль что посложнее ветвления не получаются
это для затравки
кстати поковырял намедни вторую прогу по ссылке, там уже возможности побогаче
насчет гото, кину на днях шаблоны, как что делать
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт янв 24, 2014 00:58:55
pashaumnov
огромное спасибо , буду ждать с нетерпением))
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт янв 24, 2014 14:27:05
andr_lar
извиняюсь возможно за неразумный если вопрос .Связываю Atmega 8 с компьютером.С компьютера посылаю число и контроллер в прерывании высвечивает его на индикаторе.Как не странно всё работает.Но когда симулирую эту программу в AvrStudio 4.19 на while (tmp==0); ставлюточку останова,устанавливаю флаг RXC и программа выходит на прерывание по приёму байта,обрабатывает его,но при выходе из прерывания вываливается в таблицу с ассемлерным кодом.Причём судя по ассемблеру возвращяется куда надо,но симулировать конечно уже дальше не получится.Пробовал изменять параметры стека в Code Vision - не получилось. Где я на грабли наступаю ? С уважением...CodeVision 2.03.04 AvrStudio 4.19/4.15
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб янв 25, 2014 17:53:26
master_74
Народ просветите, кто нацарапал CVAVR посвежее с клизмой.
Сам доси пользую 1.25.9. На мой взгляд само правильно вылеченая.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб янв 25, 2014 20:06:12
Сериг
Я 2.05.0 юзаю
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 10:52:27
master_74
И как не глючит? Лечится генератором ключей или заменой файлов?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 19:17:01
Сериг
Местами они все глючат.. Все лечится.
Коты! Подскажите пожалуйста, собрал устройство, слишком дофига ест (2,40 миллиампер), какой выбрать режим работы, необходимо что бы работали лишь нулевой и второй таймер! Пробовал понижать потребление методом записывания в регист MCUCR |= 0b0010000; не помогает...
Пробовал вызывать с помощью функций библиотеки <sleep.h> powerdown и все остальные режимы. Однако таймера продолжали работать только в режиме adc noise reduction...
А так же подскажите, как его будить(что в принципе не нужно, если таймеры будут работать). Микроконтроллер Atmega8L
Спасибо за помощь!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 19:19:55
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;
}
}
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 20:32:23
Сериг
Создай переменную dt для начала...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 22:13:16
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)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 22:38:58
Сериг
Спасибо огромное! Буду пробовать. Но остался вопрос, как будить мк?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 23:01:14
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;}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 23:02:07
Apparatchik
Сериг писал(а):Спасибо огромное! Буду пробовать. Но остался вопрос, как будить мк?
В даташите есть табличка Active Clock Domains and Wake-up Sources in the Different Sleep Modes где показано в каком режиме чем можно разбудить.
P.S. Каким боком это относится к CVAVR?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 23:12:53
andr_lar
Попробую ещё раз.В CV 2.03.4 написал програмку,которую отлаживаю в AvrStidio 4.19.Отлаживается хорошо,но по выходу из прерывания UART возвращается не в текст на Си а в ассемблерный код.Может что не так поставил в настройках AStudio ?
Самое интересное то что тот-же код,написанный в CV 1.25.9 отлаживается в AStudio 3.56 нормально...Конечно можно сказать что отлаживай на старых программах,но в старых нет поновее микроконтроллеров да и в большинстве на W7 x64 они даже запускаться не желают (кстати можно их запустить ?)
С уважением...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 26, 2014 23:55:06
olegleon
Сериг писал(а):Спасибо огромное! Буду пробовать. Но остался вопрос, как будить мк?
в секции main поставить
#asm("Sei") - разрешение прерываний,
ну а будится он от таймера будет сам, так ка возникнет прерывание по переполнению например.
Усыплять можно по окончанию отработанных действий командой
#asm("Sleep")
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн янв 27, 2014 00:33:19
Сериг
Сделал так MCUCR |= (1<<SM0) | (1 << SM1) | (0 << SM2) | (1 << SE);
ASSR = (0 << AS2);
Не запускается таймер 2, не могу понять почему...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн янв 27, 2014 01:13:14
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);