اطلاعیه

Collapse
No announcement yet.

mikro player ?!

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : mikro player ?!

    در مورد فایلهای txt توضیح دادید . ممکنه توضیحات کامل در مورد فایلهای wave هم بدین؟
    من میخوام یک سری فایل wave رو از رو mmc بخونم ولی نمیدونم با سکتور باید کار کنم یا fat
    در مورد آدرس سکتور : خوب من فایلی رو میریزم رو mmc و میخوام از اون بخونم از کجا باید بدونم تو چه آدرسیه؟؟؟
    و یه سوال دیگه : یه جا خوندم "که اگر شما بصورت سکتوری با mmc کار کنید دیگر توسط رم ریدر و ویندوز قابل روئیت نیست و اگر mmc رو به کامپیوتر وصل کنید ویندوز پیغام فرمت می دهد ." این درسته؟ یعنی اگه من با مشابه این برنامه فایل wav رو که کامپیوتر ریخته رو mmc نمیتونم بخونم؟؟؟

    دیدگاه


      #17
      پاسخ : mikro player ?!

      من دقیقا نفهمیدم مشکلت با ساختار فایل ویو هست یا با mmc ؟
      اگه با mmc هست ببین وقتی یک فایلو می ریزی تو mmc (فرق نمی کنه چه فایلی) ویندوز میاد می بینه که اولین فضایی که تو mmc خالیه کجاست بعد اطلاعانو میریزه توش و آدرس شروع فایل رو هم توی mmc می ریزه همچنین آدرس تک تک سکتور هایی که این فایل توی اوناسم می نویسه توی mmc
      البته برای کمتر اشقال شدن حافظه میاد هر چند تا سکتورو یکی در نظر می گیره و بهشون می گه کلاستر این یه کار رو توی یه جدولی به نام FAT انجام میده fat یه جدوله که آدرسهای کلاسترهای فایل توشه و عددی که بعد فت می نویسن (مثل fat 16 or aft 32 ) نشان دهنده طول آدرس به بیته هر دفه که توی mmc توسط ویندوز فایلی رو میریزی بسته به اینکه چقدر از mmc پره مکان نوشتن فایل فرق می کنه مگه اینکه mmc خالی خالی با شه بعد دلی هم نداره که کلاسترای فایلت هم پشت سر هم با شه مگه اینکه mmc خالی خالی با شه ولی پیش فرض پشت سر هم بودن کلاستراست پس اگه می خوای با جدول fat کار نکنی mmc رو فرمت کن و فایلتو بریز توش الان مطمئنی که کلاسترای فایلت پشت سر همن ولی باید بدونی که شروع فایلت از کدوم کلاستره که برای این کار با نرم افزارهایی مثل partition maneger برو توی mmc وچند بایت اول فایلتو توی سکتورش سرچ کن اونوقت اول فایلت پیدا میشه بهد به ترتیب بخونش
      اگه توی سایت بگردی پر اطلاعاته بدر د بخوره بهترینش یه مقاله pdf آقای علی تروشس
      موفق باشی :bye

      [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

      دیدگاه


        #18
        پاسخ : mikro player ?!

        سلام میدونم این تاپیک برای 120 روز قبله ولی من هر کاری میکنم نمیتونم این مدار را بسازم اقای abbasmh اگه میتونید یه شماتیک کوچولو برام بزارید ممنون میشم اخه کارم خیلی گیره
        با تشکر

        دیدگاه


          #19
          پاسخ : mikro player ?!

          سلام
          والا من خودمم الان یادم نیست که شماتیک چی بود اخه من هر کار جدیدی می کنم از تمامی قطعات و سخت افزار و نرم افزار کار های قبلیم استفاده می کنم
          این کارم کاملتر شده توسط این برد توی این تاپیک
          http://www.eca.ir/forum2/index.php?topic=37852.0
          ولی اگرم فکر می کنی که حتما باید همین شماتیک و برد باشه می رم توی برنامه برات اتصالاتو پیدا میکنم
          یه گشتی زدم (البته خودتم می تونسی)
          Mmc_Fat_Init(PORTC, 2)
          portc.2=CS of pic and mmc
          portc.3=SCK of pic and mmc
          portc.4=SDI of pic and connect to SDO of mmc
          portc.5=SDO of pic and connect to SDI of mmc

          Glcd_Init(portb,4,3,0,1,5,2,porte)
          portb=controll port of lcd
          b.4=CS1
          b.3=CS2
          b.0=RS
          b.1=RW
          b.5=RST
          b.2=EN
          porte=data port of lcd

          Pwm4_Init(150000)
          portG.3=pwm out
          نمی دونم اصلا مهم نیست در مورد mmc و glcd شماتیک من چیه .شما شماتیک خودتو ببند و فقط توی init کردن سورسو تغییر بده
          موفق باشی

          [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

          دیدگاه


            #20
            پاسخ : mikro player ?!

            فقط نحوه اتصال mmc به میکرو را توضیح بدید و مقاومت هایی که استفاده کردید من هر کاری کردم نشد

            دیدگاه


              #21
              پاسخ : mikro player ?!

              دقیقا همین شماتیک(مال هلپه میکروبیسیک هست):

              [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

              دیدگاه


                #22
                پاسخ : mikro player ?!

                به نام خدا سلام عباس جان حالت چطوره تو چقدر بچه خوبی هستی ... من یک سوال در قسمت AVR پرسیدم کسی جواب نداد ولی حالا که دوست خوبی مثل شما را گیر آوردم سوالم را میپرسم من یک مدار WAVEPLAYER که برنامه اش هم با BASCOM نوشته شده بود از اینترنت گرفتم جواب میداد ولی مشکل اینجا بود که با SPI نرم افزاری بود و کیفیت خوبی نداره یعنی بدرد این کاری که من میخواهم نمیخوره با JETAUDIO فرکانس فایل WAVE را بیشتر کردم و زمان داخل برنامه را هم کمتر کردم ولی تقریبا کیفیت صدا پایینتر اومد من در CV برنامه را با SPI سخت افزاری بازنویسی کردم ولی متاسفانه جواب نگرفتم . میخواستم ببینم شما نمیدونی چطور میشه WAVE PLAYER را با PIC یا AVR با کیفیت بالا جواب گرفت اگر خواستی که با PIC بگی با 16F887 یا 18F452 بگو در ضمن من من تاپیک های دیگر تو رو هم در سایت دیدم انصافا خیلی به بچه ها کمک میکنی پس بیا و ...
                آیا کسى که وعده نیکو به او داده‏ایم و او به آن خواهد رسید، مانند کسى است که از کالاى زندگى دنیا بهره‏مندش گردانیده‏ایم [ولى‏] او روز قیامت از [جمله‏] احضارشدگان [در آتش‏] است؟ (61)(سوره قصص)

                دیدگاه


                  #23
                  پاسخ : mikro player ?!

                  سلام
                  ممنون نظر لطف شماست :NO:
                  برای ساخت waveplayer از spi نرم افزاری استفاده کردی؟
                  منظورت توی ارتباط با mmc هست یا برای تولید موج pwm ؟؟؟
                  فکر می کنم منظورت دومی باشه
                  این روشی که من توی این برد بکار گرفتم (البته روش من نبوده منم از بقیه دوستان یاد گرفتم) استفاده از pwm بوده
                  pwm (پالس با پهنای متغییر) در واقع یه فرکانسی داره و یه دقت و یه دیوتی سیکل
                  هر چی فرکانس بیشتر بشه دقت پالس تولیدی کمتر میشه مثلا با فرکانس 10000 هرتز دقت 10 بیته و با 100000 دقت 8 بیت میشه.
                  حالا اگه می خوای از pwm استفاده کنی اولا باید میکروت سخت افزارشو داشته باشه (فکر می کنم داشته باشه)
                  دوما باید دیتا شیتشو بخونی تا ببینی توی چه فرکانسی میتونی حداقل دقت 8 بیتو ازش بگیری.
                  در حالت کلی هرچی فرکانس بیشتر بشه و دقت بیشتر بشه کیفیت صدا بهتر می شه و لی این دو تا با هم رابطه عکس دارن و نمیشه هر دوتاشون رو با هم بالا برد پس باید از یه فرکانس بهینه که دقت رو از 8 بیت کمتر نکنه استفاده کنی تا بهترین کیفیتو داشته باشی من با pic تقریبا فرکانسم بین 80000 تا 150000 هرتز بوده با دقت 8بیت بعد خروجی رو با یه مقاومت دادم به اپ امپ صوتی LM386 (توی دیتا شیتش مدار داره برای اتصال)
                  به این صورت کیفیت تقریبا خوی بود و لی نه عالی صدا خش خش داره و کمی توی بعضی فرکانسها مشکل داره و صدا کلا فرق می کنه ولی خوب به سادگی روش میارزه!
                  اگه از هدفون استفاده کنی کیفیت کمی بهتر میشه.
                  ولی اگه می خوای با کیفیت بالا صدا پخش کنی باید از ای سی D/A استفاده کنی (دیجیتال به انالوگ) باید از ای سی استفاده کنی که توی بازار ایران پیدا بشه !!!
                  اینجوری کیفیت تقریبا دست نمی خوره.
                  (در مورد جواب نگرفتن با spi سخت افزاری:احتمالا فرکانسو خیلی بردی بالا.)
                  موفق باشی :bye

                  [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                  دیدگاه


                    #24
                    پاسخ : mikro player ?!

                    به نام خدا سلام عزیزم متشکرم نگاه کن من فقط احتیاج به یک WAVE PLAYER با کیفیت بالا دارم دیگه نمیدونم برام مهم نیست با SPI سخت افزاری باشه یا نرم افزاری من یک سورس کد از اینترنت برای CV با SPI سخت افزاری پیدا کردم داخل سایت گذاشتم ولی متاسفانه کسی جواب نداد من این سورس را دوباره برای شما میگذارم توی این سرعت خیلی بالا در ضمن میخواستم بگم سورس کدت رو نمیشه دانلود کرد در مورد DAC هم من از نوع مقاومتی اون استفاده کردم کیفیت فرقی نکرد وبرای DAC804 هم نقشه بدرد بخوری ندارم.


                    [code=c]

                    ************************************************** ***
                    This program was produced by the
                    CodeWizardAVR V1.24.8e Standard
                    Automatic Program Generator
                    © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
                    http://www.hpinfotech.com

                    Project :
                    Version :
                    Date : 8/4/2007
                    Author : **********
                    Company : -----------------------
                    Comments:


                    Chip type : ATmega48
                    Clock frequency : 12.000000 MHz
                    Memory model : Small
                    External SRAM size : 0
                    Data Stack size : 128
                    ************************************************** ***/

                    #include <mega48.h>
                    #include <stdio.h>
                    #include <delay.h>
                    #include <string.h>
                    #include <spi.h>

                    #define XTAL 12000000
                    #define Root_Directory_x 0
                    #define Root_Directory_y 25088
                    #define Max_Songs 20


                    #define CS PORTB.2


                    char SD_init(void);
                    char command(char cmd, unsigned int x,unsigned int y, char crc);
                    char SD_read(unsigned int x,unsigned int y);

                    void Play_wav(void);
                    void Get_File_Sizes(int x,int y);

                    char received;

                    int x=0;
                    long int y=0;
                    int start_x[Max_Songs]={0};
                    int start_y[Max_Songs]={0};
                    char file=0; //# of songs
                    char file_pos=0; //which song will be played next


                    // USART Receiver interrupt service routine
                    interrupt [USART_RXC] void usart_rx_isr(void)
                    {
                    char w;

                    w = UDR0;

                    printf("%c ",w); //echo

                    if(w=='+&#039
                    {

                    y+=512;


                    if (y==65536)
                    {
                    y=0;
                    x++;
                    printf("man x = %u, y = %u \n\r",x,y);
                    SD_read(x,y);



                    }
                    else
                    {
                    printf(" x = %u, y = %u \n\r",x,y);
                    SD_read(x,y);

                    }



                    }
                    else if (w == 'r' || w == '0&#039
                    {


                    scanf("%u,\r",&x);


                    printf("x=%u\n\r",x);
                    scanf("%u,\r",&y);


                    printf("y=%u\n\r",y);

                    SD_read(x,y);
                    }

                    }




                    // Pin change 0-7 interrupt service routine
                    interrupt [PCINT1] void pin_change_isr0(void)
                    {
                    delay_ms(200);

                    PCIFR=2; //clear any other pin_change flags that might have occured when pin changed back

                    Play_wav(); //to its original state



                    }


                    void main(void)
                    {

                    // Crystal Oscillator division factor: 1

                    CLKPR=0x80;
                    //CLKPR=0x00;


                    DDRB=0x2E;

                    // Timer/Counter 1 initialization
                    // Clock source: System Clock
                    // Clock value: 46.875 kHz
                    // Mode: Ph. correct PWM top=00FFh
                    // OC1A output: Inverted

                    TCCR1A=0xC1;

                    SMCR=01; //sleep enable

                    PCICR=0x02; //PIN change Interrupt on PINC.0
                    PCMSK1=0x01;
                    PCIFR=0x02;
                    CS=1;



                    // USART initialization
                    // Communication Parameters: 8 Data, 1 Stop, No Parity
                    // USART Receiver: On
                    // USART Transmitter: On
                    // USART0 Mode: Asynchronous
                    // USART Baud rate: 115200 (Double Speed Mode)
                    UCSR0A=0x02;
                    UCSR0B=0x98;
                    UCSR0C=0x06;

                    UBRR0L=0x0C;


                    // Analog Comparator initialization
                    // Analog Comparator: Off
                    // Analog Comparator Input Capture by Timer/Counter 1: Off
                    ACSR=0x80;


                    // SPI initialization
                    // SPI Type: Master
                    // SPI Clock Rate: 2*3000.000 kHz
                    // SPI Clock Phase: Cycle Half
                    // SPI Clock Polarity: Low
                    // SPI Data Order: MSB First
                    SPCR=0x50;
                    SPSR=0x01;




                    SD_init();

                    Get_File_Sizes(Root_Directory_x,Root_Directory_y);


                    while (1)
                    {

                    printf("Ready for input\n\r"
                    #asm("sei"
                    #asm("sleep"



                    };
                    }


                    void Play_wav(void)
                    {
                    int i;
                    int cnt=0;
                    unsigned long pos=0;
                    char buf[4]={0};



                    CS = 0; // enable SD
                    delay_ms(10);//wait for cs to be stable


                    received=(command(0x52,start_x[file_pos],start_y[file_pos],0xff)); //multi read mode

                    received=spi(0xFF);

                    h1:

                    if (received != 0)
                    {

                    received= spi(0xFF);
                    goto h1;
                    }

                    // wait for 0xFE - start of any transmission
                    received = spi(0xFF);

                    while(received != 0xfe)
                    {

                    received = spi(0xFF);
                    };

                    PCIFR=2;
                    #asm("sei" //enable interrupts

                    spi(0xff);
                    spi(0xff);
                    spi(0xff);
                    spi(0xff);

                    for(i=0;i<4;i++)
                    {
                    buf[i]=spi(0xff); //skip to data
                    cnt++;
                    }
                    pos=0;
                    pos=(unsigned long)buf[3]<<24;
                    pos|=(unsigned long)buf[2]<<16;
                    pos|=(unsigned long)buf[1]<<8;
                    pos|=(unsigned long)buf[0];
                    pos+=8;
                    pos/=512;
                    cnt+=4;

                    for(i=0;i<44;i++)
                    {
                    spi(0xff); //skip to data

                    cnt++;
                    }


                    OCR1AL=0xff-spi(0xff); //load first value
                    cnt++;



                    #asm("cli"
                    TCCR1B=0x09; // 9 = fast PWM 46875 Khz start clock
                    while(pos>0)
                    {

                    while(TCNT1L>6);
                    OCR1AL=0xff-spi(0xff); //load new data

                    cnt++; //keep track of how many bytes long the file is


                    if (cnt==512) //get end of block bytes
                    {
                    cnt=0;
                    received = spi(0xFF);
                    pos--;
                    while(received != 0xfe) //at the end of every 512 bytes, the SD card sends some a few bytes
                    { //that end with 0xFE

                    received = spi(0xFF);
                    };

                    }
                    if (PCIFR.1==1)
                    {
                    putsf("Done Playing\n\r"
                    goto Done;

                    }




                    };


                    PCIFR=2; //clear pin_change flag PINC.0
                    TCCR1B=0;
                    Done:
                    spi(0x4C); //Stop sending data
                    h2:

                    if (received != 0)
                    {

                    received= spi(0xFF);

                    goto h2;
                    }


                    spi(0xFF); // actually this returns the CRC/checksum byte
                    spi(0xFF); // at the end, send 2 dummy bytes
                    spi(0xFF);
                    CS = 1; // disable SD

                    file_pos++;

                    if ((file_pos+1)>file)
                    {

                    file_pos=0;

                    }




                    }







                    char SD_init(void)
                    {
                    char i;


                    CS=0;
                    spi(0x4C); //Stop sending data if AVR was reset, the SD card might still think it's in multi-read mode
                    h2:
                    if (received != 0)
                    {

                    received= spi(0xFF);
                    goto h2;
                    }


                    spi(0xFF); // actually this returns the CRC/checksum byte
                    spi(0xFF); // at the end, send 2 dummy bytes
                    spi(0xFF);
                    CS = 1; // disable SD





                    mmcerror1:
                    CS = 1; // disable SD

                    // start SD in SPI mode
                    for(i=0; i < 10; i++)
                    {
                    spi(0xFF); // send 10*8=80 clock pulses
                    delay_us(100);
                    }
                    CS = 0; // enable SD


                    received=command(0x40,0,0,0x95);
                    if (received != 1)
                    {
                    goto mmcerror1; // reset MMC/ put in idle mode
                    }


                    st: // if there is no MMC, prg. loops here
                    if (command(0x41,0,0,0xFF) !=0)
                    goto st; //bring out of idle state




                    CS=1; // disable MMC
                    return 1;



                    }


                    char command(char cmd, unsigned int x,unsigned int y, char crc)
                    {

                    spi(0xFF);

                    spi(cmd);
                    spi((char)(x >> 8));
                    spi((char)x);
                    spi((char)(y >> 8));
                    spi((char)y);
                    spi(crc);

                    spi(0xFF);


                    return (spi(0xFF)); // return the last received character


                    }



                    char SD_read(unsigned int x1,unsigned int y1)
                    {
                    int i;
                    char k;

                    CS = 0; // enable SD
                    delay_ms(10); //wait for cs to be stable

                    //Get Response
                    received=(command(0x51,x1,y1,0xff));
                    h1:
                    if (received != 0)
                    {

                    received= spi(0xFF);
                    goto h1;
                    }

                    // wait for 0xFE - start of any transmission
                    received = spi(0xFF);

                    while(received != 0xfe)
                    {

                    received = spi(0xFF);


                    };
                    for(i=0;i<512;i++)
                    {
                    k=spi(0xFF);


                    if (k>=32&&k<=127)
                    {
                    printf("%c",k);

                    }
                    else
                    {

                    printf("-%x-",k);

                    }



                    }

                    printf("\n\r"


                    // at the end, send 2 dummy bytes
                    spi(0xFF); // actually this returns the CRC/checksum byte
                    spi(0xFF);
                    spi(0xFF);
                    CS = 1; // disable SD

                    return 0;

                    }




                    void Get_File_Sizes(int x,int y)
                    {

                    char buf[32]={0};

                    char cnt,i;
                    int v;
                    long int Cluster=0;

                    CS = 0; // enable SD
                    delay_ms(10); //wait for cs to be stable

                    received=(command(0x51,x,y,0xff)); //read Real Root Directory

                    h1: if (received != 0)
                    {
                    received= spi(0xFF);
                    goto h1;
                    }

                    // wait for 0xFE - start of any transmission
                    received = spi(0xFF);

                    while(received != 0xfe)
                    {

                    received = spi(0xFF);

                    };




                    for(v=0,cnt=0;v<16;v++) //512/32 = 16
                    {


                    for(i=0; i < 32; i++) //get first file entry
                    {

                    buf[i]=spi(0xFF);
                    delay_us(100); //wait for spi to return value

                    }

                    if(buf[cnt]==0) //end of entries
                    {
                    goto Done;
                    }


                    Cluster=(int)buf[27]<<8; //location of first cluster in FAT
                    Cluster|=(int)buf[26];
                    Cluster*=(2048); // 4*512 (sectors/cluster*bytes/sector)




                    if(buf[11]==32) //File Entry
                    {
                    file++; //how many files there are
                    start_x[v]=0;
                    Cluster+=37376; //absolute offset to start of file
                    if((Cluster/65536)>=1) //0,37376 is the start of the FAT area
                    {

                    start_x[v]=Cluster/65536;
                    Cluster=Cluster-(start_x[v]*65536);

                    }

                    start_y[v]=Cluster;
                    printf("File %u is located at (%u,%u)\r",v,start_x[v],start_y[v]);


                    }

                    if(buf[11]==8) //Volume Label
                    {

                    v--; //don't want to keep info for Volume Name

                    }
                    else if (buf[11]==0x0f) //LFN, we want to skip these
                    {

                    v--; //by doing this, we can skip over LFN's while cnt is pointing
                    //to the next entry
                    }





                    }
                    Done:
                    printf("There are %u Wav Files\n\r",file);
                    for(v=0;v<496;v++) //skip through rest of the 512 bytes
                    {
                    spi(0xff);
                    }

                    spi(0xFF); // actually this returns the CRC/checksum byte
                    spi(0xFF);
                    CS = 1; // disable SD


                    }

                    [/code]
                    آیا کسى که وعده نیکو به او داده‏ایم و او به آن خواهد رسید، مانند کسى است که از کالاى زندگى دنیا بهره‏مندش گردانیده‏ایم [ولى‏] او روز قیامت از [جمله‏] احضارشدگان [در آتش‏] است؟ (61)(سوره قصص)

                    دیدگاه


                      #25
                      پاسخ : mikro player ?!

                      به ظاهر برنامه مشکلی نداره
                      یه چیزی:
                      اولا برنامت خیلی در هر برهمه بهتره به زیبایی روال بندیش کنی تا هم خودت بهتر بفهمی هم بقیه!!!
                      دوما لازم نیست که همه برنامتو بزاری که !!!فقط قسمت پلی رو بزاری کافیه
                      ببین این روال یه تیکه از یه برنامه خیلی بزرگه کا با PIC کار میکنه و بصورت سکتوری دیتا رو از سکتور مشخص شده به تعداد مشخص می خونه و بصورت mono پخش میکنه:
                      sub procedure PLAY_PWM_SOUND_SECTOR(dim start_sector as longint,dim n_s as word)
                      dim h,j,k as word volatile
                      trisg.0=0 'pwm
                      trisg.3=0 'pwm
                      pwm3_init(156250)
                      pwm4_init(156250)
                      pwm3_start()
                      pwm4_start()
                      for h=0 to (n_s-1)
                      SD_READ_SECTOR_INIT(h+start_sector)
                      portc.2=0
                      for j=0 to 511
                      k=spi_read(0xff)
                      Pwm3_Change_Duty(k)
                      Pwm4_Change_Duty(k)
                      delay_us(100)
                      next j
                      spi_read(0xff)
                      spi_read(0xff)
                      portc.2=0
                      next h
                      Pwm3_Stop
                      Pwm4_Stop
                      end sub
                      روال کلی کارت باید همین باشه.حالا با چه ریجستر ها و توابعی این کارو می کنی دیگه با خودته.
                      ولی به ظاهر برنامت مشکلی نداره
                      الان دقیقا مشکل چیه؟

                      [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                      دیدگاه


                        #26
                        پاسخ : mikro player ?!

                        به نام خدا سلام خوبی عباس جان اول اینکه لینک برنامه ات که گذاشتی برای دانلود غیر فعال شده دوم اینکه من میخواهم برنامه را با AVR بنویسم البته اگر امکانش هست اگر بتونی همون برنامه ای که بچه ها با زبان بیسیک گذاشتند رو به SPI سخت افزاری تبدیل کنی ممنون میشم بعد از اون تبدیل به CV دیگه کاری نداره...متشکرم خداحافظ.

                        اضافه شده در تاریخ :
                        به نام خدا باز هم سلام عباس جان این هم از لینک http://rapidshare.com/files/414463575/WAVE_PLAYER.rar
                        اگر میشه یک جایی بگذار که فیلتر شکن نخواهد البته اگر امکان داره چون من امکان دسترسی به فیلتر شکن ندارم...خداحافظ...
                        آیا کسى که وعده نیکو به او داده‏ایم و او به آن خواهد رسید، مانند کسى است که از کالاى زندگى دنیا بهره‏مندش گردانیده‏ایم [ولى‏] او روز قیامت از [جمله‏] احضارشدگان [در آتش‏] است؟ (61)(سوره قصص)

                        دیدگاه


                          #27
                          پاسخ : mikro player ?!

                          سلام
                          اولا شماتیکی که گذاشتی ایراد داره اینجا:

                          دوما برنامه ایی که گذاشتی چیز ساده ایی هست و بصورت سکتوری دیتا رو می خونه و با fat کاری نداره (خیلی سادس)
                          ولی چون من pic کارم و هر کامپایلری برای خودش یه سینتکسی داره دقیق نمی تونم تغییرش بدم
                          برنامه خیلی سادس و فکر کنم فقط با این دو تا دستور مشکل داشته باشی
                          Config Spi = Soft , Din = Pinb.2 , Dout = Portb.1 , Ss = Portb.0 , Clock = Portb.3
                          که داره spi نرم افزاری رو اینیت می کنه باید ببینی کامپایلرت چه دستور جایگزینی داره و جایگزینش کنی اگه با میکرو بیسیک کار می کردی بهت می گفتم این دستورو جاش بزار تا سخت افزار spi راه بیافته
                          Spi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH) 'must be called before initializing
                          ''''''''&# 039;'
                          SPI Master
                          8bit mode
                          primary prescaler 16
                          Slave Select disabled
                          data sampled in the middle of data output time
                          clock idle low
                          Serial output data changes on transition from idle clock state to active clock state
                          ''''''''&# 039;'
                          این چهار پنج خط بعدی توضیح کار این دستوره
                          توی برنامت به جای shift_out و shift_in هم به ترتیب از
                          Spi_Write(255)
                          take = Spi_Read(255)
                          استفاده کن
                          بازم تاکید میکنم باید ببینی که کامپایلرت چه دستورات جایگزینی داره احتمال زیاد شبیه همین هاست
                          یه چیز دیگه اگه از spi سخت افزاری استفاده کردی باید پینهای متصل شده به mmc رو به پایه های سخت افزار spi میکروت متصل کنی
                          سوالی بود بگو

                          [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                          دیدگاه


                            #28
                            پاسخ : mikro player ?!

                            به نام خدا سلام من برنامه را به cv تغییر دادم ولی برنامه باز هم کار نکرد میگی چکار کنم این هم از لینک برنامه
                            http://rapidshare.com/files/414799041/WAVE_PLAYER_CV.rar
                            آیا کسى که وعده نیکو به او داده‏ایم و او به آن خواهد رسید، مانند کسى است که از کالاى زندگى دنیا بهره‏مندش گردانیده‏ایم [ولى‏] او روز قیامت از [جمله‏] احضارشدگان [در آتش‏] است؟ (61)(سوره قصص)

                            دیدگاه


                              #29
                              پاسخ : mikro player ?!

                              سلام
                              من برنامتو یه نگاهی انداختم
                              روال init رو اینجوری اصلاح کردم(اونجوری که فکرمی کنم درسته نه 100% ):
                              void MMC_INIT()
                              {
                              CS=0;
                              for(t=0;t<10;t++)
                              {
                              spi(0xFF);
                              }

                              spi(0x40); /////reset command
                              spi(0);
                              spi(0);
                              spi(0);
                              spi(0);
                              spi(0x95);

                              while(received != 1)
                              {
                              received=spi(0xff);
                              }

                              CS=1;
                              spi(0x41); /////init command
                              spi(0);
                              spi(0);
                              spi(0);
                              spi(0);

                              while(received != 0)
                              {
                              received=spi(0xff);
                              }

                              }
                              در مورد خواندن سکتور یکم عجیب بود من روال خودمو گذاشتم بعد خودت به C تبدیلش کن:
                              sub procedure SD_READ_SECTOR(dim sector as longint) 'SECTOR
                              dim i as byte
                              sector=sector*2
                              portc.2=0 'CS
                              SPI_write(0x51)
                              SPI_write(higher(sector))
                              SPI_write(hi(sector))
                              SPI_write(lo(sector))
                              SPI_write(0x00)
                              SPI_write(0x00)
                              while SPI_read(0xff)<>0xfe wend
                              for i=0 to 255
                              buffer0[2*i]=spi_read(0xff)
                              buffer0[2*i+1]=spi_read(0xff)
                              next i
                              spi_read(255)
                              spi_read(255)
                              portc.2=1 'CS
                              end sub
                              فقط یه چیزی این روال میاد ادرس خود سکتور رو می گیره نه بایتو
                              برای اطلاعات بیشتر برو به
                              http://www.eca.ir/forum2/index.php?topic=39933.0
                              (اطلاعات اینجا مر جعه نه اطلاعات من)
                              ببینم چی کار می کنی

                              [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                              دیدگاه


                                #30
                                پاسخ : mikro player ?!

                                به نام خدا سلا خوبی متاسفانه دیشب یک SD 2G داشتم که تقریبا سوخت حالا فقط دو تا MMC 32M دارم که متاسفانه م دار با اونها کار نمیکنه نمیدونی چه تغییری باید در برنامه بدم تا با اونها کار کنه متشکرم خداحافظ...
                                آیا کسى که وعده نیکو به او داده‏ایم و او به آن خواهد رسید، مانند کسى است که از کالاى زندگى دنیا بهره‏مندش گردانیده‏ایم [ولى‏] او روز قیامت از [جمله‏] احضارشدگان [در آتش‏] است؟ (61)(سوره قصص)

                                دیدگاه

                                لطفا صبر کنید...
                                X