لایه های EAGLE
برای پرینت گرفتن از کار تو نرم افزار EAGLE لایه هایی که لازم نیستند را از طریق پنجره تنظیمات غیر فعال نمایید.
و یا خروجی را به آلتیوم دیزاینر تبدیل کنید و از FILE--->FABRICATION OUTPUT----->FAINAL از فایل خروجی بگیرید.
برای پرینت گرفتن از کار تو نرم افزار EAGLE لایه هایی که لازم نیستند را از طریق پنجره تنظیمات غیر فعال نمایید.
و یا خروجی را به آلتیوم دیزاینر تبدیل کنید و از FILE--->FABRICATION OUTPUT----->FAINAL از فایل خروجی بگیرید.
واحد کپچر تایمر در ATXMEGA
در میکروهای ATX به لطف واحد EVENT SYSTEM ورودی تحریک کپچر کردن میتونه از هر پایه ای که لازم داشته باشیم گرفته بشه یا حتی از واحد های سخت افزاری داخل میکرو (ADC,AC,...) و یا به صورت نرم افزاری.
اگر میخواهید از یک پایه به عنوان ورودی تحریک کپچر کردن استفاده کنید:
1- باید حالت تشخیص لبه برای اون پایه تعریف بشه.
2- پایه مورد نظر به عنوان یکی از کانال های EVENT SYSTEM تعریف بشه.
3- تایمر مورد نظر در حالت NORMAL باشه و یکی از کانال های کپچر فعال بشه.
4- کانال EVENT SYSTEM برای ورودی تایمر و عملیاتی که باید انجام شود، تعریف شود.
5- فعال سازی وقفه کپچر
6- تنظیم پری اسکیلر تایمر
EXAMPLE:
PORTD.DIRCLR = PIN7_bm;
PORTD.PIN7CTRL = PORT_OPC_PULLDOWN_gc | PORT_ISC_BOTHEDGES_gc;
EVSYS.CH0MUX = EVSYS_CHMUX_PORTD_PIN7_gc;
EVSYS.CH0CTRL = EVSYS_DIGFILT_1SAMPLE_gc;
TCC0.CTRLB = TC_WGMODE_NORMAL_gc | TC0_CCAEN_bm;
TCC0.CTRLD = TC_EVACT_CAPT_gc | TC_EVSEL_CH0_gc;
TCC0.INTCTRLB = TC0_CCAINTLVL_gm;
TCC0.CTRLA = TC_CLKSEL_DIV64_gc;
مهمترین نکته در خواندن کدهای ریموت این است که ابتدای کد (شروع کد) را به درستی پیدا کنید که البته آن هم بستگی به روش خواندن بیت های خروجی گیرنده دارد.
اگر تو نت سرچ کرده باشید دوبرنامه برای خواندن کدهای خروجی پیدا میکنید. من که از هیچ کدوم جواب نگرفتم. یکی با دوتا تایمر و یک وقفه خارجی نوشته بود و یکی هم با یک تایمر و یک وقفه خارجی.
به نظر من بهترین روش برای خواندن بیتهای خروجی استفاده از تایمر در مدکپچر هستش، خودم برنامه را به این روش نوشتم و جواب هم گرفتم.
صفر یا یک بودن هر بیت از نسبت صفر به یک، بودن مدت زمان پایه خروجی گیرنده تعیین می شود.
برنامه خواندن کدهای RC5:
typedef union
{
uint16_t raw;
struct
{
unsigned cmd : 6; // LSB
unsigned addr : 5;
unsigned toggle : 1;
unsigned start : 2;
unsigned : 2; // MSB
};
} rc5data;
static volatile int flag = 0;
static volatile rc5data data;
void init_int0()
{
// Interrupt on INT0 pin going low
MCUCR = (1 << ISC01);
//EICRA = (1<<ISC01); //mcu = at90can128
// Turn on INT0!
GICR = (1 << INT0);
//EIMSK |= (1 << INT0); //MCU = at90can128
}
SIGNAL (INT0_vect)
{
int pos = 0;
if (!flag)
{
data.raw = 0;
// triggers on falling edge of start bit 1.
_delay_us(200);
while (pos < 14)
{
data.raw = (data.raw << 1) | ((~PIND & 0x04) >> 2);
_delay_us(1800);
pos++;
}
flag = 1;
}
}