ATtiny85 как реализовать ШИМ

по МК и не только

ATtiny85 как реализовать ШИМ

Сообщение Алмаз » 25 мар 2010, 13:32

Кто нибудь сможет помощь с кодом для реализации ШИМ на Attiny85, как будет выглядеть примерно. если вопрос звучит не правильно можете исправить :)
Алмаз
 
Сообщения: 9
Зарегистрирован: 09 мар 2010, 19:36
Откуда: Уфа

Re: ATtiny85 как реализовать ШИМ

Сообщение Radioded » 25 мар 2010, 18:58

Могу скинуть исходник для ATmega8 на ассемблере или вам на Си надо?
Аватара пользователя
Radioded
Site Admin
 
Сообщения: 180
Зарегистрирован: 07 ноя 2008, 02:47
Откуда: Москва

Re: ATtiny85 как реализовать ШИМ

Сообщение akl » 25 мар 2010, 20:11

Если ассемблер устроит, посмотрите эту ветку. Там есть ШИМ и для tiny26 и для mega8
http://radiokot.ru/forum/viewtopic.php? ... &start=120
akl
 
Сообщения: 143
Зарегистрирован: 21 дек 2008, 07:27
Откуда: Ижевск

Re: ATtiny85 как реализовать ШИМ

Сообщение Алмаз » 25 мар 2010, 20:25

Radioded писал(а):Могу скинуть исходник для ATmega8 на ассемблере или вам на Си надо?


а и тот и другой сможете скинуть? и еще, частоту ШИМ можно будет получить в пределах 100-1000кГц
Алмаз
 
Сообщения: 9
Зарегистрирован: 09 мар 2010, 19:36
Откуда: Уфа

Re: ATtiny85 как реализовать ШИМ

Сообщение Radioded » 25 мар 2010, 20:36

Вот исходник на Си под WinAVR. Насколько я помню, микроконтроллер оцифровывал аналаговое напряжение на одном из входов и в зависимости от этого выдавал ШИМ-сигнал. Пример реализации ШИМ на микроконтроллере ATmega8:
Код: Выделить всё
// ATMEGA8 1MHZ; Fast PWM & ADC

#include <avr/io.h>
#include <util/delay.h>

unsigned char x;

void init(void){
   ADCSR = 0b10000011;         // Вкл. Ацп, Однокр. преобр., Прерывание запрещено
   ADMUX = 0b01000000;         // AVcc, Внеш. конд. на Aref, Выравн. по лев. краю
 
   PORTB = 0x00;
   DDRB = 0b00000010;         // PortB.1 (OC1A) - Output
   DDRC = 0x00;            // inputs
   
   TCCR1A = 0b10000011;      // неинв. 10 битный ШИМ
   TCCR1B = 0b00001010;      // CK/8
   TIMSK = 0x00;
   
   return 0;
}

int adc_convert(char channel){
   char temp, temp2;
   int result, result2;
   
   ADMUX = channel;                 // выбор канала
   ADCSR = ADCSR | 0b01000000;      // Start Convertion
   
   while ((ADCSR && 0b01000000) != 1){         // wait until converting
   };

   temp = ADCL;            // просто формальность (первым всегда читается ADCL)
   temp2 = ADCH;            //

   result = (int)temp;
   result2 = (int)temp2;
   result2 = ( result2 << 8 );
   result = (result | result2 );

   return result;
}

void pwm_out(int level){
   OCR1A = level;
   return 0;
}

int main(void){
   init();
   while(1){
       x = adc_convert(0b01000101);      // PC.5 -input
       pwm_out(x);
   };
}
Аватара пользователя
Radioded
Site Admin
 
Сообщения: 180
Зарегистрирован: 07 ноя 2008, 02:47
Откуда: Москва

Re: ATtiny85 как реализовать ШИМ

Сообщение Алмаз » 25 мар 2010, 21:01

Спасиб
Алмаз
 
Сообщения: 9
Зарегистрирован: 09 мар 2010, 19:36
Откуда: Уфа


Вернуться в Общие вопросы



Кто сейчас на конференции

Зарегистрированные пользователи: Yahoo [Bot]