سلام دوستان . من آموزش میکروکنترلر 1768 رو از سایتتون خریدم . دستتون درد نکنه .خیلی خوب بود و کاربردی (شاید بهتر از این نمیشد دیگه). اما من یه مشکل توش دارم . تو قسمت cmsis چند مورد مهم توش گفته نشده و منم هر چی گشتم گیرم نیومد.
اولین مشکل من اینه که وقتی از تایمر به عنوان شمارنده استفاده میشه ، نمی دونم که چطوری باید با دستورات cmsis تعیین کنم که کدوم یکی از پایه های capture به عنوان ورودی پالس میکرو انتخاب بشن . من برای این کار رجیستر ctcr رو دستی تنظیم می کنم (مشکلم حل میشه )اما من می خوام با استفاده از دستورات cmsis این کار رو انجام بدم.
دومین مشکلم هم اینه که تو مد کانتر نمیشه با دستوراتی که برای تایمر دادید prescaler رو تنظیم کرد.
سومیش هم اینه که مقدار تایمر رو بخوام دستی تغییر بدم یا مستقیم بخونم باید از چه دستوری استفاده کنم؟ من برای اینکار رجیستر tc رو میخونم و دست می زنم اما می خوام دستور cmsis اون رو بدونم .
فعلا همین 3 مشکل رو حل کنید ممنون می شم.
اینم نمونه کدمه
کد:
// created by neamatollah tahamtan
#include "lpc17xx_gpio.h"
#include "lpc17xx_adc.h"
#include "lpc17xx_pinsel.h"
#include "lpc17xx_libcfg_default.h"
#include <stdio.h>
#include "lpc17xx_timer.h"
void delay (uint32_t Time)
{
uint32_t i;
i = 0;
while (Time--) {
for (i = 0; i < 5000; i++);
}
}
// ****************************************************
int main (void)
{
PINSEL_CFG_Type PinCfg;
TIM_TIMERCFG_Type TIM_ConfigStruct;
TIM_CAPTURECFG_Type TIM_CaptureConfigStruct;
// ---------------- Configuration ---------------
//unsigned int s;
unsigned char p[16];
//uint32_t adc_value;
// set_PinFunc ( 0, 23, PINSEL_FUNC_1);
//lcd_init();
PinCfg.Funcnum = 3;
PinCfg.OpenDrain = 0;
PinCfg.Pinmode = 0;
PinCfg.Portnum = 1;
PinCfg.Pinnum = 27;
PINSEL_ConfigPin(&PinCfg);
// ---------------------------------------------------
// Initialize timer 0, prescale count time of 100uS
// TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_TICKVAL;
TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_USVAL;
TIM_ConfigStruct.PrescaleValue = 2;
TIM_Init(LPC_TIM0, TIM_COUNTER_RISING_MODE,&TIM_ConfigStruct);
//---------------------------------------------------------------
// use channel 0, CAPn.0
TIM_CaptureConfigStruct.CaptureChannel = 1;
// Enable capture on CAPn.0 rising edge
TIM_CaptureConfigStruct.RisingEdge = ENABLE;
// Enable capture on CAPn.0 falling edge
TIM_CaptureConfigStruct.FallingEdge = DISABLE;
// Generate capture interrupt
TIM_CaptureConfigStruct.IntOnCaption = DISABLE;
// Set configuration for Tim_config and Tim_MatchConfig
TIM_ConfigCapture(LPC_TIM0, &TIM_CaptureConfigStruct);
TIM_ResetCounter(LPC_TIM0);
//LPC_TIM0->TC=25;
// To start timer 0
TIM_Cmd(LPC_TIM0,ENABLE);
LPC_TIM0->CTCR=5;
lcd_init ();
lcd_clear ();
set_cursor (0, 0); //( column, line);
lcd_print ("HAMED TAHAMTAN");
delay(1000);
while (1)
{
// while (LPC_TIM0->TC <50);
//LPC_TIM0->TC =0;
sprintf(p," %i",LPC_TIM0->TC);
lcd_print(p);
delay(3000);
lcd_clear();
}
}
//lcd_clear();
//set_cursor(0,0);
//lcd_print("hamed tahamtn");
//sprintf(p," %i",s);
//lcd_print(p);
//delay(3000);
//lcd_clear();