CodeVision AVR в вопросах и ответах
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
вы прочитали предыдущий пост там где я про goto спрашиваю.все таки его не заменить кроме таймера, и про delay_us(переменная ) я писал . компилятор ошибку пишет если туда вписываешь переменую а не число, это происходит только с us с delay_ms такого не наблюдаетя
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
видимо не прочитал
начсет goto - заменить можно, просто я непрявильно понял логику работы(словесное описание понимается хуже блок схемы, поэтому рекомендуется составить ее)
вот полезная программка, сложные ветвления она конечно не осилит, но поможет

c delay_us()действительно есть такая фишка, совсем об этом забыл - надо ей передавать число, поэтому делаем под разные звуки разные функции с жестко прописанными задержками
..........
нашел еще одну простенькую программку, поинтереснее
http://watts.cs.sonoma.edu/SFC/
начсет 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 КБ) 1376 скачиваний
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
спасибо за програмку))) скачал такую же как у вас. да жаль что посложнее ветвления не получаются. и поэтому я даже в ней не могу блок схему составить для опроса ручника в нужном мне режиме. проще на листочке набросать, я кстати так и делал , только не знаю чем можно заменить goto? или точнее как ее перестроить чтобы не использовать goto все было бы проще если бы я мог использовать таймер.((( я писал прогу для работы с таймером выставлял прерывание про совпадению , но прерывание не происходило , проверял в симуляторе аврстудио. счет битов таймера шел, а вот прерывания так ине наступило(( хотя все переписывал как в уроке было показанно
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
pashaumnov писал(а):жаль что посложнее ветвления не получаются
это для затравки
кстати поковырял намедни вторую прогу по ссылке, там уже возможности побогаче
насчет гото, кину на днях шаблоны, как что делать
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
огромное спасибо , буду ждать с нетерпением))
Re: CodeVision AVR в вопросах и ответах
извиняюсь возможно за неразумный если вопрос .Связываю 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 скачивание
С уважением...
Re: CodeVision AVR в вопросах и ответах
Народ просветите, кто нацарапал CVAVR посвежее с клизмой.
Сам доси пользую 1.25.9. На мой взгляд само правильно вылеченая.
Сам доси пользую 1.25.9. На мой взгляд само правильно вылеченая.
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Я 2.05.0 юзаю
Re: CodeVision AVR в вопросах и ответах
И как не глючит? Лечится генератором ключей или заменой файлов?
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Местами они все глючат.. Все лечится.
Коты! Подскажите пожалуйста, собрал устройство, слишком дофига ест (2,40 миллиампер), какой выбрать режим работы, необходимо что бы работали лишь нулевой и второй таймер! Пробовал понижать потребление методом записывания в регист MCUCR |= 0b0010000; не помогает...
Пробовал вызывать с помощью функций библиотеки <sleep.h> powerdown и все остальные режимы. Однако таймера продолжали работать только в режиме adc noise reduction...
А так же подскажите, как его будить(что в принципе не нужно, если таймеры будут работать). Микроконтроллер Atmega8L
Спасибо за помощь!
Коты! Подскажите пожалуйста, собрал устройство, слишком дофига ест (2,40 миллиампер), какой выбрать режим работы, необходимо что бы работали лишь нулевой и второй таймер! Пробовал понижать потребление методом записывания в регист MCUCR |= 0b0010000; не помогает...
Пробовал вызывать с помощью функций библиотеки <sleep.h> powerdown и все остальные режимы. Однако таймера продолжали работать только в режиме adc noise reduction...
А так же подскажите, как его будить(что в принципе не нужно, если таймеры будут работать). Микроконтроллер Atmega8L
Спасибо за помощь!
- MVGudkov
- Первый раз сказал Мяу!
- Сообщения: 23
- Зарегистрирован: Пт фев 11, 2011 13:34:31
- Откуда: Москва - Жулебино
Re: CodeVision AVR в вопросах и ответах
Есть программа на 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;
}
}
}
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 для начала...
Re: CodeVision AVR в вопросах и ответах
Сериг писал(а):Местами они все глючат.. Все лечится.
Коты! Подскажите пожалуйста, собрал устройство, слишком дофига ест (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 в вопросах и ответах
Подскажите пожалуйста как уменшить время розжига ШИМ в коде. Сейчас розжиг примерно 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;}
Спойлер
/*****************************************************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 в вопросах и ответах
Сериг писал(а):Спасибо огромное! Буду пробовать. Но остался вопрос, как будить мк?
В даташите есть табличка Active Clock Domains and Wake-up Sources in the Different Sleep Modes где показано в каком режиме чем можно разбудить.
P.S. Каким боком это относится к CVAVR?
«И всё-таки она вертится!»
Re: CodeVision AVR в вопросах и ответах
Попробую ещё раз.В CV 2.03.4 написал програмку,которую отлаживаю в AvrStidio 4.19.Отлаживается хорошо,но по выходу из прерывания UART возвращается не в текст на Си а в ассемблерный код.Может что не так поставил в настройках AStudio ?
Самое интересное то что тот-же код,написанный в CV 1.25.9 отлаживается в AStudio 3.56 нормально...Конечно можно сказать что отлаживай на старых программах,но в старых нет поновее микроконтроллеров да и в большинстве на W7 x64 они даже запускаться не желают (кстати можно их запустить ?)
С уважением...
Самое интересное то что тот-же код,написанный в CV 1.25.9 отлаживается в AStudio 3.56 нормально...Конечно можно сказать что отлаживай на старых программах,но в старых нет поновее микроконтроллеров да и в большинстве на W7 x64 они даже запускаться не желают (кстати можно их запустить ?)
С уважением...
С уважением...
Re: CodeVision AVR в вопросах и ответах
Сериг писал(а):Спасибо огромное! Буду пробовать. Но остался вопрос, как будить мк?
в секции 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, не могу понять почему...
ASSR = (0 << AS2);
Не запускается таймер 2, не могу понять почему...
Re: CodeVision AVR в вопросах и ответах
Сериг писал(а):Сделал так 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);
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
- Зачем он нюхает мою лапу? - подумал кот.