امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
نیاز به کمک فوری برای حل مشکل ADC Mega32
نویسنده پیام
Nadergh007 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 1
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 10
( 0 تشکر در 0 ارسال )
ارسال: #1
نیاز به کمک فوری برای حل مشکل ADC Mega32
با سلام.
برای پروژم مدار فرستنده و گیرنده صوتی با AVR در نظر گرفتم.
کدهای برنامه های ارسال و دریافت و شماتیک مدار رو براتون میذارم.امیدوارم بتونید کمکم کنید.
مشکلم اینه که مدار توی فرکانسهای خیلی پایین خروجی مناسبی داره اما نمیدونم کجای مدار یا برنامه ها ایراد داره که با افزایش فرکانس خروجی دیگه از وردی پیروی نمیکنه و بهم میریزه. انگار یه جورایی نمونه بردای توی فرکانس بالا مشکل پیدا میکنه. چراش رو نمیدونم.
اگه سوالی داشتید یا جاییش مبهم بود بپرسید تا جواب بدم.
عمل کرد کلی مدار هم به این صورته که سیگنال آنالوگ یا همون صوت وارد پبن ورودی میکرویی که با برنامه ارسال پروگرم شده میشه. بعد توسط ADC میکرو، دیجیتالی میشه و با استفاده از پروتکل UART به پین خروجی ارسال میشه. پین خروجی به پین ورودی میکرویی که با برنامه دریافت صوت پروگرم شده وصله و در نهایت به پورت خوجی فرستاده میشه. خروجی دیجیتال هم با DAC آنالوگ مشه.
خیلی خیلی از شما تشکر میکنم.
(توی شماتیک مدار همه چی مشخصه)
http://mypoem.persiangig.com/Project.zip

برنامه ارسال:

#include <mega32.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <delay.h>

//set baud for 27.7 kbps
#define baudnum 36
#define halfbaudnum 18

//set ADC reference to AREF
#define ADC_VREF_TYPE 0x20

//timeout value for task1 voice sampler
//a value of 1 ensures the task executes at
//every overflow
#define t1 1

//global variables
char bitcnt; // bit counter
char Txbyte; // data to be transmitted
char sb; // number of stop bits (1, 2, ...)
char carry; // carry bit
unsigned char reload; // timer 0 reload
int time1; // timeout counter
unsigned char temp; // temporary data holder

//the task subroutine
void task1(void);

//the data transmit subroutine
void put(void);

//************************************************** ********
//timer 0 overflow ISR
interrupt [TIM0_OVF] void timer0_overflow(void)
{
//reload to force overflow period
TCNT0=reload;

//decrement the time if not zero
if (time1>0) --time1;
}

// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
// Read the 8 most significant bits
// of the AD conversion result and
// transfer to the transmit byte
Txbyte=ADCH;
temp=Txbyte;
put();
}

//************************************************** ********
//Task 1
void task1(void)
{
time1=t1; //reset the task timer
ADCSR.6=1; //initiate ADC conversion
PORTB=temp; //send result to PORTB for debugging
}

//Transmit Byte
void put(void)
{
bitcnt=9+sb; //initiate bit counter

Txbyte=~Txbyte; //invert byte for easier handling

carry=1; //set carry to 1 for start bit

//while loop transmits the data bits using delay
while(bitcnt>0)
{
//transmit opposite of what is in carry
if (carry)
{
PORTD.1=0;
}
else
{
PORTD.1=1;
#asm("nop")
}

delay_us(baudnum); //1 bit delay

carry=(Txbyte&0b00000001); //move LSB to carry1

Txbyte=Txbyte>>1; //shift transmit byte right

bitcnt--; //decrement bitcnt, 1 bit sent
}
}

void main(void)
{
//set up timer 0
reload=256-21; //value for about 1/3 Msec at 16 MHz
TCNT0=reload; //initial reload
TIMSK=1; //turn on timer 0 overflow ISR
TCCR0=4; //prescalar to 256

//init the task timers
time1=t1;

DDRB=0xff; //direction for debugging port
DDRD=0b00000010; //direction for UART pins

sb=1; // set to 1 stop bit

// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AREF pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSR=0x8F;

// Global enable interrupts
#asm("sei")

//infinite loop ensures task1 executes at evey overflow
//ISRs do the rest of the work
while (1)
{
//execute task1 when time1 is 0
if (time1==0) task1();
}
}


