اطلاعیه

Collapse
No announcement yet.

spi+lcd در CCS

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    spi+lcd در CCS

    سلام
    من این برنامه رو برای ارسال اطلاعات روی پورت سریال(SPI) ونمایش اون روی lcd نوشتم ولی روی LCD هیچی نمایش داده نمیشه. این برنامه ی مستره که توش متغیر mamali از صفر شروع میکنه وبعد از ارسال مقدار داخلش یکی بهش اضافه میشه تا به 10 میرسه:
    #include <16f877a.h> //micro name
    #fuses HS // set frequency oscillator at 20MHz
    #use delay(Clock=20000000) // should be set this parameter for config delay
    #define use_portb_lcd TRUE // Set PORTB for LCD Pins
    #include <lcd.c> // Set LCD Header
    char mohsen=0; // mohsen is a integer variable
    main ()
    {
    while(mohsen<10)
    setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);
    spi_write(mohsen);
    delay_ms(1000);
    mohsen++; // Increment
    }

    اینم برنامه ی اسلیو که بعد از دریافت متغیر قلی رو بار میکنه و میریزه رو LCD راستی مشکل اصلی دیگه اینه که من مدارم رو این شکلی بستم آیا درسته lcd رو باید همین جوری بست؟

    #include <16f877a.h> //micro name
    #fuses HS // set frequency oscillator at 20MHz
    #use delay(Clock=20000000) // for config delay should be set this parameter
    #define use_portb_lcd TRUE // Set PORTB for LCD Pins
    #include <lcd.c> // Set LCD Header
    char gholi; // gholi is a char variable
    main ()
    {
    while(1)
    setup_spi(spi_slave | SPI_H_TO_L | SPI_CLK_DIV_16);//config characters of spi
    gholi= spi_read(); //read data from MASTER
    delay_ms(1000); //Wait 1 sec
    lcd_init();
    lcd_gotoxy(1,1);
    lcd_putc("gholi"
    delay_ms(500);
    lcd_putc(" "
    }





    #2
    پاسخ : spi+lcd در CCS

    برنامه مستر تقریبا درسته . فقط دستور SETUP_SPI رو از while بیار بیرون. این دستور یکبار نوشته بشه کافیه.
    اما برنامه اسلیو :
    دستور SETUP_SPI و دستور lcd_init رو از حلقه بیار بیرون. نیازی نیست که این توابع دائما فراخوانی بشن.
    بهتره که دستور SPI_READ رو با این IF بکار ببرید :
    if(spi_data_is_in)
    یعنی اول چک کن ببین کاراکتری اومده یا نه. اگه اومده بود اونوقت بخونش.
    تو دستور Lcd_putc شما عبارت gholi رو داخل دابل کوتیشن گذاشتید . اینطوری خود عبارت gholi چاپ میشه نه مقدار متغیر gholi !!! درضمن توصیه من اینه که برای چاپ اطلاعات بر روی LCD از دستور printf استفاده کنید.

    دیدگاه


      #3
      پاسخ : spi+lcd در CCS

      سلام
      من برنامه رو به این صورت تغییر دادم اما اصلا پورت های lcd صفر یا یک نمی شوند؟
      چه کار کنم مدارم رو که تو. عکس گذاشتم دیدین مشکلی نداشت؟
      #include <16f877a.h> //micro name
      #fuses HS // set frequency oscillator at 20MHz
      #use delay(Clock=20000000) // for config delay should be set this parameter
      #define use_portb_lcd TRUE // Set PORTB for LCD Pins
      #include <lcd.c> // Set LCD Header
      lcd_init();
      char gholi; // gholi is a char variable
      char result;// result as char
      main ()
      {
      setup_spi(spi_slave | SPI_H_TO_L | SPI_CLK_DIV_16);//config characters of spi
      result= spi_data_is_in();
      while(result=1)
      gholi= spi_read(); //read data from MASTER
      delay_ms(1000); //Wait 1 sec
      lcd_gotoxy(1,1);
      lcd_putc(gholi);
      delay_ms(500);
      lcd_putc(" "
      }

      دیدگاه


        #4
        پاسخ : spi+lcd در CCS

        راستی من در نهایت هدفم اینه که یه متغیر 16 بیتی رو با spi بفرستم ولی این 8 بیتیه باید چه کار کنم؟؟؟؟؟؟؟(یه DAC سریال 16 بیتی دارم که باید راش بندازم.)

        یکم در مورد دستور Printf توضیح میدین انگار اینم کاراکتر 8 بیتیو ساپورت میکنه برای بیشترش باید چه کار کرد؟؟؟

        دیدگاه


          #5
          پاسخ : spi+lcd در CCS

          سلام من برنام جدید رو هم گذاشتم ولی همون مشکل قبلی یعنی اصلا پایه های LCD خاموش روشن نمیشن تا مشخص بشه DATA بهشون رسیده.

          دیدگاه


            #6
            پاسخ : spi+lcd در CCS

            این برنامه رو یه چک بکن ببین چی میشه.
            ببین رو LCD چیزی مینویسه؟؟
            #include <16f877a.h> //micro name
            #fuses HS // set frequency oscillator at 20MHz
            #use delay(Clock=20000000) // for config delay should be set this parameter
            #define use_portb_lcd TRUE // Set PORTB for LCD Pins
            #include <lcd.c> // Set LCD Header
            int8 gholi; // gholi is a int variable
            void main(){
            lcd_init();
            printf(lcd_putc,"hello"
            setup_spi(spi_slave|spi_h_to_l|spi_clk_div_16);
            delay_ms(5);
            while(1){
            while(!spi_data_is_in);
            gholi=spi_read();
            lcd_gotoxy(1,2);
            printf(lcd_putc,"%d",gholi);
            }
            }

            دیدگاه


              #7
              پاسخ : spi+lcd در CCS

              سلام
              من برنامه شما رو کامپایل کردم ولی بازم LCD روشن نمیشه راستی شما خودتون برنامه رو روی پروتوس امتحان کردین ببینید جواب می گررید یا نه؟
              شاید در نهایت مشکل ماله پروتوس من باشه. شما یه امتحتنی بکنید یه خبر به من بدین ممنون میشم.

              دیدگاه


                #8
                پاسخ : spi+lcd در CCS

                بیا . کامل 100% تست شده و جواب داده .
                فایل های پیوست شده

                دیدگاه


                  #9
                  پاسخ : spi+lcd در CCS

                  آقای ایجی از شما تشکر می کنم مشکلم حل شد. برنامه شما خیلی کمک کرد. بازم ممنون

                  دیدگاه

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