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

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

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

Сообщение vitalik_1984 »

*Trigger* писал(а):Из PORTx ничего не прочитать, там всегда нули.

это откуда вы взяли?
а как же вы тогда применяете конструкцию

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

PORTB =PORTB|(<< PB1);  

по вашим словам можно решить что это выражение всегда приводит к одному результату,независимо от того что было в регистре.
В поисках истины человек развивается.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Значит, в этой строке ошибка. Дайте весь код - станет понятнее.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

/*** Управление RGB светодиодом. Программный ШИМ ***/

#include <avr/interrput.h>
#include <avr/io.h>

volatile char pwm_counter,pwm_r,pwm_g,pwm_b;

/*** прерывание по переполнению Т0 ***/
ISR (TIMER0_OVF_vect)
{
if (pwm_counter++ > 163)
{
PORTB = 0x00;
pwm_counter = 0;
}
if (pwm_counter>pwm_r)
PORTB |= (1 << PB1);
if (pwm_counter>pwm_g)
PORTB |= (1 << PB2);
if (pwm_counter>pwm_b)
PORTB |= (1 << PB3);
}

/*** процедура задержки в микросекундах ***/
void delay_us(unsigned char time_us)
{ register unsigned char i;

for(i = 0; i<time_us; i++) // 4 цикла
{ asm (" PUSH R0 "); // 2 цикла
asm (" POP R0 "); // 2 цикла
// 8 циклов = 1 us для 8MHz
}
}

/*** процедура задержки в миллисекундах ***/
void delay_ms(unsigned inttime_ms)
{ register unsigned inti;

for(i = 0; i<time_ms; i++)
{ delay_us(250);
delay_us(250);
delay_us(250);
delay_us(250);
}
}

/*** красныйцвет ***/
void red (unsigned int time)
{
for (char a = 0; a<165; a++)
{
pwm_r = 164 - a; //увеличение
pwm_g = 164;
pwm_b = 164;
delay_ms(time);
}
for (char a = 0; a<165; a++)
{
pwm_r = a; //уменьшение
pwm_g = 164;
pwm_b = 164;
delay_ms(time);
}
}

/*** зеленыйцвет ***/
void green (unsigned int time)
{
for (char a = 0; a<165; a++)
{
pwm_r = 164;
pwm_g = 164 - a;
pwm_b = 164;
delay_ms(time);
}

for (char a = 0; a<165; a++)
{
pwm_r = 164;
pwm_g = a;
pwm_b = 164;
delay_ms(time);
}
}

/*** синийцвет ***/
void blue (unsigned int time)
{
for (char a = 0; a<165; a++)
{
pwm_r = 164;
pwm_g = 164;
pwm_b = 164 - a;
delay_ms(time);
}
for (char a = 0; a<165; a++)
{
pwm_r = 164;
pwm_g = 164;
pwm_b = a;
delay_ms(time);
}
}

/*** белыйцвет ***/
void white (unsigned int time)
{
for (char a = 0; a<165; a++)
{
pwm_r = 164 - a;
pwm_g = 164 - a;
pwm_b = 164 - a;
delay_ms(time);
}

for (char a = 0; a<165; a++)
{
pwm_r = a;
pwm_g = a;
pwm_b = a;
delay_ms(time);
}
}

/*** переходцветa ***/
void rgb (unsigned int time)
{
for (char a = 0; a<165; a++)
{
pwm_r = a;
pwm_b = 164 - a;
delay_ms(time);
}

for (char a = 0; a<165; a++)
{
pwm_b = a;
pwm_g = 164 - a;
delay_ms(time);
}

for (char a = 0; a<165; a++)
{
pwm_g = a;
pwm_r = 164 - a;
delay_ms(time);
}
}

int main (void)
{
DDRB = (1 << PB3)|(1 << PB2)|(1 << PB1);
// PB3,2,1 - выходы
TIMSK |= (1 << TOIE0);
// разрешениепрерывания
TCCR0 |= (0 << CS02)|(0 << CS01)|(1 << CS00);
// без предделителя
sei();// глобальное разрешение прерываний

while(1)
{
red(5);
green(5);
blue(5);
white(10);
for(;;)
{rgb(100);}
}
}
Вот весь код. Я все переработал под себя, но не понимаю, как делается ШИМ на прерывании таймера с использованием вышеприведенных строчек)
Самое гениальное - всегда самое простое
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Строка с обнулением выполняется только тогда, когда pwm_counter больше 163. Так же как и в динамической индикации.
Строки

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

PORTB |= (1 << PB1);

PORTB |= (1 << PB2);

PORTB |= (1 << PB3);

