При отладке появляется следующее окошко.
Что нужно сделать? Какую папку указать?
- Вложения
-
- foldsrc.png
- (10.27 КБ) 918 скачиваний
нет, это не совсем так.prinv писал(а):AVR Toolchain это WinAVR и есть, только более новых версий
ну а в чем проблема-то? скважность определяется содержимым регистр OCR1A (например), ну так и делайте в нужном месте OCR1A = adc_get_resistor_value();, например, в главном цикле...strengerst писал(а):можно ли менять скважность шим сигнала переменным резисторам
Не понимаю как значение сопротивление резистора передать OCR1A. С помощью АЦП как то. Я так думая что контролер должен замерять значение сопротивления и передовать и записывать это значение в переменную с которой можно было бы уже работать.ну а в чем проблема-то? скважность определяется содержимым регистр OCR1A (например), ну так и делайте в нужном месте OCR1A = adc_get_resistor_value();, например, в главном цикле...
совершенно верно, через АЦП. Я так управляю скоростью радиоуправляемой машинки. Настраиваю АЦП на 8-ми битный формат, измеряю напряжение и передаю значение ADCH по радио на машинку, а там заношу его значение в OCRstrengerst писал(а):Не понимаю как значение сопротивление резистора передать OCR1A. С помощью АЦП как то. Я так думая что контролер должен замерять значение сопротивления и передовать и записывать это значение в переменную с которой можно было бы уже работать.ну а в чем проблема-то? скважность определяется содержимым регистр OCR1A (например), ну так и делайте в нужном месте OCR1A = adc_get_resistor_value();, например, в главном цикле...
нет, через NRF24L01+. Через него надежнееstrengerst писал(а):Спасибо буду пробовать. А значение скорости машинки передаете через USART?
Код: Выделить всё
#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
}
}Код: Выделить всё
#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
}
}читайте даташитыstrengerst писал(а):многое не знал. Про запуск особенно
как же, разница есть!strengerst писал(а): В чем вообще разница не пойму