برنامه دریافت:


#include <mega32.h>
#include <stdio.h>
#include <delay.h>

//set baud to 27.7 kbps
#define baudnum 36
#define halfbaudnum 18

//global variables
char bitcnt; // bit counter
char Rxbyte; // received data
char sb; // number of stop bits (1, 2, ...)
char k; // debugging counter

//the data receive subroutine
void get(void);

//Receive Byte
void get(void)
{
Rxbyte = 0x00; //clear receive byte

bitcnt=9+sb; //initialize bit counter

k=0; //initialize debug counter

//while loop waits for start bit
while(PIND.0 != 0)
{
k=k+1;// hang out
}

//delay to middle of start bit
delay_us(halfbaudnum);

//while loop samples at middle of bits
//stops at bitcnt of 2 to avoid shifting
//in stop bit
while(bitcnt>2)
{
delay_us(baudnum); //1 bit delay

Rxbyte=Rxbyte>>1; //shift receive byte right 1

//sample bit
//move value to MSB of receive byte
if (PIND.0)
{
Rxbyte=Rxbyte | 0b10000000;
}
else
{
Rxbyte=Rxbyte & 0b01111111;
}

bitcnt--; //decrement bitcnt, 1 bit received
}

//blast received byte out PORTB
PORTB = Rxbyte;
}

void main(void)
{
DDRD=0b00000010; //direction for UART pins
DDRB=0xff; //direction for output port

sb=1; // set to 1 stop bit

//infinite loop constantly calls get() to receive bytes
while (1)
{
//receive bytes
get();

//delay 1 bit to get past stop bit
delay_us(baudnum);
}
}
۱۸-شهریور-۱۳۹۱, ۱۴:۵۳:۲۵
ارسال‌ها
پاسخ
abbasalifix غایب
کاربر با تجربه
****

ارسال‌ها: 1,394
موضوع‌ها: 82
تاریخ عضویت: دى ۱۳۸۸

تشکرها : 1496
( 2198 تشکر در 1065 ارسال )
ارسال: #2
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
فایل دانلود نمیشه
شما چی رو دارین اندازه میگیرین؟!
فرکانس؟ولتاژ؟ac یا dc ؟
۱۸-شهریور-۱۳۹۱, ۱۵:۰۴:۱۱
ارسال‌ها
پاسخ
تشکر شده توسط : Nadergh007
Nadergh007 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 1
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 10
( 0 تشکر در 0 ارسال )
ارسال: #3
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
(۱۸-شهریور-۱۳۹۱, ۱۵:۰۴:۱۱)abbasalifix نوشته است: فایل دانلود نمیشه
شما چی رو دارین اندازه میگیرین؟!
فرکانس؟ولتاژ؟ac یا dc ؟
اما دوست عزیز دانلود میشه!
دوباره امتحان کنید، اگه مشکل داشتید بفرمایید تا جای دیگه اپلود کنم.
توی شبیه سازی وردوی ولتاژ سینوسی هستش. الیته در عمل ورودی صدا خواهد بود.

تشکر از شما
۱۸-شهریور-۱۳۹۱, ۱۵:۲۱:۱۰
ارسال‌ها
پاسخ
abbasalifix غایب
کاربر با تجربه
****

ارسال‌ها: 1,394
موضوع‌ها: 82
تاریخ عضویت: دى ۱۳۸۸

تشکرها : 1496
( 2198 تشکر در 1065 ارسال )
ارسال: #4
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
دانلود نشد
شما نمیتونید ولتاژ های ac رو با میکرو اندازه بگیرین
مگر اینکه اول اون رو به dc تبدیل کنید و نویز های اون رو با خازن کم کنید
۱۸-شهریور-۱۳۹۱, ۱۵:۵۳:۰۳
ارسال‌ها
پاسخ
تشکر شده توسط : aKaReZa75
Nadergh007 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 1
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 10
( 0 تشکر در 0 ارسال )
ارسال: #5
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
(۱۸-شهریور-۱۳۹۱, ۱۵:۵۳:۰۳)abbasalifix نوشته است: دانلود نشد
شما نمیتونید ولتاژ های ac رو با میکرو اندازه بگیرین
مگر اینکه اول اون رو به dc تبدیل کنید و نویز های اون رو با خازن کم کنید

