Пытаясь подключить LCD OSD070TN84 к ICnova-AP7000-Base столкнулся со следующей проблемой: выход LCD_CC процессора AP7000 формирует PWM сигнал управления яркостью дисплея с опорной частотой ~ 68 kHz, а для дисплея требуется частота PWM от 100 до 300 Hz. Не долго думая применил ATtiny13 в качестве конвертера.

На входе имеем сигналы LCD_CC — управление яркостью и LCD_PWR выключение подсветки.

Подключение:

ATtiny13
ICnova_LCD_CC PB2
ICnova_LCD_PWR PB4
LCD_PWM PB0
MOSFET PB3

#include <avr/io.h>
#include <avr/interrupt.h>

SIGNAL(TIM0_OVF_vect){

}

int main(void)
{

unsigned int  iTemp;
unsigned char iCount;

// Set ADMUX Channel
ADMUX=0x01;

// Initial the ADC Circuit
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);

// Disable digital input on ADC1
DIDR0 = 0x02;

DDRB = (1<<PB0)|(1<<PB1)|(1<<PB3); // оба выхода ШИМ

// timer setup
TCCR0A = 0b10110011; // Fast-PWM, выходы А и В в противофазе
TCCR0B = 0b00000011; // без делителm 1024

// настройка прерываний
TIMSK0 = (1<<TOIE0); // по переполнению таймера

asm volatile("sei"::);//Enable interrupts

for(;;)
{

// Start conversion by setting ADSC on ADCSRA Register
ADCSRA |= (1<<ADSC);

// wait until convertion complete ADSC=0 -> Complete
while (ADCSRA & (1<<ADSC));

// Get First ADC Result
iTemp = ADCW;

// Start conversion by setting ADSC on ADCSRA Register
ADCSRA |= (1<<ADSC);

// wait until convertion complete ADSC=0 -> Complete
while (ADCSRA & (1<<ADSC));

// Get Second ADC Result
iTemp += ADCW;

// Start conversion by setting ADSC on ADCSRA Register
ADCSRA |= (1<<ADSC);

// wait until convertion complete ADSC=0 -> Complete
while (ADCSRA & (1<<ADSC));

// Get the Final ADC Result
iTemp += ADCW;

// ADC = (Vin x 1024) / Vref, Vref = 5 Volt
// Calculate the average value for 3 ADC samples result
iTemp = (int)(iTemp/3);

if( iTemp>675) iCount = 255; else iCount=(unsigned char)(iTemp * 100 / 264);

if( (PINB & (1<<PB4))==0 )

{
OCR0A = iCount;
OCR0B = iCount;
PORTB &= ~(1<<PB3);
} else
{
OCR0A = 0;
OCR0B = 0;
PORTB |= (1<<PB3);
}

}

return 0;

}

Краткое пояснение. ATtiny13 сконфигурирована для работы от внутреннего генератора, предделитель для таймера установлен в 1024. При данных параметрах опорная частота PWM составила 280 Hz.
Так как под руками была только ATtiny13 на 5 вольт (на 3.3 работала не стабильно, не всегда стартовала), они же используются как опорные для ADC.

На вход Attyny13 через RC цепочку поступает сигнал LCD_CC, который измеряется ADC в Attiny13 и преобразуется в PWM на выходе PB0. Максимальное входное напряжение на входе равно 3.3 вольта, получаем 1024 / 5 * 3.3 = 675, далее преобразуем его в % где 3.3 вольта это 100% — PWM iCount=(unsigned char)(iTemp * 100 / 264);

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 
   
© 2011 ADTL Blog Suffusion theme by Sayontan Sinha