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

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь

Сообщение prinv »

Поставил AVR Studio 4.19 и AVR Toolchain 3.3.0
При отладке появляется следующее окошко.
Что нужно сделать? Какую папку указать?
Изображение
Вложения
foldsrc.png
(10.27 КБ) 918 скачиваний
Никакая контра не уйдёт от нас
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

боюсь, что так не выйдет. я на 100% не уверен, но все предыдущие версии AVR Studio не умели "автоматически" работать ни с каким компилятором, кроме WinAVR. поэтому я могу вам дать не очень правильный совет: сначала установить WinAVR, а затем просто поверх ее папок перезаписать файлами из AVR Toolchain. студия будет думать, что это WinAVR, но фактически будет работать с новым компилятором.

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь

Сообщение prinv »

AVR Toolchain это WinAVR и есть, только более новых версий.
Никакая контра не уйдёт от нас
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

prinv писал(а):AVR Toolchain это WinAVR и есть, только более новых версий
нет, это не совсем так.
WinAVR - это прежде всего инсталлятор, который делает такие изменения в окружении Windows, которые позволяют студии автоматически обнаружить его присутствие и соответственно предлагать создание проектов для WinAVR. о наличии toolchain студия, похоже, самостоятельно узнать не может, а как ей помочь - я не в курсе (точнее, сказал, как делал я)

кроме того, AVR Toolchain не содержит документации по avr-libc и вообще по avr-gcc, а WinAVR содержит все "из коробки".

функционально - да, это версии компилятора под AVR, но комплектность разная. в частности, мне очень не нравится формат вывода сводки о размере полученного кода, который выдает avr-size в toolchain последних версий, приходится применять версию из WinAVR
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 516
Зарегистрирован: Пт янв 18, 2013 15:11:02

Сообщение strengerst »

Подскажите пожалуйста можно ли менять скважность шим сигнала переменным резисторам, что бы значение не фиксированное в коде было. А принимало значение в зависимости от сопротивление скажем резистора в данный момент. Или как правильно это сделать.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

strengerst писал(а):можно ли менять скважность шим сигнала переменным резисторам
ну а в чем проблема-то? скважность определяется содержимым регистр OCR1A (например), ну так и делайте в нужном месте OCR1A = adc_get_resistor_value();, например, в главном цикле...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 516
Зарегистрирован: Пт янв 18, 2013 15:11:02

Сообщение strengerst »

ну а в чем проблема-то? скважность определяется содержимым регистр OCR1A (например), ну так и делайте в нужном месте OCR1A = adc_get_resistor_value();, например, в главном цикле...
Не понимаю как значение сопротивление резистора передать OCR1A. С помощью АЦП как то. Я так думая что контролер должен замерять значение сопротивления и передовать и записывать это значение в переменную с которой можно было бы уже работать.
Вымогатель припоя
Аватара пользователя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь

Сообщение prinv »

Никакая контра не уйдёт от нас
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 516
Зарегистрирован: Пт янв 18, 2013 15:11:02

Сообщение strengerst »

Спасибо почитаю.
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

Сообщение ozonn »

strengerst писал(а):
ну а в чем проблема-то? скважность определяется содержимым регистр OCR1A (например), ну так и делайте в нужном месте OCR1A = adc_get_resistor_value();, например, в главном цикле...
Не понимаю как значение сопротивление резистора передать OCR1A. С помощью АЦП как то. Я так думая что контролер должен замерять значение сопротивления и передовать и записывать это значение в переменную с которой можно было бы уже работать.
совершенно верно, через АЦП. Я так управляю скоростью радиоуправляемой машинки. Настраиваю АЦП на 8-ми битный формат, измеряю напряжение и передаю значение ADCH по радио на машинку, а там заношу его значение в OCR
Вымогатель припоя
Аватара пользователя
Сообщения: 516
Зарегистрирован: Пт янв 18, 2013 15:11:02

Сообщение strengerst »

Спасибо буду пробовать. А значение скорости машинки передаете через USART?
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

Сообщение ozonn »

strengerst писал(а):Спасибо буду пробовать. А значение скорости машинки передаете через USART?
нет, через NRF24L01+. Через него надежнее :)
Вымогатель припоя
Аватара пользователя
Сообщения: 516
Зарегистрирован: Пт янв 18, 2013 15:11:02

Сообщение strengerst »

