Помогите с AVR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Ну уж если Вы спрашиваете зачем там ШИМ товам не сюда нужно обращатся, а в кружок радио електроники... Посмотрите что стоит на порте где регулируется нипряжение. Не замечаете конденсатор и резистор?
Я не Сашок!!!
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн май 04, 2009 10:41:17

Сообщение MDamir »

Ещё раз говорю, нам про ШИМ ничего не рассказывали на лекциях. Мы ведь делаем иммитацию программирования, возможно нам не важно есть там ШИМ или нет. Главное, что бы программа была правильной, без ШИМ...
И вообще там где резистор и конденсатор- напряжение не регулируется, это порт выхода...
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

MDamir , вы уже определитесь, что вам конкретно надо:
получить на выходе постоянное напряжение, амплитуда которого ступенчато регулируется приемным портом, или напряжение состоящее из 256 ступенек регулируемой длительности? Если второе, то в каком диапазоне должна регулироваться длительность, как должно себя вести после достижения верхней ступеньки - по ступенькам спадать вниз до нуля или сразу с нуля начинаться?
Нарисуйте нормальный рисунок напряжения за полный период (надеюсь, знаете что такое ПЕРИОД) напряжения, обозначьте на нем что и как должно регулироваться. Иначе испорченный телефон получается...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн май 04, 2009 10:41:17

Сообщение MDamir »

Пришлось прибегнуть к Пеинту))
Напряжение растёт с 0В до 255В, т.к. 1 ступень 0В- ступенек будет 256 (N=256). Горизонтальная часть ступенек, т.е. сколько будет длиться импульс напряжение- как я понял это частота повторения, она константа, задаётся портом.
Надо что бы напряжение росло с 0В до 255В и программа останавливалась.
Вложения
.JPG
(11.21 КБ) 451 скачивание
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

MDamir писал(а):Напряжение растёт с 0В до 255В
:shock: :shock: :shock: Ничево себе!!! Да тут одной програмкой на МК не отделаешся. Если же мудрить с ШИМом то портом нужно утанавливать значение регистров TCNT, потом наверное делать прерывание в котором увеличивать OCR. Ну в принципе тоже что уже было представлено. Вот только 255В это уже нужно аппаратно делать.
Я не Сашок!!!
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн май 04, 2009 10:41:17

Сообщение MDamir »

почему аппаратно? ввести бесконечно цикл, как в первом посте данной темы, и чтоб он сравнивал количество импульсов напряжения с числом 255 и стоп программа.получится как цикл в цикле
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн май 04, 2009 10:41:17

Сообщение MDamir »

Посмотрите вот этот алгоритм, сделанный по программе предоставленной мной. Цикл в цикле. Может всё таки правильная программа? )
Вложения
.JPG
(24.65 КБ) 428 скачиваний
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

ну сделайте 255 ВОЛЬТ программно... Бред.
Если отмести это то кажется я понял что имелось ввиду :idea:
С порта выход на R2R должен делаться, или на другой параллельный цап
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

такой путаницы я еще нигде не видел!!! Автор, тот график напряжения, что вы привели тоже не понимаю. Если ступени идут по порядку 0,1,2,3,4,5..., т.е. ступень=1В, то почему на рисунке они у вас НЕОДИНАКОВОЙ длины???
Объясните НОРМАЛЬНО что вам нужно!!!
что значит частота задается портом????? каким портом то?
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн май 04, 2009 10:41:17

Сообщение MDamir »

Может в программе надо сделать делитель на 255? Знал бы я- не писал бы сюда.
Вложения
. напр..JPG
(10.06 КБ) 398 скачиваний
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн май 04, 2009 10:41:17

Сообщение MDamir »

ibiza11 писал(а): что значит частота задается портом????? каким портом то?
Я писал задание. Задание звучит именно так- пуск и частота задаётся портом, сам точного представления этого не имею. Нарыл в интернето что то похожее. Посмотрите пожалуйста.
Вложения
123.doc
(117 КБ) 407 скачиваний
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Ну не знаю: 5/255~0,02 получится ли такова точность. А алгоритм мной описан несколько постов выше должен заработать.
Я не Сашок!!!
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Напряжение ступеньками (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 КБ) 410 скачиваний
step1.jpg
(51.38 КБ) 420 скачиваний
step2.jpg
(74.31 КБ) 419 скачиваний
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн май 04, 2009 10:41:17

Сообщение MDamir »

Вроде бы это то что надо, щас буду обмозговывать... Огромное спасибо. позже отпишусь.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Только хотел сказать про Цифро Аналоговый Преобразователь R-2R, но Goodefine меня опередил.
А вообще, как можно что-то пытаться делать если нету вменяемого описания будущего устройства... И довольно редко на форумах бывает что за тебя пишут программу, так как восновном тут спрашуют про непонятные куски кода...
Изображение
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн май 04, 2009 10:41:17

Сообщение MDamir »

Мозгую прогу и радуюсь, есть же хорошие люди на форуме, хорошие специалисты. Щас ещё помозгую, сдаю в четверг, отпишусь.

Goodefine, пока вот не понял- как программа обнулится при достижении 256-ой ступени? И где прописано, что напряжение до 5В. Покажи часть кода пожалуйста.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

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

Сообщение MDamir »

так-то вроде понял... Спасибо! буду сдавать ее. о результатах отпишусь...
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Все понятно? И с прерыванием от таймера? И как ЦАП работает? Тогда дерзайте :)
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

:) оперативно сработал Goodefine. после просмотра приведенной схемы все встало на свои места (насчет порта, задающего частоту)))
MDamir, с вас банка сметаны для Goodefine, за понимание и скорость)))
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»