بفرمایید
دانلود شبیه سازی و فایل برنامه ها
میشه بپشتر راهنمایی کنید؟ البته فکر میکنم بعد از دیدن شبیه سازی بهتر بتونید کمکم کنید. ممنونم از شما.
۱۸-شهریور-۱۳۹۱, ۱۵:۵۸:۵۴
ارسال‌ها
پاسخ
abbasalifix غایب
کاربر با تجربه
****

ارسال‌ها: 1,394
موضوع‌ها: 82
تاریخ عضویت: دى ۱۳۸۸

تشکرها : 1496
( 2198 تشکر در 1065 ارسال )
ارسال: #6
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
ارسال اطلاعات تون رو نمیدونم دارین چی میفرستین و چطور اما دارین به میکرو فرکانس میدین اونم ac اگه هدف اندازه گیری ولتاژ ac بوده که یه مدار میخواد و فرمول های مدارتون هم یه کوچولو تغییر میکنه
۱۸-شهریور-۱۳۹۱, ۱۶:۱۱:۱۶
ارسال‌ها
پاسخ
تشکر شده توسط : Nadergh007
Nadergh007 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 1
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 10
( 0 تشکر در 0 ارسال )
ارسال: #7
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
(۱۸-شهریور-۱۳۹۱, ۱۶:۱۱:۱۶)abbasalifix نوشته است: ارسال اطلاعات تون رو نمیدونم دارین چی میفرستین و چطور اما دارین به میکرو فرکانس میدین اونم ac اگه هدف اندازه گیری ولتاژ ac بوده که یه مدار میخواد و فرمول های مدارتون هم یه کوچولو تغییر میکنه
هدف ارسال سیگنال صوتی هستش. توی شبیه سازی پبن فرستنده مستقیما به پین گیرنده وصل کردم. اما من در عمل میخوام از لیزر استفاده کنم.
اما فعلا که مشکلی که گفتم دارم. طبق گفته شما پس باید برای وردی میکرو یه مدار در نظر بگیرم و سیگنال رو مستقیما به میکرو وصل نکنم. درسته؟ چرا نمیشه به میکرو ورودی AC بدم؟؟ اگه ممکنه یکم بشتر توضیح بدین که چکار کنم. چون واقعا برام مبهمه که چطور مشکل رو حل کنم.
۱۸-شهریور-۱۳۹۱, ۱۶:۳۷:۴۰
ارسال‌ها
پاسخ
abbasalifix غایب
کاربر با تجربه
****

ارسال‌ها: 1,394
موضوع‌ها: 82
تاریخ عضویت: دى ۱۳۸۸

تشکرها : 1496
( 2198 تشکر در 1065 ارسال )
ارسال: #8
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
میکرو توانایی اندازه گیری دامنه سیگنال های ac رو نداره برای همین باید اول dc کنید
۱۸-شهریور-۱۳۹۱, ۱۷:۰۰:۳۹
ارسال‌ها
پاسخ
تشکر شده توسط : Nadergh007
Nadergh007 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 1
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 10
( 0 تشکر در 0 ارسال )
ارسال: #9
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
(۱۸-شهریور-۱۳۹۱, ۱۷:۰۰:۳۹)abbasalifix نوشته است: میکرو توانایی اندازه گیری دامنه سیگنال های ac رو نداره برای همین باید اول dc کنید
مشکل AC بودن ورودی رو حل کردم. الان تنها مشکل من اینه که پاسخ فرکانسی مدار خیلی پایینه. حتی وقتی توی نرم افزار از کریستال 16MHz استفاده میکنم مدار نمیتونه بیشتر از300-200 هرتز رو جواب بده!
۱۸-شهریور-۱۳۹۱, ۲۰:۴۱:۴۸
ارسال‌ها
پاسخ
aKaReZa75 آفلاین
حسین باقری
*****

ارسال‌ها: 1,483
موضوع‌ها: 21
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 4898
( 4575 تشکر در 1473 ارسال )
ارسال: #10
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
دوست عزیز میخوای چیکار کنی؟میخوای فرکانس متر درست کنی؟

