soodi
14-03-2012, 22:12
با سلام
من می خواهم واحد PWM رو در میکروکنترلر AT91SAM7X256 فعال کنم و در کنترل نور یک LED یا سرعت یک موتور یا اعمال به L298 یا ... استفاده کنم
دیتاشیت رو مطالعه کردم و جدول زیر که مربوط به رجیستر ها است رو در زیر آپلود کردم ، 8 تا رجیستر اول که مربوط به فعال یا غیر فعال کردن PWM و وقفه داخلی می باشد ولی رجیستر های بعدی رو اگر لطف فرمایید و توضیح دهید خیلی خیلی ممنون میشوم
توی Bascom-AVR یک مقدار رو داخل PWM قرار می دادم و نور LED یا سرعت موتور نسبت به این مقدار تغییر می کردم ولی حالا توی ARM و Keil چطوریه ؟
تا جایی که فهمیدم ، پایه ای رو که می خواهیم PWM رو روی آن فعال کنید باید ابتدا واحد PIO روی پایه رو غیر فعال کنید و سپس حالت Multi-Driver رو فعال می کنیم تا تمامی امکانات روی پایه از قبیل مقاومت Pull-Up یا ... غیر فعال شود و سپس رجیستر واحد همزمان سازی داده ها روی پورت های مختلف رو فعال می کنیم
لطفا من رو کمک و راهنمایی فرمایید
You can see links before reply
با سپاس
__________________________________________________ ________________________
سلام
دوستان کسی نیست این PWM رو به زبون ساده برای ما بگه ؟؟؟ حق الزحمت رو هم میدم
2 تا کتاب ARM دیگه هم خریدم و قسمت PWM رو خوندم ولی باز هم چیزی دستگیرم نشد ، یعنی یه چیزهایی فهمیدم ولی نمیدونم چرا جواب نمیگیرم ، خدایا دیگه دارم دیوانه میشم ، به خدا اگر یه نفر یه طوری این PWM رو برای من بگه که یاد بگیرم و بتونم یه LED رو نورش رو کنترل کنم یا سروو موتور رو روشن کنم ، با پیغام خصوصی با هم حساب میکنیم
الان این برنامه منه ولی هیچی به هیچی :
#include <AT91SAM7X256.h>
#include <lib_AT91SAM7X256.h>
#include <delay.h>
#define LCD_PORT_B
#define LCD_RS 20
#define LCD_E 21
#define LCD_DB4 22
#define LCD_DB5 23
#define LCD_DB6 24
#define LCD_DB7 25
#include <lcd.h>
int main (void)
{
int A;
A=0;
AT91C_BASE_PIOA->PIO_PDR=100000;
AT91C_BASE_PIOA->PIO_ASR=100000;
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PWMC);
AT91C_BASE_PWMC->PWMC_DIS=0xF;
AT91C_BASE_PWMC->PWMC_MR=0;
AT91C_BASE_PWMC_CH0->PWMC_CMR=(0x208);
AT91C_BASE_PWMC_CH0->PWMC_CPRDR=150;
AT91C_BASE_PWMC_CH0->PWMC_CDTYR=A;
AT91C_BASE_PWMC->PWMC_ENA=0x1;
lcd_init();
while(1)
{
AT91C_BASE_PWMC_CH0->PWMC_CDTYR=A;
cursor_off();
lcd_clear();
lcd_gotoxy(1,1);
lcd_puts(AT91C_BASE_PWMC_CH0->PWMC_CDTYR);
A++;
delay_ms(50);
}
}
ممنون
من می خواهم واحد PWM رو در میکروکنترلر AT91SAM7X256 فعال کنم و در کنترل نور یک LED یا سرعت یک موتور یا اعمال به L298 یا ... استفاده کنم
دیتاشیت رو مطالعه کردم و جدول زیر که مربوط به رجیستر ها است رو در زیر آپلود کردم ، 8 تا رجیستر اول که مربوط به فعال یا غیر فعال کردن PWM و وقفه داخلی می باشد ولی رجیستر های بعدی رو اگر لطف فرمایید و توضیح دهید خیلی خیلی ممنون میشوم
توی Bascom-AVR یک مقدار رو داخل PWM قرار می دادم و نور LED یا سرعت موتور نسبت به این مقدار تغییر می کردم ولی حالا توی ARM و Keil چطوریه ؟
تا جایی که فهمیدم ، پایه ای رو که می خواهیم PWM رو روی آن فعال کنید باید ابتدا واحد PIO روی پایه رو غیر فعال کنید و سپس حالت Multi-Driver رو فعال می کنیم تا تمامی امکانات روی پایه از قبیل مقاومت Pull-Up یا ... غیر فعال شود و سپس رجیستر واحد همزمان سازی داده ها روی پورت های مختلف رو فعال می کنیم
لطفا من رو کمک و راهنمایی فرمایید
You can see links before reply
با سپاس
__________________________________________________ ________________________
سلام
دوستان کسی نیست این PWM رو به زبون ساده برای ما بگه ؟؟؟ حق الزحمت رو هم میدم
2 تا کتاب ARM دیگه هم خریدم و قسمت PWM رو خوندم ولی باز هم چیزی دستگیرم نشد ، یعنی یه چیزهایی فهمیدم ولی نمیدونم چرا جواب نمیگیرم ، خدایا دیگه دارم دیوانه میشم ، به خدا اگر یه نفر یه طوری این PWM رو برای من بگه که یاد بگیرم و بتونم یه LED رو نورش رو کنترل کنم یا سروو موتور رو روشن کنم ، با پیغام خصوصی با هم حساب میکنیم
الان این برنامه منه ولی هیچی به هیچی :
#include <AT91SAM7X256.h>
#include <lib_AT91SAM7X256.h>
#include <delay.h>
#define LCD_PORT_B
#define LCD_RS 20
#define LCD_E 21
#define LCD_DB4 22
#define LCD_DB5 23
#define LCD_DB6 24
#define LCD_DB7 25
#include <lcd.h>
int main (void)
{
int A;
A=0;
AT91C_BASE_PIOA->PIO_PDR=100000;
AT91C_BASE_PIOA->PIO_ASR=100000;
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PWMC);
AT91C_BASE_PWMC->PWMC_DIS=0xF;
AT91C_BASE_PWMC->PWMC_MR=0;
AT91C_BASE_PWMC_CH0->PWMC_CMR=(0x208);
AT91C_BASE_PWMC_CH0->PWMC_CPRDR=150;
AT91C_BASE_PWMC_CH0->PWMC_CDTYR=A;
AT91C_BASE_PWMC->PWMC_ENA=0x1;
lcd_init();
while(1)
{
AT91C_BASE_PWMC_CH0->PWMC_CDTYR=A;
cursor_off();
lcd_clear();
lcd_gotoxy(1,1);
lcd_puts(AT91C_BASE_PWMC_CH0->PWMC_CDTYR);
A++;
delay_ms(50);
}
}
ممنون