با سلام
بچه ها من پروژه کارشناسی خودم رو ساخت یک دستگاه mp3 player با آی سی vs1003 انتخاب کردم و تقریبا تموم شده ، زبان برنامه نویسی c رو واسه نوشتن این پروژه انتخاب کردم ، من از fat 32 استفاده نمی کنم و فقط می خوام سکتور ها رو پشت سر هم به vs1003 بفرستم و پخش کنم و بعدا خودم تکمیلش می کنم . حالا سوال من اینه که من اول یک برنامه برای تست سینوسی vs1003 نوشتم ولی هیچ اتفاقی تو خروجی هدفون ها نمی افته
پایه های DREQ و XTEST , RX همیشه روی 2.8 ولت هستن و پایه dreq هیچ وقت صفر نمی شه
تمام vcc های مدار هم به 2.8 ولت وصل کردم (هم کارت حافظه ، هم میکرو mega32 و هم vs1003 )
حالا من چند تا سوال داشتم اگه لطف کنین جواب بدین خیلی خوشحال می شم .این برنامه تستی هستش که فعلا براساس datasheet نوشتم سوالام رو زیر برنامه نوشتم .
اگه دقت کرده باشین من اول برنامه xreset رو صفر کردم و دوباره یک کردم ، حالا سوال من اینه که کلا چند بار لازمه که xreset صفر بشه همون اول برنامه یه بار صفر بشه کافیه یا مثلا برای نوشتن و خواندن رجیسترهای vs1003 باید دوباره xreset رو صفر و یک کرد ؟
اگه برنامه ساده ای که مراحل نوشتن یک برنامه تست سینوسی رو دارین و مراحل توی اون رعایت شده رو بتونین بهم بدین خیلی ممنون می شم چون من نمی دونم که ترتیب صفر و یک کردن پایه های vs1003 چطوریه ، مثلا xdcs , xcs , ....
پس از نوشتن این برنامه من دقیقا از هدفون چه صدایی رو باید بشنوم آیا نیازی هست که قبلش کلاک و رجیسترهای vs1003 رو تنظیم کنم یا مستقیم می تونم شروع به تست سینوسی کنم
در کل هر نکته مفیدی که قبلا خودتون باهاش مشکل داشتین و می دونین که می تونه کمکم کنه رو اگه بگین خیلی ممنون می شم
بچه ها من پروژه کارشناسی خودم رو ساخت یک دستگاه mp3 player با آی سی vs1003 انتخاب کردم و تقریبا تموم شده ، زبان برنامه نویسی c رو واسه نوشتن این پروژه انتخاب کردم ، من از fat 32 استفاده نمی کنم و فقط می خوام سکتور ها رو پشت سر هم به vs1003 بفرستم و پخش کنم و بعدا خودم تکمیلش می کنم . حالا سوال من اینه که من اول یک برنامه برای تست سینوسی vs1003 نوشتم ولی هیچ اتفاقی تو خروجی هدفون ها نمی افته
پایه های DREQ و XTEST , RX همیشه روی 2.8 ولت هستن و پایه dreq هیچ وقت صفر نمی شه
تمام vcc های مدار هم به 2.8 ولت وصل کردم (هم کارت حافظه ، هم میکرو mega32 و هم vs1003 )
حالا من چند تا سوال داشتم اگه لطف کنین جواب بدین خیلی خوشحال می شم .این برنامه تستی هستش که فعلا براساس datasheet نوشتم سوالام رو زیر برنامه نوشتم .
کد:
#include <mega32.h> #include <delay.h> #include <spi.h> #include<stdlib.h> #include <lcd.h> #asm .equ __lcd_port=0x1B ;PORTA #endasm #define xRESET PORTB.2 // put vs in hardware reset (output pin) #define xDCS PORTB.0 //data chip select / byte sync (output pin) #define DREQ PINB.1 //data request (input pin) #define xCS PORTB.4 //chip select (output pin) #define VS_WRITE_COMMAND 0x02 #define VS_READ_COMMAND 0x03 #define SPI_MODE 0x0 #define SPI_STATUS 0x1 #define SPI_BASS 0x2 #define SPI_CLOCKF 0x3 #define SPI_DECODE_TIME 0x4 #define SPI_AUDATA 0x5 #define SPI_WRAM 0x6 #define SPI_WRAMADDR 0x7 #define SPI_HDAT0 0x8 #define SPI_HDAT1 0x9 #define SPI_AIADDR 0xa #define SPI_VOL 0xb #define SPI_AICTRL0 0xc #define SPI_AICTRL1 0xd #define SPI_AICTRL2 0xe #define SPI_AICTRL3 0xf #define SM_DIFF 0x01 #define SM_JUMP 0x02 #define SM_RESET 0x04 #define SM_OUTOFWAV 0x08 #define SM_PDOWN 0x10 #define SM_TESTS 0x20 #define SM_STREAM 0x40 #define SM_PLUSV 0x80 #define SM_DACT 0x100 #define SM_SDIORD 0x200 #define SM_SDISHARE 0x400 #define SM_SDINEW 0x800 #define SM_ADPCM 0x1000 #define SM_ADPCM_HP 0x2000 unsigned int SPI_DATA=0; void SetReg(unsigned char REG,unsigned char LEFT,unsigned char RIGHT) { while(!DREQ); lcd_clear(); lcd_putsf("DREQ IS LOW"); xCS=0; spi(0x02); spi(REG); // spi(addressbyte,highbyte,lowbyte ) spi(LEFT); spi(RIGHT); xCS =1; } void ReadReg(unsigned char REG) { xCS=0; spi(0x03); spi(REG); // spi(addressbyte) spi(0xff); SPI_DATA=((unsigned int)SPDR)<<8 ; spi(0xff); SPI_DATA|=SPDR; xCS=1; } void SineTest() {int i; xRESET = 0 ; delay_ms(150); spi(0xff); xCS =1; xDCS = 1; xRESET = 1; spi(0xff); delay_ms(1); xCS = 0; spi(0x02); /* Send SPI Byte, then wait for byte to be sent. */ spi(0x00); /* 0x02 was WRITE command, 0x00 is register number */ spi(0x08); /* This byte goes to MSB */ spi(0x20); /* ..and this is LSB. (0x20=Allow Test Mode) */ xCS = 1; while (!DREQ); /* Send a Sine Test Header to Data port */ xDCS=0; /* Now SPI writes go to SDI port */ for(i=0;i<100;i++) { spi(0x53); /* - This is a special VLSI Solution test header - */ spi(0xef); /* - that starts a sine sound. It's good for - */ spi(0x6e); /* - testing your code, the chip and also for - */ spi(0x44); /* - seeing if your MP3 decoder was manufactured - */ spi(0x00); /* - by VLSI Solution org. ------------------------ */ spi(0x00); spi(0x00); spi(0x00);} xDCS=1; lcd_clear(); lcd_putsf("SINE TESTED"); delay_ms(500); /* Stop the sine test sound */ xDCS=0; spi(0x45); spi(0x78); spi(0x69); spi(0x74); spi(0x00); spi(0x00); spi(0x00); spi(0x00); xDCS=1; lcd_clear(); lcd_putsf("sine FINISHEDD"); delay_ms(500); } void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00; DDRA=0x00; // Port B initialization // Func7=Out Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=Out // State7=0 State6=T State5=0 State4=0 State3=0 State2=0 State1=T State0=0 PORTB=0x00; DDRB=0xBD; // Port C initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x00; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; delay_ms(1000); // SPI initialization // SPI Type: Master // SPI Clock Rate: 2*500.000 kHz // SPI Clock Phase: Cycle Half // SPI Clock Polarity: Low // SPI Data Order: MSB First lcd_init(16); lcd_clear(); lcd_putsf("LCD TESTED"); delay_ms(100); SPCR=0x51; SPSR=0x00; lcd_clear(); lcd_putsf("SPI TESTED"); delay_ms(100); xRESET = 0 ; delay_ms(150); spi(0xff); xCS =1; xDCS = 1; xRESET = 1; while (1) { SetReg(SPI_MODE,0x08,0x20); lcd_clear(); lcd_putsf("SPI MODE Were Wrote"); delay_ms(500); ReadReg(SPI_MODE) ; lcd_clear(); lcd_putsf("SPI MODE Were READ"); delay_ms(500); SetReg(SPI_CLOCKF,0xB3,0xFE); lcd_clear(); lcd_putsf("SPI CLOCKF Were Wrote"); delay_ms(500); ReadReg(SPI_CLOCKF) ; lcd_clear(); lcd_putsf("SPI CLOCKF Were READ"); delay_ms(500); SetReg(SPI_VOL,0x00,0x00); lcd_clear(); lcd_putsf("SPI VOL Were Wrote"); delay_ms(500); ReadReg(SPI_VOL); lcd_clear(); lcd_putsf("SPI VOL Were READ"); delay_ms(500); lcd_clear(); lcd_putsf("sine starTED"); delay_ms(100); SineTest(); lcd_clear(); lcd_putsf("sine STOPED"); delay_ms(100); }; }
اگه برنامه ساده ای که مراحل نوشتن یک برنامه تست سینوسی رو دارین و مراحل توی اون رعایت شده رو بتونین بهم بدین خیلی ممنون می شم چون من نمی دونم که ترتیب صفر و یک کردن پایه های vs1003 چطوریه ، مثلا xdcs , xcs , ....
پس از نوشتن این برنامه من دقیقا از هدفون چه صدایی رو باید بشنوم آیا نیازی هست که قبلش کلاک و رجیسترهای vs1003 رو تنظیم کنم یا مستقیم می تونم شروع به تست سینوسی کنم
در کل هر نکته مفیدی که قبلا خودتون باهاش مشکل داشتین و می دونین که می تونه کمکم کنه رو اگه بگین خیلی ممنون می شم