در زمینه کار با آی سی های مبدل آنالوگ به دیجیتال نیاز به مرجعی دارم.من با ADC داخلی میکرو کنترلر کار کرده ام و از توابع READ_ADC برای این کار استفاده کرده ام. به دلیل دقت کمی که ADC داخلی میکرو کنترلر داشت نیاز به کار با AD7705 که 16 بیتی دارم. در دیتاشیت این آی سی مدار راه انداز برای سنسور های دمایی پیشنهاد شده است.ارتباط این ماژول با میکرو از طریق ارتباط SPI میسر است.آیا pdf یا سایتی (فارسی با انگلیسی) برای شروع کار وجود دارد؟
اطلاعیه
Collapse
No announcement yet.
مرجعی برای کار با آی سی های ADC
Collapse
X
-
پاسخ : مرجعی برای کار با آی سی های ADC
اگه کارتون با دقت 10 بیت هم راه میفته با همون میکرو هم میتونید انجامش بدین
اما اگه می خواهید با همین کار کنید امید وارم این بهتون کمک کنه :
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=we b&cd=2&ved=0CC4QFjAB&url=http%3A%2F%2F www.analog.com%2Fstatic%2Fimported-files%2Fdata_sheets%2FAD7705_7706.pdf&ei=7JYyT _CGLorRhAe9tdTzBA&usg=AFQjCNH1KsJRhAkH3lx2AeMN JbaoHEwpDQ&sig2=xsSMYw2d98dGFjtLr6GE0gچیزی را بگو که بتوانی بنویسی
چیزی را بنویس که بتوانی امضا کنی
چیزی را امضا کن که بتوانی به آن عمل کنی (ناپلئون)
-
پاسخ : مرجعی برای کار با آی سی های ADC
این دیتاشیت AD7705 است.آیا مرجع دیگری که به زبان ساده تر و قابل فهم تر برای ما تازه کار توضیح داده باشد سراغ دارید؟
من دیتاشیت این آی سی و نیز چند application note از شرکت Analog device را دارم.آیا برنامه نویسی با این آی سی های ADC همان قواعد برنامه نویسی با ADC داخلی میکرو را دارد؟آیا برنامه های پیشنهادی در اینترنت که بعضی برای پیاده سازی SPI از SPI داخلی استفاده کرده اند و بعضی دیگر یک SPI را توسط دیاگرام زمانی آی سی خودشان نوشته اند و پیاده سازی کرده اند را کسی توضیح داده است؟(فارسی یا انگلیسی)
دیدگاه
-
پاسخ : مرجعی برای کار با آی سی های ADC
دوست عزیز من این کد را تو اینترنت پیدا کردم . ببینید به دردتون می خوره:
البته اینجور که من توی فروم های خارجی دیدم خیلیا با این ای سی مشکل داشتند.
//AD7705.cاگر خواستید از ماژول های دیگه استفاده کنید میتونید به فروشگاه های اینترنتی یه نگاهی بیندازید
//ATMEGA 16
//4 Mhz
#include <avr/io.h>
#include <avr/delay.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
int main(void)
{
//Set MOSI, SS, and SCLK as output MISO as input
DDRB = (1<<5|1<<7|1<<4);
//Enable SPI, Select Master, SCLK idles high, Sample on rising edge Setup on falling edge
SPCR = (1<<SPE|1<<MSTR|1<<CPOL|1<< ;CPHA);
//Send to Comm Reg: Next Write Clk
SPDR = 0b00100000;
//Wait for transfer
while(!(SPSR & (1<<SPIF)));
//Send to ClkReg: Clock Bits and Update rate
SPDR = 0b00011000;
//Wait for transfer
while(!(SPSR & (1<<SPIF)));
//Send to Comm: next read Clk reg
SPDR = 0b00101000;
//Wait for transfer
while(!(SPSR & (1<<SPIF)));
//send garbage to shift out byte we want from AD7705
SPDR = 0;
//Wait for transfer
while(!(SPSR & (1<<SPIF)));
unsigned char value = SPDR;
DDRD = 0xFF;
PORTD = value; //read byte from SPI buffer onto PORTD
while(1);
return 0;
}چیزی را بگو که بتوانی بنویسی
چیزی را بنویس که بتوانی امضا کنی
چیزی را امضا کن که بتوانی به آن عمل کنی (ناپلئون)
دیدگاه
-
پاسخ : مرجعی برای کار با آی سی های ADC
خوب به نظرم یکی از بهترین سئوالات این یخش تفاوت کوپلینگ دی سی و ای سی می باشد. که یکی از مهمترین عوامل حل نویز می باشد....
و پارامتر سیگنال به نویز که دقت مربوط به هیستوگرام با به نوعی nob ای دی سی را مشخص میکند...
به نظرم این دو پارامتری نقش مهمی را در انتخاب و کار و طراحی یگ مدار adc را دارد... و نهایتان تعداد بیتها و پهنای باند...
دیدگاه
-
پاسخ : مرجعی برای کار با آی سی های ADC
نوشته اصلی توسط lordsoroosh//AD7705.c
//ATMEGA 16
//4 Mhz
#include <avr/io.h>
#include <avr/delay.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
int main(void)
{
//Set MOSI, SS, and SCLK as output MISO as input
DDRB = (1<<5|1<<7|1<<4);
//Enable SPI, Select Master, SCLK idles high, Sample on rising edge Setup on falling edge
SPCR = (1<<SPE|1<<MSTR|1<<CPOL|1<< ;CPHA);
//Send to Comm Reg: Next Write Clk
SPDR = 0b00100000;
//Wait for transfer
while(!(SPSR & (1<<SPIF)));
//Send to ClkReg: Clock Bits and Update rate
SPDR = 0b00011000;
//Wait for transfer
while(!(SPSR & (1<<SPIF)));
//Send to Comm: next read Clk reg
SPDR = 0b00101000;
//Wait for transfer
while(!(SPSR & (1<<SPIF)));
//send garbage to shift out byte we want from AD7705
SPDR = 0;
//Wait for transfer
while(!(SPSR & (1<<SPIF)));
unsigned char value = SPDR;
DDRD = 0xFF;
PORTD = value; //read byte from SPI buffer onto PORTD
while(1);
return 0;
}
مشکل اساسی من در خواندن از رجیستر های ADC تحت ارتباط SPI است.با توجه به رجیستر های ارائه شده در AD7705 و اینکه هم می توان از اکثر رجیستر های آن هم اطلاعات خواند و هم نوشت ، من هم در اولین قدم برای ارتباط با communication register که رجیستر اصلی این ADC است چند خط کد نوشتم اما وقتی چیزی را در این رجیستر نوشتم نتوانستم همان را بخوانم.اگر راهنمایی کنید ممنون می شوم.
کد هایی که برای این منظور استفاده کردم (ATmega32 و CodevisionAVR و AD7705)
کد:#define NUM_SAMPLES 1000 /* change the number of data samples */ #define MAX_REG_LENGTH 2 /* this says that the max length of a register is 2 bytes */ #define DRDY PIND.7 #define CS PORTB.4 char store[1000];
کد:void Writetoreg(int byteword) { int q; SPCR = 0x3f; SPCR = 0X7f; /* this sets the WiredOR mode(DWOM=1), Master mode(MSTR=1), SCK idles high(CPOL=1), /SS can be low always (CPHA=1), lowest clock speed(slowest speed which is master clock /32 */ DDRB = 0xA0; /* SCK, MOSI outputs */ q = SPSR; q = SPDR; /* the read of the status register and of the data register is needed to clear the interrupt which tells the user that the data transfer is complete */ CS=0; /* /CS is low */ SPDR = byteword; /* put the byte into data register */ while(!(SPSR & 0x80)); /* wait for /DRDY to go low */ CS=1; /* /CS high */ } void Read(int amount,int reglength) { int b,i; SPCR = 0x3f; SPCR = 0x7f; /* clear the interrupt */ DDRB = 0xA0; /* MOSI output, MISO input, SCK output */ while(DRDY & 0); /* wait for /DRDY to go low */ CS=0 ; /* /CS is low */ for(b=0;b<reglength;b++) { SPDR = 0; while(!(SPSR & 0x80)); /* wait until port ready before reading */ store[i++]=SPDR; /* read SPDR into store array via datapointer */ } CS=1; /* /CS is high */ }
کد:int i; char string[5]="amin"; Writetoreg(0x20); /* Active Channel is Ain1(+)/Ain1(-), next operation as write to the clock register */ while(DRDY & 1); /* wait for /DRDY to go high */ while(DRDY & 0); /* wait for /DRDY to go low */ //while(DRDY & 1); /* wait for /DRDY to go high */ Writetoreg(0x08); Read(1,1); //for(i=0;i<NUM_SAMPLES;i++) // { // sprintf(string,"%x",store[i]); puts(store); delay_ms(100);
:read: :read: :read: :cry2:
دیدگاه
-
پاسخ : مرجعی برای کار با آی سی های ADC
سلام شما بیایید از ad7715 استفاده کنید تقریبا با ad7705 مشابه هست هم از لحاظ سرعت و تعداد بیت ها و وضوحش
وهم این که بچه ها تو سایت فکر کنم راه انداختن بگردی پیدا میکنی و تو یکی از مجله های نویز هم دیتا شیتشو فارسی کردن وهم راه اندازی کردن
:biggrin:امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)
دیدگاه
دیدگاه