при определённых условиях устанавливают в "1" определённые биты порта, не изменяя значение остальных битов.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Это конечно ясно. Но дело вот в чем. Когда pwm_counter станет=163 все порты B в 0. Тогда как дальше будет выставляться 1 с помощью PORTB |= (1 << PB1);??? это неясно становится и возникает вопрос....как разработчик задал такое условие выставления 1 на определенном порту, когда я лично вообще здесь логики не вижу((. и это условие не будет ли вот таким:
PORTB.1!=PORTB.1?
Самое гениальное - всегда самое простое
Аватара пользователя
Valek3306
Встал на лапы
Сообщения: 95
Зарегистрирован: Вт авг 03, 2010 22:51:57
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Valek3306 »

Посмотрите пожалуйста на код моей программы и объясните мне почему она не работает и что надо исправить?
В смысле не работает сканф.
Код
Помогите пожалуйста!
Маленький хакер в подстанцию влез
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Volgol_555 писал(а):Это конечно ясно. Но дело вот в чем. Когда pwm_counter станет=163 все порты B в 0. Тогда как дальше будет выставляться 1 с помощью PORTB |= (1 << PB1);??? это неясно становится и возникает вопрос....как разработчик задал такое условие выставления 1 на определенном порту, когда я лично вообще здесь логики не вижу((. и это условие не будет ли вот таким:
PORTB.1!=PORTB.1?

На самом деле, если PB1 - не опечатка, то это просто число 1. PB0=0, PB1=1, PB2=2 и т. д. Кстати, с этими PBx код в CVAVR, скорее всего, не будет скомпилирован.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Интересно, где же это должно компилироваться. В общем вопрос в целом исчерпан - неясно где автор писал и что имел ввиду. Большое спасибо за старание)
Самое гениальное - всегда самое простое
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Попробуйте скомпилировать и посмотрите, работает ли.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Уже перепробовал все основные варианты. Ничего не получается
Самое гениальное - всегда самое простое
foxghost
Открыл глаза
Сообщения: 52
Зарегистрирован: Чт янв 14, 2010 23:14:31
Откуда: BY, Grodno

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

Сообщение foxghost »

Здравствуйте, только осваиваю прошивание МК.
Есть фьюзы из Пони (ATMega8A)
Fise8мгц.jpg
(25.71 КБ) 320 скачиваний
на частоту 8 МГц
Как правильно их выставить в AVRStudio
1.jpg
(95.05 КБ) 308 скачиваний

2.jpg
(110.98 КБ) 332 скачивания

или на крайний случай AVRdude
3.jpg
(94.02 КБ) 303 скачивания

а то на win7 другого не дано (наверное).

PS Сильно не ругайте если ошибся веткой, читая форум запорол по не знанию 3 мк, остался последний мк(шанс).
А востанавливать еще не научился с тактированием. Спасибо.
Аватара пользователя
Valek3306
Встал на лапы
Сообщения: 95
Зарегистрирован: Вт авг 03, 2010 22:51:57
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Valek3306 »

Valek3306 писал(а):Посмотрите пожалуйста на код моей программы и объясните мне почему она не работает и что надо исправить?
В смысле не работает сканф.
Код
Помогите пожалуйста!

Совсем забыл указать, компилятор CVAVR
Маленький хакер в подстанцию влез
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Есть калькулятор фьюзов
http://avr.roboforum.ru/
Там выберешь настройки, что были в какой-либо проге и увидишь флажки необходимые для CV
Самое гениальное - всегда самое простое
foxghost
Открыл глаза
Сообщения: 52
Зарегистрирован: Чт янв 14, 2010 23:14:31
Откуда: BY, Grodno

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

Сообщение foxghost »

Volgol_555 писал(а):Есть калькулятор фьюзов
http://avr.roboforum.ru/
Там выберешь настройки, что были в какой-либо проге и увидишь флажки необходимые для CV

но я не понимаю как данными калькуляторами пользаваться, объясните пожалуйста на моем примере.
Последний раз редактировалось foxghost Чт мар 29, 2012 21:04:25, всего редактировалось 1 раз.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

foxghost писал(а):PS Сильно не ругайте если ошибся веткой, читая форум запорол по не знанию 3 мк, остался последний мк(шанс).
А востанавливать еще не научился с тактированием. Спасибо.

Вообще не понимаю людей, у которых возникает вопрос по фьюзам в программе AVR studio
Ветка по фьюзам.

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

Вот вам логика :

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

/*** прерывание по переполнению Т0 ***/
ISR (TIMER0_OVF_vect)
{
if (pwm_counter++ > 163) //конец зоны дискретизации шим
{
PORTB = 0x00;//тушим все при достижении конца зоны
pwm_counter = 0;//обнуляем счетчик
}
if (pwm_counter>pwm_r) Если счетчик стал больше, чем число красного
PORTB 
|= (<< PB1); //зажигаем красный свд
if (pwm_counter>pwm_g)// аналогично красному для других диодов
PORTB |= (<< PB2);
if (pwm_counter>pwm_b)
PORTB |= (<< PB3);    
}
/*** красныйцвет ***/
void red (unsigned int time)
{
for (char a = 0; a<165; a++) //цикл увеличения числа а
{
pwm_r = 164 - a; // тут получается чем Больше значение а тем Раньше зажигаем светодиод
pwm_g = 164;//// тут получается значение а = 0,значит свд не горит.
pwm_b = 164;
delay_ms(time);
}
 
 

Чего непонятно то?Частота прерываний таймера /163 это получается частота шим.
В поисках истины человек развивается.
MS24
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

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

Сообщение MS24 »

Ребят, подскажите почему не работает элементарнейший код!
Диод тупо моргает один раз и все!


#include <mega128.h>
#include <delay.h>
void main( void )
{
DDRE = 0b11111111;
PORTE = 0b11111110;

while(1)
{
PORTE.1 = 0;
delay_ms (1000);
PORTE.1 = 1;
delay_ms (1000);

}
}
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Ошибок нет, смотри железо.
Docendo discimus
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Точно на третью ногу МК светодиод подключен?
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
MS24
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

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

Сообщение MS24 »

Точно, шьется без проблем, ноги менял так же история, питание в норме.
Напряжение 5в через 200 ом резистор.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

при попытке откомпилировать проэкт программа указывает на ошибку в этой строке

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

void mathematics(unsigned char sec, min)

что сдесь может быть не так ?
Tell Me The Truth
Ответить

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