سلام، من حسین باقری هستم، طراح الکترونیک و برنامه نویس میکروکنترلر.
توی کانال یوتیوب من قراراه طراحی انواع بردهای الکترونیکی مثل بردهای تک لایه، دو لایه یا به طور کلی بردهای چند لایه، بردهای مبتنی بر میکروکنترلر، بردهای صنعتی، بردهای الکترونیک قدرت و بردهای فرکانس بالارو یاد بگیریم.
همینطور کدنویسی انواع میکروکنترلرهای 8 بینی مثل میکروکنترلرهای خانواده AVR-STM8، میکروکنترلرهای میبتی بر معماری ARM مثل STM32 و پردازنده های مخصوص اینترنت اشیاء مثل ESP32-ESP8266 و DSPها یاد میگیریم.
در کنار مباحث گفت شده، اصول اندازه الکترونیکی، نحوه صحیح مونتاژ و عیب‌یابی بردهای الکترونیکی، شبیه سازی مدارات مختلف رو هم یاد میگیریم.
اگر علاقه مند به یادگیری موضوعات عنوان شده هستید، به کانال یوتیوب من با آدرس زیر سر بزنید.
https://www.youtube.com/@aKaReZa75
۱۸-شهریور-۱۳۹۱, ۲۰:۵۵:۳۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : Nadergh007
Nadergh007 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 1
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 10
( 0 تشکر در 0 ارسال )
ارسال: #11
RE: نیاز به کمک فوری برای حل مشکل ADC Mega32
(۱۸-شهریور-۱۳۹۱, ۲۰:۵۵:۳۷)h.unique نوشته است: دوست عزیز میخوای چیکار کنی؟میخوای فرکانس متر درست کنی؟
قوربون شکل ماهتTongue
میخوام یه فرستنده/گیرنده بسازم که صدا رو با اون انتقال بدم.
توی یه سایت خارجی پیداش کردم. برنامه های فرستنده و گیرنده نوشته شده اند. فایل پروتئوس و برنامه ها رو ضمیمه کردم.
مشکل مدار رو بالا گفتم. پاسخ فرکانسیش خیلی پایینه Angry
والله دیگه عقلم قد نمیده مشکل از کجاست! آخه برنامه نویسیم زیاد خوب نیست. از لحاظ سخت افزاری هم که مشکلی نمی بینم. اگه برنامه مشکلی داره هم نمیدونم. تنها چیزی که متونم بگم اینه که انگار ADC کند عمل میکنه.
تشکر از شما
۱۸-شهریور-۱۳۹۱, ۲۱:۳۸:۲۱
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [فوری] یک کمک ساده و فوری questnet 5 4,014 ۱۶-مرداد-۱۳۹۷, ۱۸:۳۶:۴۳
آخرین ارسال: questnet
  چه ججوری MT8880 رو به میکرو وصل کنم(فوری) amiraliforoozandeh 52 56,442 ۲۰-خرداد-۱۳۹۶, ۱۶:۳۳:۲۵
آخرین ارسال: erfanjann
  راهنمایی برای حل مشکل برنامه در بسکام fedagh 2 3,420 ۱۲-دى-۱۳۹۵, ۱۸:۳۰:۵۹
آخرین ارسال: fedagh
  [آموزشی] بوتلودر BootloadHID برای AVR8 بدون نیاز به درایور usb salehjg 0 2,494 ۰۸-مهر-۱۳۹۵, ۲۳:۴۷:۰۶
آخرین ارسال: salehjg
  نیاز به کمک alikiller990 3 2,338 ۲۴-اردیبهشت-۱۳۹۴, ۱۷:۰۹:۵۲
آخرین ارسال: sharin
  کمک برای شرط گذاشتن برای یک فرکانس خاص sinohe 5 4,170 ۱۱-آذر-۱۳۹۳, ۰۰:۱۵:۱۸
آخرین ارسال: sinohe
Rolleyes [سوال] احتیاج فوری !ایجاد حالات مختلف کاری برای یک سوئیچ در بسکام sadegh1rezaei 6 3,636 ۲۹-مهر-۱۳۹۳, ۲۱:۵۷:۴۶
آخرین ارسال: aKaReZa75
  کمک فوری در برنامه نویسی کانتر lightlife 0 1,814 ۰۹-مرداد-۱۳۹۳, ۱۸:۰۷:۱۵
آخرین ارسال: lightlife
  مشکل ارسال sms با mega32 Nolovitska 59 56,597 ۲۹-اسفند-۱۳۹۲, ۰۶:۵۸:۱۷
آخرین ارسال: mojtaba_mza
  [سوال] کمک فوری درباره HM-T و HM-R blackstar368 47 33,341 ۱۹-اسفند-۱۳۹۲, ۲۱:۳۵:۱۹
آخرین ارسال: GoldenFishID

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS