Кто нибудь сможет помощь с кодом для реализации ШИМ на Attiny85, как будет выглядеть примерно. если вопрос звучит не правильно можете исправить :)
Могу скинуть исходник для ATmega8 на ассемблере или вам на Си надо?
Если ассемблер устроит, посмотрите эту ветку. Там есть ШИМ и для tiny26 и для mega8
http://radiokot.ru/forum/viewtopic.php?f=2&t=26785&start=120
Могу скинуть исходник для ATmega8 на ассемблере или вам на Си надо?
а и тот и другой сможете скинуть? и еще, частоту ШИМ можно будет получить в пределах 100-1000кГц
Вот исходник на Си под 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);
};
}
Спасиб