Ситуация такая, хочу с помощью АЦП микроконтроллера атmega8 регулировать ШИМ сигнал на транзистор. С ШИМ вроде разобрался
при изменении данных регистра таймера OCR2 мы изменяем скважность сигнала шим и лампочка прикрепленая к транзистору меняет силу свечения. Дальше хочу с помощью переменного транзистора изменять ШИМ сигнал - управлять свечением лампочки. Тут понятно что нужно данные регистра ADCH записывать в OCR2 что бы ШИМ изменялся в зависимости от сопротивления резистора. А как правильно это сделать не знаю. Подскажите в чем я ошибаюсь. Вот схема и код.
Спойлер

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

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>


void Timer2Z ()//Функция подключения таймера в режиме шим.
{	TCCR2|=(1<<WGM20);//Выбираем режим с вазовой корекцией WGM20=1; WGM21=0;
	TCCR2|=(1<<COM21)|(1<<COM20); //Выбираем режим формирования сигнала для ШИМ:
//УстановкаOC2при совпадении во время прямого счета.
//СбросOC2при совпадении во время обратного счета.
	TCCR2|=(1<<CS22)|(1<<CS20);//Выбираем частоту синхронизации таймера. clkT2S/1024 (с предделением)
	TIMSK|=(1<<OCIE2)|(1<<TOIE2); //Разрешаем прерывания по совпадению и переполнению таймера
	TIFR|=(1<<OCF2)|(1<<TOV1); //Cбрасываем флаги прерывания если они установлены
	OCR2=0xFF;
	};
	
	
	

ISR(TIMER2_OVF_vect){ // Прерывания таймера по переполнению
	
	
}

ISR(TIMER2_COMP_vect){ // Прерывания таймера по совпадению

	
}

ISR(ADC_vect){//Прерывание от АЦП
OCR2=(ADC & (1<<ADCH));
}
	

int main(void)
{
//Подключаем аналого-цифровой преоброзователь.
ADCSRA|=(1<<ADEN);
//Выбор режима преобразования однократное или непрерывное
ADCSRA|=(1<<ADFR);// непрерывное
// Разрешение прерывание от АЦП по завершению преобразования.
ADCSRA|=(1<<ADIE); // Разрешаем прерывание.ADIF - флаг прерывания.
//Выбираем тактовую частоту АЦП рекомендуется 50-200кГЦ 
ADCSRA|=(1<<ADPS2)|(1<<ADPS0); //Что соответствует СК/32 = 4Мгц/32=125кГц
//Выбираем бит опорного напряжение относительно которого будет производится замер
ADMUX|=(1<<REFS0); //Выбираем  AVcc, с внешним конденсатором на AREF.
//Определяем как результат преобразования запишется в регистры 
ADMUX|=(1<<ADLAR);// в ADCH записываются старшие  8бит а в младшие 2 бит ADCL
//Выбираем бит аналогового канала на который будет подоватся напряжение для сравнения.
ADMUX|=(1<<MUX0)|(1<<MUX1);// Выбираем ADC3 выход на микроконтролере.


DDRB|=(1<<PB3);

	
	
    while(1)
    {

 //Задаем данные для сравнения они влияют на величину импульса. 	
	
   asm("nop");     //TODO:: Please write your application code 
    }
}
Вложения
схема1.png
(44.17 КБ) 375 скачиваний
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

по-моему, у вас в коде не хватает запуска АЦП на первое измерение, т.е. ADCSRA |= _BV(ADSC);
ну и, разумеется, глобального разрешения прерываний sei(); не вижу перед главным циклом

P.S. корректность установки прочих битов в регистрах таймера и т.п. не проверял - путаный код...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 516
Зарегистрирован: Пт янв 18, 2013 15:11:02

Сообщение strengerst »

Спасибо сейчас попробую. ADCSRA|=(1<<ADSC); - Так вроде как это для однократного преобразования, а уменя в коде стоит непрерывное преобразование?

Ну вот исправил на однократное ну все равно что то не так:
Все надо идти смогу отписаться только завтра. Если не сложно напишите в чем еще может быть причина
Спойлер

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

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>


