یک دیتای 8 بیتی به طور مدام از پورت b بخواند و بررسی کند اگر عدد زوج است استیک پالس مربعی با فرکان 1 مگاهرتز و اگر فرد است فرکانس با 2 مگاهرتز باشد.
من توی خواندن یک مقدار از پورت مشکل دارم میشه راهنماییم کنید
یک دیتای 8 بیتی به طور مدام از پورت b بخواند و بررسی کند اگر عدد زوج است استیک پالس مربعی با فرکان 1 مگاهرتز و اگر فرد است فرکانس با 2 مگاهرتز باشد.
من توی خواندن یک مقدار از پورت مشکل دارم میشه راهنماییم کنید
سلام، اول اینکه میکرو atmega هست یا atxmega
دوم اینکه مشکل رو بیشتر توضیح بدید لطفا
atmega16
(یک دیتای 8 بیتی به طور مدام از پورت b بخواند) من اینجا مشکل دارم
دزست کردن فرکانس 2 مگا هرتز با avr فکر نکنم عملی باشه البته با دقت پایین فکر کنم بشه تا به حال این فرکانس رو امتحان نکردم
کامپایلر یا بهتره بگم ide که استفاده میکنی چی هست؟
تو کدویژن اینطوری باید بنویسی val=pinx که x همون پورت مورد نظر هست
روی atmega ایجاد این فرکانس فکر نمیکنم امکان پذیر باشه، البته با کلاک 16 مگاهرتز که سری های 16pu میتونن داشته باشن شاید، atxmega میتونه با کلاک 32 مگاهرتز کارکنه و میشه روی پین هاش به فرکانس بالا رسید، البته تقلب هم میشه کرد مثلا از کلاک spi استفاده کرد که روی atmega هم میشه به فرکانس بالا رسید.
- - - Updated - - -
کد:void MB_PortInit (void *Port,INT16U BaudRate,INT8U Parity,INT8U StopBit){ INT16U UBRR; (void)Port; /* Avoid compiler warning. Port is not used in ATMEGA. */ UBRR = ((CPU_FREQ/16) / BaudRate) - 1; UBRRH =UBRR>>8; UBRRL = UBRR; UCSRB |= 1 << RXEN; UCSRB |= 1 << TXEN; UCSRC = (1 << URSEL) | (Parity << UPM0) | (StopBit << USBS) | (3 << UCSZ0); SerialPort_DDR &= ~(1 << SerialPort_RXD); /* Set RXD to input */ SerialPort_DDR |= 1 << SerialPort_TXD; /* Set TXD to output */ SerialPort_DDR |= 1 << SerialPort_REN; /* Set REN to output */ SerialPort_DDR |= 1 << SerialPort_DEN; /* Set DEN to output */ SerialPort &= ~(1 << SerialPort_REN); /* Listen mode */ SerialPort &= ~(1 << SerialPort_DEN); /* Listen mode */ }
خب قبلش باید توی اون پورت یه چیزی باشه که بعد طبق گفته شما اونو بریزم توی val , اونو باید چیکار کنم؟
میشه این تیکه اولشو کد کاملش برام بنویسید . ( توی کدویژن)
با این کد حتما سریال پورت ATMEGA کار خواهد کرد، برای کد کامل به پست MODBUS for AVR مراجعه کنید و کد رو بگیرید.
- - - Updated - - -
http://www.iranmicro.ir/forum/14860-modbus-avr.html
خوب بهتر حالا با یه تایمر میتونی به راحتی به این فرکانس برسی
من اون کد رو دیدم ولی راستش چیزی نفهمیدم . من تازه شروع کردم و چیز زیادیم نمیدونم
به همین خاطر مشکلم توی قسمت اول رفع نشد ...میشه ساده تر توضیح بدین
ویرایش توسط ehsanbagheri : 07-10-2015 در ساعت 17:18
من واقعا شرمندم، پورت B رو سریال خوندم و کد سریال براتون فرستادم،
کدی که آقای احسان فرستادن کاملا درست و عملیه فقط اگه بازم استباه نکنم PINB باید بشه PORTB
در خط DDRB=0x00 پورت B به حالت ورودی تنظیم شده، وقتی میخوای مقداری رو از پورت بخونی باید تبدیلش کنی به ورودی، بعد رجیستر PORTB رو میخونی،
val=PORTB همون عمل خوندن رجیستره،
یک حلقه بینهایت هم همیشه هست، فعلا همینقدر بدونید کافیه که میکرو هرگز نباید به آخر تابع main برسه.
Port بزایه نوشتن رویه پورت هست
برای تولید موج پالس مربعی باید چیکار کنم؟
یه پین رو صفر و یک بکنی مربعی میشه دیگه
یک شمارنده از 9 تا 0 با استفاده از IC مبدل BCD به 7segment ، 7447 پياده سازي كنيد.
من برای این سوال این کد رو نوشتم ولی توی شبیه سازی یک سری کاراکتر زیادی چاپ میکند(البته بعد از چاپ 9 تا 0)
کسی میدونه اشکال کار کجاست؟
#include <mega32.h>
#include <delay.h>
unsigned char seven_seg_code(unsigned char num);
void main(void)
{
unsigned char i;
DDRC=0xff;
while (1)
{
for (i=9;i>=0;i--)
{
PORTC=seven_seg_code(i);
delay_ms(1000);
}
}
}
unsigned char seven_seg_code(unsigned char num)
{
unsigned char out;
switch(num)
{
case 0: out=0b0000;break;
case 1: out=0b0001;break;
case 2: out=0b0010;break;
case 3: out=0b0011;break;
case 4: out=0b0100;break;
case 5: out=0b0101;break;
case 6: out=0b0110;break;
case 7: out=0b0111;break;
case 8: out=0b1000;break;
case 9: out=0b1001;break;
default:break;
}
return out;
}
بسیار عالی، درسته یه ایراد کوچیک داره ولی کد نویسیت تمیزو خوبه حالا این درستش.
حالا شما توضیح بده چرا. این ممکنه مشکل خیلی از دوستان باشهکد:for (i=10;i>=1;i--) { PORTC=seven_seg_code(i-1); delay_ms(1000); }
ویرایش توسط erfanjeddy : 14-10-2015 در ساعت 23:03
اینجا که درسته
- - - Updated - - -
میره تا صفر بعد برمیگرده 9
- - - Updated - - -
کامپایلرت چیه؟