Всем доброго времени суток!
Начинаю работать с микроконтроллерами. Первое с чем я столкнулся это микроконтроллер AduC 812 (ядро Intel MCS51).
Есть не большая программа, которая производит формирование линейно нарастающего напряжения на выходе ЦАП0, преобразование входного напряжения на 0-канале АЦП, а также передачу полученной информации по интерфейсу RS-232. Мне необходимо дополнить ее так, что бы получился ШИМ-генератор в зависимости от напряжения на входе АЦП (период 1кГц).
Вот код имеющейся программы:
# Include <ADuC812.h>
# Include <stdio.h>
# Include "ADC.h"
# Include "DAC.h"
# Include "max.h"
# Include "vect.h"
float in, out;
unsigned int i;
void INT_T0 (void) interrupt 1
{
out = out + 0.1;
if (out> = 5) out = 0;
SetVoltage (out, 0);
TR1 = 1;
}
void INT_T1 (void) interrupt 3
{
in = GetVoltage (0);
printf ("DAC0 =% f", out); /
printf (": ADC0 =% f \ n", in);
TR1 = 0;
TF1 = 0;
TH1 = 0;
TL1 = 0;
}
void main (void)
{
//----------- Set UART ---------------
SCON = 0x40;
REN = 1;
/ / timer 2 ------
RCLK = 1;
TCLK = 1,
RCAP2L = 0xDC;
RCAP2H = 0xFF;
TR2 = 1
ES = 0,
TI = 1; RI = 1;
EA = 0;
//------------------------------------------
EA = 1;
ET0 = 1;
ET1 = 1;
TMOD = 0x00010101;
TR0 = 1;
SetVect (1, INT_T0);
SetVect (3, INT_T1);
SwitchDAC (0,1);
InitDAC (0);
SetVoltage (5,0);
InitADC ();
while (1)
{}
}
Очень нужна помощь!
Заранее всем спасибо!
ШИМ-генератор для ADuC812
- Реклама
Re: ШИМ-генератор для ADuC812
Приветствую, пушистый..
Си для 51-х вообще не знаю, а насчёт ШИМа скажу:
Для реализации ШИМ, те нужно настроить один из внутренних таймеров на частоту 1кГц*bitsPWM, где bitsPWM - максимальное значение ШИМа..
Т.е. для 8-ми битного ШИМа частота прерывания от таймера должна быть 256кГц..
Си для 51-х вообще не знаю, а насчёт ШИМа скажу:
Для реализации ШИМ, те нужно настроить один из внутренних таймеров на частоту 1кГц*bitsPWM, где bitsPWM - максимальное значение ШИМа..
Т.е. для 8-ми битного ШИМа частота прерывания от таймера должна быть 256кГц..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Re: ШИМ-генератор для ADuC812
Спасибо за подсказку! сделал следующим образом:
unsigned char pwm_width;
bit PWMPIN;
bit pwm_flag = 0;
void pwm_setup(){
TMOD = 0;
pwm_width = out;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void timer0() interrupt 1 {
if(!pwm_flag) {
pwm_flag = 1;
PWMPIN = 1;
TH0 = pwm_width;
TF0 = 0;
return;
}
else {
pwm_flag = 0;
PWMPIN = 0;
TH0 = 255 - pwm_width;
TF0 = 0;
return;
}
}
не знаю на сколько правильно! на данный момент не имею под рукой оборудования! и никто не может проверить и сказать где ошибки!
unsigned char pwm_width;
bit PWMPIN;
bit pwm_flag = 0;
void pwm_setup(){
TMOD = 0;
pwm_width = out;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void timer0() interrupt 1 {
if(!pwm_flag) {
pwm_flag = 1;
PWMPIN = 1;
TH0 = pwm_width;
TF0 = 0;
return;
}
else {
pwm_flag = 0;
PWMPIN = 0;
TH0 = 255 - pwm_width;
TF0 = 0;
return;
}
}
не знаю на сколько правильно! на данный момент не имею под рукой оборудования! и никто не может проверить и сказать где ошибки!