void Timer2Z ()//Функция подключения таймера в режиме шим.
{	TCCR2|=(1<<WGM20);//Выбираем режим с вазовой корекцией WGM20=1; WGM21=0;
	TCCR2|=(1<<COM21)|(1<<COM20); //Выбираем режим формирования сигнала для ШИМ:
//УстановкаOC2при совпадении во время прямого счета.
//СбросOC2при совпадении во время обратного счета.
	TCCR2|=(1<<CS22)|(1<<CS20);//Выбираем частоту синхронизации таймера. clkT2S/1024 (с предделением)
	TIMSK|=(1<<OCIE2)|(1<<TOIE2); //Разрешаем прерывания по совпадению и переполнению таймера
	TIFR|=(1<<OCF2)|(1<<TOV1); //Cбрасываем флаги прерывания если они установлены
	OCR2=0xFF;
	};
	
	
	

ISR(TIMER2_OVF_vect){ // Прерывания таймера по переполнению
	
	
}

ISR(TIMER2_COMP_vect){ // Прерывания таймера по совпадению

	
}

ISR(ADC_vect){//Прерывание от АЦП
OCR2=(ADC & (1<<ADCH));
asm("sei");
}
	

int main(void)
{
//Подключаем аналого-цифровой преоброзователь.
ADCSRA|=(1<<ADEN);
//Выбор режима преобразования однократное или непрерывное
ADCSRA&=~(1<<ADFR);// однократное
// Разрешение прерывание от АЦП по завершению преобразования.
ADCSRA|=(1<<ADIE); // Запрещаем прерывание.ADIF - флаг прерывания.
//Выбираем тактовую частоту АЦП рекомендуется 50-200кГЦ 
ADCSRA|=(1<<ADPS2)|(1<<ADPS0); //Что соответствует СК/32 = 4Мгц/32=125кГц
//Выбираем бит опорного напряжение относительно которого будет производится замер
ADMUX|=(1<<REFS0); //Выбираем  AVcc, с внешним конденсатором на AREF.
//Определяем как результат преобразования запишется в регистры 
ADMUX|=(1<<ADLAR);// в ADCH записываются старшие  8бит а в младшие 2 бит ADCL
//Выбираем бит аналогового канала на который будет подоватся напряжение для сравнения.
ADMUX|=(1<<MUX0)|(1<<MUX1);// Выбираем ADC3 выход на микроконтролере.

DDRB|=(1<<PB3);  
ADCSRA|=(1<<ADSC);
asm("sei");


	
	
    while(1)
    {
 //Задаем данные для сравнения они влияют на величину импульса. 	
	
   asm("nop");     //TODO:: Please write your application code 
    }
}
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

во-первых, sei() вы зачем-то вставили в обработчик прерывания АЦП - зачем?
во-вторых, режим АЦП зачем-то изменили на однократный. у вас был правильный режим, но для того, чтобы оно начало измерять, надо ж его запустить первый раз установкой бита ADSC - я ж вам об этом писал "не хватает".
в-третьих, зачем asm("sei") если есть просто sei();?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 516
Зарегистрирован: Пт янв 18, 2013 15:11:02

Сообщение strengerst »

Спасибо многое не знал. Про запуск особенно . Буду пробовать.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

strengerst писал(а):многое не знал. Про запуск особенно
читайте даташиты :) как говорил О.Бендер, они еще иногда сеют разумное, доброе, вечное...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 516
Зарегистрирован: Пт янв 18, 2013 15:11:02

Сообщение strengerst »

Спасибо все получилось. Слишком много информации без практики - каша в голове. При чтении даташита многое упускаю так как там куча инфы и вся она нужна, а практики мало. И еще не всегда все понятно . Спасибо форуму и всем вам что уделяете время на розяснение.

Добавлено after 2 hours 4 minutes 5 seconds:
Куда лучше подключать бит опорного напряжения через AREF или AVcc. В чем вообще разница не пойму.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

strengerst писал(а): В чем вообще разница не пойму
как же, разница есть!
VCC - это питание, вся бяка, что там может быть (например, из-за нестабильного питания или скачков нагрузки) попадет на АЦП и ухудшит качество его работы.
AREF - это вход как бы внешнего источника опорного напряжения, но гораздо лучше использовать встроенный источник опоры, а на AREF поставить конденсатор, в соответствии с рекомендациями даташита. не забудьте и про AVCC (если он есть, конечно), - питание на него следует подавать через LC-фильтр, опять же, в соответствии с даташитом.

встроенный источник опорного напряжения обеспечит гораздо лучшее качество работы АЦП.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Ответить

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