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

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

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

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

Кто нибудь сможет помощь с кодом для реализации ШИМ на Attiny85, как будет выглядеть примерно. если вопрос звучит не правильно можете исправить :)

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

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

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

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

akl
Сообщения: 144
Зарегистрирован: 21 дек 2008, 07:27
Откуда: Ижевск
Контактная информация:

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

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

Если ассемблер устроит, посмотрите эту ветку. Там есть ШИМ и для tiny26 и для mega8
http://radiokot.ru/forum/viewtopic.php? ... &start=120

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

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

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

Radioded писал(а):Могу скинуть исходник для ATmega8 на ассемблере или вам на Си надо?
а и тот и другой сможете скинуть? и еще, частоту ШИМ можно будет получить в пределах 100-1000кГц

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

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);
	};
}

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

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

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

Спасиб

Ответить

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость