roboforum.ru

Технический форум по робототехнике.

МикроКонтроллер AVR начинающим - общие вопросы

avr123.nm.ru » 27 май 2007, 13:00

да, можно с помощью ШИМ - avr123.nm.ru/z8.htm

Можно сделать цикл (avr123.nm.ru/05.htm) и в нем постепенно менять величину ШИМ.

Ignac » 27 май 2007, 15:49

Я эту стрницу уже перечитал несколько раз  но мне наверно не доходит!
мне нужно вводить в реальную схему ФНЧ ? В примерах частота 7.37 а у меня тактовая 1мГц мне тоже ее изменять?

avr123.nm.ru » 27 май 2007, 15:52

Для светодиода ФНЧ не нужен. Частоту можно и 1 МГц оставить. Но я советую вам взять мой пример и добавить только цикл изменения величины ШИМ.  Когда разберетесь как работает то будете модифицировать понимая что делаете.

Ignac » 27 май 2007, 15:58

изменения величины ШИМ
А каким параметром она задается?

avr123.nm.ru » 27 май 2007, 15:58

  http://avr123.nm.ru/z8.htm

Изменить величину генерируемого ШИМ можно так:

Вычислите новое значение из диапазона 0 - 1023 для записи в   OCR1A  
и запишите вот такими строками программы:

Код: Выделить всёРазвернуть
// pwm_val - это число от 0 до 1023
// PWM(PD5) = OCR1A / 10.23  (%)
OCR1AH = (char)(pwm_val>>8);
OCR1AL = (char)pwm_val;

       
После выполнения этого участка программы  на ножку PD5 начнет
выводится ШИМ сигнал величиной (pwm_val/10.23) в процентах.


Чтобы светодиод загорался за 1 секунду вы можете в цикле
увеличивать значение pwm_val на 10 каждые 10 мС например.

======

Курс расчитан конечно на чтение с начала а не с задачи 8   :lol:

Ignac » 27 май 2007, 16:08

Код: Выделить всёРазвернуть
#include <tiny2313.h>

// Declare your global variables here

void main(void)
{
 // Declare your local variables here

 // Crystal Oscillator division factor: 1
 #pragma optsize-
   CLKPR=0x80;
   CLKPR=0x00;
 #ifdef _OPTIMIZE_SIZE_
 #pragma optsize+
 #endif

 // Input/Output Ports initialization
 // Port A initialization
 // Func2=In Func1=In Func0=In
 // State2=T State1=T State0=T
 PORTA=0x00;
 DDRA=0x00;

 // Port B initialization
 // Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=In Func1=Out Func0=Out
 // State7=T State6=T State5=T State4=0 State3=0 State2=T State1=0 State0=0
 PORTB=0x00;
 DDRB=0x1B;

 // Port D initialization
 // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
 // State6=T State5=T State4=T State3=T State2=T State1=T State0=T
 PORTD=0x00;
 DDRD=0x00;

 // Timer/Counter 0 initialization
 // Clock source: System Clock
 // Clock value: Timer 0 Stopped
 // Mode: Normal top=FFh
 // OC0A output: Disconnected
 // OC0B output: Disconnected
 TCCR0A=0x00;
 TCCR0B=0x00;
 TCNT0=0x00;
 OCR0A=0x00;
 OCR0B=0x00;

 // Timer/Counter 1 initialization
 // Clock source: System Clock
 // Clock value: 1000,000 kHz
 // Mode: Fast PWM top=03FFh
 // OC1A output: Non-Inv.
 // OC1B output: Non-Inv.
 // Noise Canceler: Off
 // Input Capture on Falling Edge
 // Timer 1 Overflow Interrupt: Off
 // Input Capture Interrupt: Off
 // Compare A Match Interrupt: Off
 // Compare B Match Interrupt: Off
 TCCR1A=0xA3;
 TCCR1B=0x09;
 TCNT1H=0x00;
 TCNT1L=0x00;
 ICR1H=0x00;
 ICR1L=0x00;
 OCR1AH=0x00;
 OCR1AL=0x00;
 OCR1BH=0x00;
 OCR1BL=0x00;


 while (1)
 {
   // Place your code here

 };
}


Цените труд отвечающих, форматируйте исходные коды! и обязательно заключайте их в тег [code ][/code ]
За исходный код не заключенные в тег CODE буду штрафовать <V>

Ignac » 27 май 2007, 16:12

Я курс перечитал уже несколько раз и благодаря ему я вообще хоть чтото стал понимать
в МК и СИ . А задача 8 подходит к тому что я начал реализовывать в железе.
Вот так.

Советую сначало разобраться в основах си, а уже потом лезть в мк-огород :)
потренеруйтесь сначало на комьпьютере, напишите что-нибудь простое, обязательно повозитесь со строками,
вникните в суть указателей, иначе так и будут сплошные грабли вылезать <V>

avr123.nm.ru » 27 май 2007, 16:28

в цикле

Код: Выделить всёРазвернуть
while (1) 
    {
    // Place your code here

    };


Делайте о чем я писал выше.  Изменение ШИМ, пауза ...  и так по кругу  при превышении максимума - обнуление ШИМ и новое плавное зажигание.

Ignac » 28 май 2007, 00:46

Возник вопрос? Какой режим РWM лучше использовать Phase Corect  или Fast  и какие установки?

avr123.nm.ru » 28 май 2007, 04:24

Лучше по каким критериям?  Установки мастер компилятора делает.

Master » 06 июн 2007, 17:36

Мне нужно вывести на 2 ножки сигнал с частотой от 0 до 500кГц причем чтобы он был в противофазе т. е. если PORTB.0=0, то PORTB.1=1. Можно ли это организовать с помощью ШИМ Mega16?
А то вариант:

PORTB.0=0;
PORTB.1=1;
delay_ms(x);
PORTB.0=1;
PORTB.1=0;
delay_ms(x);

не очень подходит.

Master » 07 июн 2007, 23:05

Че нихто не знает?

Myp » 07 июн 2007, 23:16

ну...
вот вам моя мысль
я не 123авр но тоже советовать люблю

мб сделать 2 шима?
1 вариант: второй шим будет работать по прерыванию от первого...
2 вариант: оба шима по одному таймеру но один шим пусть будет с инверсным выходом(блин в курсе написано про инверсный шим а так не помню)

Master » 08 июн 2007, 00:47

Да но ШИМ не дает возможности регулировать частоту, а только скважность. А может просто задействовать таймер по прерыванию, это кажись идея.

Chooze » 08 июн 2007, 13:52

Тут фишка!!! Начал семку мастрячить в протеусе - нашёл модель ммс карты но она просит образ как его сделать этот образ для неё??? Может кто работал с ммс в протеусе подскажите!!! :(


Rambler\'s Top100 Mail.ru counter