Помогите с AVR
Ну уж если Вы спрашиваете зачем там ШИМ товам не сюда нужно обращатся, а в кружок радио електроники... Посмотрите что стоит на порте где регулируется нипряжение. Не замечаете конденсатор и резистор?
Я не Сашок!!!
- Реклама
- Сообщения: 21
- Зарегистрирован: Пн май 04, 2009 10:41:17
MDamir , вы уже определитесь, что вам конкретно надо:
получить на выходе постоянное напряжение, амплитуда которого ступенчато регулируется приемным портом, или напряжение состоящее из 256 ступенек регулируемой длительности? Если второе, то в каком диапазоне должна регулироваться длительность, как должно себя вести после достижения верхней ступеньки - по ступенькам спадать вниз до нуля или сразу с нуля начинаться?
Нарисуйте нормальный рисунок напряжения за полный период (надеюсь, знаете что такое ПЕРИОД) напряжения, обозначьте на нем что и как должно регулироваться. Иначе испорченный телефон получается...
получить на выходе постоянное напряжение, амплитуда которого ступенчато регулируется приемным портом, или напряжение состоящее из 256 ступенек регулируемой длительности? Если второе, то в каком диапазоне должна регулироваться длительность, как должно себя вести после достижения верхней ступеньки - по ступенькам спадать вниз до нуля или сразу с нуля начинаться?
Нарисуйте нормальный рисунок напряжения за полный период (надеюсь, знаете что такое ПЕРИОД) напряжения, обозначьте на нем что и как должно регулироваться. Иначе испорченный телефон получается...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- Сообщения: 21
- Зарегистрирован: Пн май 04, 2009 10:41:17
Пришлось прибегнуть к Пеинту))
Напряжение растёт с 0В до 255В, т.к. 1 ступень 0В- ступенек будет 256 (N=256). Горизонтальная часть ступенек, т.е. сколько будет длиться импульс напряжение- как я понял это частота повторения, она константа, задаётся портом.
Надо что бы напряжение росло с 0В до 255В и программа останавливалась.
Напряжение растёт с 0В до 255В, т.к. 1 ступень 0В- ступенек будет 256 (N=256). Горизонтальная часть ступенек, т.е. сколько будет длиться импульс напряжение- как я понял это частота повторения, она константа, задаётся портом.
Надо что бы напряжение росло с 0В до 255В и программа останавливалась.
- Вложения
-
- .JPG
- (11.21 КБ) 450 скачиваний
MDamir писал(а):Напряжение растёт с 0В до 255В
Я не Сашок!!!
- Реклама
- Сообщения: 21
- Зарегистрирован: Пн май 04, 2009 10:41:17
ну сделайте 255 ВОЛЬТ программно... Бред.
Если отмести это то кажется я понял что имелось ввиду
С порта выход на R2R должен делаться, или на другой параллельный цап
Если отмести это то кажется я понял что имелось ввиду
С порта выход на R2R должен делаться, или на другой параллельный цап
такой путаницы я еще нигде не видел!!! Автор, тот график напряжения, что вы привели тоже не понимаю. Если ступени идут по порядку 0,1,2,3,4,5..., т.е. ступень=1В, то почему на рисунке они у вас НЕОДИНАКОВОЙ длины???
Объясните НОРМАЛЬНО что вам нужно!!!
что значит частота задается портом????? каким портом то?
Объясните НОРМАЛЬНО что вам нужно!!!
что значит частота задается портом????? каким портом то?
- Сообщения: 21
- Зарегистрирован: Пн май 04, 2009 10:41:17
Может в программе надо сделать делитель на 255? Знал бы я- не писал бы сюда.
- Вложения
-
- . напр..JPG
- (10.06 КБ) 397 скачиваний
- Сообщения: 21
- Зарегистрирован: Пн май 04, 2009 10:41:17
Я писал задание. Задание звучит именно так- пуск и частота задаётся портом, сам точного представления этого не имею. Нарыл в интернето что то похожее. Посмотрите пожалуйста.ibiza11 писал(а): что значит частота задается портом????? каким портом то?
- Вложения
-
- 123.doc
- (117 КБ) 406 скачиваний
Ну не знаю: 5/255~0,02 получится ли такова точность. А алгоритм мной описан несколько постов выше должен заработать.
Я не Сашок!!!
Напряжение ступеньками (256штук) скачет от 0 до 5В. Схема и графики (на одном кусок осциллограммы крупно, на другом общая картина) во вложении..
Программа:
Программа:
Код: Выделить всё
/*****************************************************
CodeWizardAVR V1.25.9 Professional
Chip type : ATmega103
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 1000
*****************************************************/
#include <mega103>
#include <delay>
#define PUSK_PIN PINB&1 /*ножка порта для пуска*/
#define OUT_PORT(x) PORTE=x /*макрос установки выходного порта*/
#define IN_PORT PIND /*входной порт*/
unsigned char out; //переменная для выходного значения напряжения
unsigned char step_time; //длительность ступеньки, читаем с порта
unsigned char counter; //счетчик
unsigned char fl_change; //флаг, разрешающий изменение напряжения
// Обработчик переполнения таймера Т0
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
(counter==step_time)? (counter=0,fl_change=1):(counter++);
}
void main(void)
{
//--------------------------------ИНИЦИАЛИЗАЦИЯ ПЕРЕФИРИИ--------------------------//
// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=0 State3=T State2=T State1=T State0=P
PORTB=0x01;
DDRB=0x10;
// Port D initialization (НА ДАННОМ ПОРТЕ ЗАДАЕТСЯ ДЛИТЕЛЬНОСТЬ)
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTD=0xFF;
DDRD=0x00;
// Port E initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTE=0x00;
DDRE=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x01;
TCNT0=0x00;
OCR0=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
// Глобальное разрешение прерываний
#asm("sei")
for (;;) //MAIN_LOOP
{
if(!PUSK_PIN){//если нажата кнопка
if(fl_change) {//если разрешено изменение выхода
OUT_PORT(out);
out++;
step_time=IN_PORT;
fl_change=0;
}
}else{OUT_PORT(0);/*если не нажат пуск то выводим 0*/}
}
}
- Вложения
-
- sxem.jpg
- (186.18 КБ) 409 скачиваний
-
- step1.jpg
- (51.38 КБ) 419 скачиваний
-
- step2.jpg
- (74.31 КБ) 418 скачиваний
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- Сообщения: 21
- Зарегистрирован: Пн май 04, 2009 10:41:17
Только хотел сказать про Цифро Аналоговый Преобразователь R-2R, но Goodefine меня опередил.
А вообще, как можно что-то пытаться делать если нету вменяемого описания будущего устройства... И довольно редко на форумах бывает что за тебя пишут программу, так как восновном тут спрашуют про непонятные куски кода...
А вообще, как можно что-то пытаться делать если нету вменяемого описания будущего устройства... И довольно редко на форумах бывает что за тебя пишут программу, так как восновном тут спрашуют про непонятные куски кода...

- Сообщения: 21
- Зарегистрирован: Пн май 04, 2009 10:41:17
Переменная out увеличивается каждый раз (out++;) за цикл. Начальное значение ее равно нулю. Поскольку она имеет тип unsigned char, то ее диапазон от 0 до 255. Когда к 255 прибавим 1-цу, то получим снова 0-ль - таким образом, специально обнулять не требуется. Это по колхозному объяснилMDamir писал(а): пока вот не понял- как программа обнулится при достижении 256-ой ступени?
Верхняя граница определяется напряжением логической 1-цы микроконтроллера. Это и есть 5В (примерно), код здесь не причем...MDamir писал(а): И где прописано, что напряжение до 5В. Покажи часть кода пожалуйста.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- Сообщения: 21
- Зарегистрирован: Пн май 04, 2009 10:41:17


