اطلاعیه

Collapse
No announcement yet.

کار با ماژول max6675

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

    کار با ماژول max6675

    سلام من میخوام با ماژول همین سایت eca کار کنم ارتباط باهاش spi هست هرکار میکنم نمیتونم دیتارو بخونم میشه کمکم کنین ؟؟؟؟؟؟؟
    o_O

    #2
    پاسخ : کار با ماژول max6675

    بیسیک کار کردی یا سی
    من با کد ویژن درایو کردم

    دیدگاه


      #3
      پاسخ : کار با ماژول max6675

      نوشته اصلی توسط S S
      بیسیک کار کردی یا سی
      من با کد ویژن درایو کردم
      با کدویژن کارمیکنم هرکاری کردم نتونستم دیتارو بخونم تو lcd فقط عدد 255 رو نشون میده تغییر نمیکنه اگه میشه یه نمونه برنامه بدین خیلی ممنون میشم :rolleyes:
      o_O

      دیدگاه


        #4
        پاسخ : کار با ماژول max6675


        [code=c]
        #define SCK 5 //SCK (serial clock) pin number
        #define CS 2 //CS (chip select) pin number
        #define SO 4 //SO (serial out, also MISO) pin number

        #define SCK_Port PORTB //SCK port name
        #define CS_Port PORTB //CS port name
        #define SO_Pin PINB //SO pin name
        #define SO_Port PORTB //so pin name

        #define SCK_DDR DDRB //SCK DDR name
        #define CS_DDR DDRB //CS DDR name
        #define SO_DDR DDRB //SO DDR name



        int gettemp(void);
        void init_6675(void);
        //char getTC(void);

        int gettemp(void){ //Temperatur holen.
        char bite = 0, bitnr = 12; //Variablen
        char foo1 = 0;
        int so_data = 0;

        CS_Port &= ~(1 << CS);
        for(foo1 = 0 ; foo1 < 16 ; foo1++){
        bite = 15 - foo1;
        SCK_Port |= (1 << SCK);
        if((bite <= 14) && (bite >= 3)){
        if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
        bitnr--; //zنhlen wir runter...
        so_data |= (1 << bitnr); // und schieben eine 1 an bit x
        }else{ //WENN dem NICHT so ist, dann...
        bitnr--; //zنhlen wir runter...
        so_data &= ~(1 << bitnr); //und schieben eine 0 an bit x
        }
        }else{ //weis au nimmer, was das soll.
        bitnr = 12;
        }
        SCK_Port &= ~(1 << SCK); //SCK LO
        }
        CS_Port |= (1 << CS);
        return so_data*0.25; //Das ist doch mal was ;D
        }


        // getTC() returns 0 if Thermocouple is not connected, 255 if thermocuple is connected
        // (to enable this feature T- must be connected to GND)
        //char getTC(void){ //Temperatur holen. //Variablen
        // char TC = 0;
        // char foo1 = 0;
        // CS_Port &= ~(1 << CS); //Chip select anlegen
        // for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen //Die Aktuelle Bitnr berechnen.
        // SCK_Port |= (1 << SCK); //SCK hi
        // if(foo1 == 2){ //das 3. bit ist für uns relevant.
        // if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
        // TC = 0;
        // }else{ //WENN dem NICHT so ist, dann...
        // TC = 255;
        // }
        // }
        // SCK_Port &= ~(1 << SCK); //SCK LO
        // }
        // CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
        // return TC; //Das ist doch mal was ;D
        //}
        //

        //Initiates the MAX6675 and IO-pins
        void init_6675(void){ //AVR initialisieren

        SO_DDR &= ~(1 << SO);
        CS_DDR |= (1 << CS);
        SCK_DDR |= (1 << SCK); //IOs setzen

        SO_Port |= (1<<SO); //Pullups an. (Wichtig für MAX6675, der kann nicht anders, hab ich festgestellt...

        CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
        SCK_Port &= ~(1 << SCK); //SCK LO
        }



        [/code]



        دیدگاه


          #5
          پاسخ : کار با ماژول max6675

          نوشته اصلی توسط S S
          [code=c]
          #define SCK 5 //SCK (serial clock) pin number
          #define CS 2 //CS (chip select) pin number
          #define SO 4 //SO (serial out, also MISO) pin number

          #define SCK_Port PORTB //SCK port name
          #define CS_Port PORTB //CS port name
          #define SO_Pin PINB //SO pin name
          #define SO_Port PORTB //so pin name

          #define SCK_DDR DDRB //SCK DDR name
          #define CS_DDR DDRB //CS DDR name
          #define SO_DDR DDRB //SO DDR name



          int gettemp(void);
          void init_6675(void);
          //char getTC(void);

          int gettemp(void){ //Temperatur holen.
          char bite = 0, bitnr = 12; //Variablen
          char foo1 = 0;
          int so_data = 0;

          CS_Port &= ~(1 << CS);
          for(foo1 = 0 ; foo1 < 16 ; foo1++){
          bite = 15 - foo1;
          SCK_Port |= (1 << SCK);
          if((bite <= 14) && (bite >= 3)){
          if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
          bitnr--; //zنhlen wir runter...
          so_data |= (1 << bitnr); // und schieben eine 1 an bit x
          }else{ //WENN dem NICHT so ist, dann...
          bitnr--; //zنhlen wir runter...
          so_data &= ~(1 << bitnr); //und schieben eine 0 an bit x
          }
          }else{ //weis au nimmer, was das soll.
          bitnr = 12;
          }
          SCK_Port &= ~(1 << SCK); //SCK LO
          }
          CS_Port |= (1 << CS);
          return so_data*0.25; //Das ist doch mal was ;D
          }


          // getTC() returns 0 if Thermocouple is not connected, 255 if thermocuple is connected
          // (to enable this feature T- must be connected to GND)
          //char getTC(void){ //Temperatur holen. //Variablen
          // char TC = 0;
          // char foo1 = 0;
          // CS_Port &= ~(1 << CS); //Chip select anlegen
          // for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen //Die Aktuelle Bitnr berechnen.
          // SCK_Port |= (1 << SCK); //SCK hi
          // if(foo1 == 2){ //das 3. bit ist für uns relevant.
          // if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
          // TC = 0;
          // }else{ //WENN dem NICHT so ist, dann...
          // TC = 255;
          // }
          // }
          // SCK_Port &= ~(1 << SCK); //SCK LO
          // }
          // CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
          // return TC; //Das ist doch mal was ;D
          //}
          //

          //Initiates the MAX6675 and IO-pins
          void init_6675(void){ //AVR initialisieren

          SO_DDR &= ~(1 << SO);
          CS_DDR |= (1 << CS);
          SCK_DDR |= (1 << SCK); //IOs setzen

          SO_Port |= (1<<SO); //Pullups an. (Wichtig für MAX6675, der kann nicht anders, hab ich festgestellt...

          CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
          SCK_Port &= ~(1 << SCK); //SCK LO
          }



          [/code]
          خیلی معذرت میخوام نمیتونم دمارو بیارم رو lcd بخش تابع اصلیم هم اینطوری نوشتم بنظرتون درسته یا مشکلش چیه ?
          void main (){
          char lcd_buffer[16];
          DDRB=0xB4;
          lcd_init (16);
          lcd_clear();
          while (1){
          SO_DDR=spi(0);
          sprintf (lcd_buffer,"data is=%u ",SO_DDR);
          lcd_clear();
          lcd_puts(lcd_buffer);
          delay_ms(250);
          }
          }
          o_O

          دیدگاه


            #6
            پاسخ : کار با ماژول max6675

            شما برای خواندن دما از دستور
            gettemp
            دستفاده کن مثلا
            [code=c]
            int temp;
            temp=gettemp();
            [/code]

            قبل از while اصلی هم از دستور
            [code=c]
            init_6675();
            [/code]

            باید استفاده کنی
            توی برنامه هم باید شماره های پایه های آی سی مشخص کنی که به کدام پین میکرو متصل شده
            این کد ببین باید تغییر کنه طبق اتصال شما
            [code=c]
            #define SCK 5 //SCK (serial clock) pin number
            #define CS 2 //CS (chip select) pin number
            #define SO 4 //SO (serial out, also MISO) pin number
            [/code]

            دیدگاه


              #7
              پاسخ : کار با ماژول max6675

              نوشته اصلی توسط S S
              شما برای خواندن دما از دستور
              gettemp
              دستفاده کن مثلا
              [code=c]
              int temp;
              temp=gettemp();
              [/code]

              قبل از while اصلی هم از دستور
              [code=c]

              init_6675();
              [/code]

              باید استفاده کنی
              توی برنامه هم باید شماره های پایه های آی سی مشخص کنی که به کدام پین میکرو متصل شده
              این کد ببین باید تغییر کنه طبق اتصال شما
              [code=c]
              #define SCK 5 //SCK (serial clock) pin number
              #define CS 2 //CS (chip select) pin number
              #define SO 4 //SO (serial out, also MISO) pin number
              [/code]
              داداش من با spi مستر و اسلیو انجام دادم ولی با این ماژول نمیدونم چرا دیتا اصلا نمیاد مگه spi چهارتا پایه نداره که ماهم باید پایه های ماژول رو به ترتیب ss=cs
              miso=so
              sck=sck
              وصل کنیم درسته ؟
              تو پروتیوس هم با اسیلوسکوپ نگاه میکنم کلاک میده لحظه ی اول هم so وss یه کلاک میده که کامل نیست بعد صفر میشه

              o_O

              دیدگاه


                #8
                پاسخ : کار با ماژول max6675

                این برنامه از spi سخت افزاری استفاده نمیکنه و نرم افزاری درایو میکنه.
                فاصله زمان هر اسکن هم باید حد اقل 500 میلی ثانیه باشه
                به پروتوس هم اعتماد نکن

                دیدگاه


                  #9
                  پاسخ : کار با ماژول max6675

                  میشه واسه زبان بیسیک هم یه نمونه بذارین؟؟؟

                  دیدگاه


                    #10
                    پاسخ : کار با ماژول max6675

                    نوشته اصلی توسط sepehr63 نمایش پست ها
                    [code=c]
                    #define SCK 5 //SCK (serial clock) pin number
                    #define CS 2 //CS (chip select) pin number
                    #define SO 4 //SO (serial out, also MISO) pin number

                    #define SCK_Port PORTB //SCK port name
                    #define CS_Port PORTB //CS port name
                    #define SO_Pin PINB //SO pin name
                    #define SO_Port PORTB //so pin name

                    #define SCK_DDR DDRB //SCK DDR name
                    #define CS_DDR DDRB //CS DDR name
                    #define SO_DDR DDRB //SO DDR name



                    int gettemp(void);
                    void init_6675(void);
                    //char getTC(void);

                    int gettemp(void){ //Temperatur holen.
                    char bite = 0, bitnr = 12; //Variablen
                    char foo1 = 0;
                    int so_data = 0;

                    CS_Port &= ~(1 << CS);
                    for(foo1 = 0 ; foo1 < 16 ; foo1++){
                    bite = 15 - foo1;
                    SCK_Port |= (1 << SCK);
                    if((bite <= 14) && (bite >= 3)){
                    if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
                    bitnr--; //zنhlen wir runter...
                    so_data |= (1 << bitnr); // und schieben eine 1 an bit x
                    }else{ //WENN dem NICHT so ist, dann...
                    bitnr--; //zنhlen wir runter...
                    so_data &= ~(1 << bitnr); //und schieben eine 0 an bit x
                    }
                    }else{ //weis au nimmer, was das soll.
                    bitnr = 12;
                    }
                    SCK_Port &= ~(1 << SCK); //SCK LO
                    }
                    CS_Port |= (1 << CS);
                    return so_data*0.25; //Das ist doch mal was ;D
                    }


                    // getTC() returns 0 if Thermocouple is not connected, 255 if thermocuple is connected
                    // (to enable this feature T- must be connected to GND)
                    //char getTC(void){ //Temperatur holen. //Variablen
                    // char TC = 0;
                    // char foo1 = 0;
                    // CS_Port &= ~(1 << CS); //Chip select anlegen
                    // for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen //Die Aktuelle Bitnr berechnen.
                    // SCK_Port |= (1 << SCK); //SCK hi
                    // if(foo1 == 2){ //das 3. bit ist f�r uns relevant.
                    // if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
                    // TC = 0;
                    // }else{ //WENN dem NICHT so ist, dann...
                    // TC = 255;
                    // }
                    // }
                    // SCK_Port &= ~(1 << SCK); //SCK LO
                    // }
                    // CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
                    // return TC; //Das ist doch mal was ;D
                    //}
                    //

                    //Initiates the MAX6675 and IO-pins
                    void init_6675(void){ //AVR initialisieren

                    SO_DDR &= ~(1 << SO);
                    CS_DDR |= (1 << CS);
                    SCK_DDR |= (1 << SCK); //IOs setzen

                    SO_Port |= (1<<SO); //Pullups an. (Wichtig f�r MAX6675, der kann nicht anders, hab ich festgestellt...

                    CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
                    SCK_Port &= ~(1 << SCK); //SCK LO
                    }



                    [/code]
                    شرمنده میشه یکم بیشتر توضیح بدید من نفهمیدم از این کدا کجا استفاده کنم.اگه امکانش هست یه نمونه کد بزارید

                    دیدگاه


                      #11
                      پاسخ : کار با ماژول max6675

                      نوشته اصلی توسط peyman.electron نمایش پست ها
                      داداش من با spi مستر و اسلیو انجام دادم ولی با این ماژول نمیدونم چرا دیتا اصلا نمیاد مگه spi چهارتا پایه نداره که ماهم باید پایه های ماژول رو به ترتیب ss=cs
                      miso=so
                      sck=sck
                      وصل کنیم درسته ؟
                      تو پروتیوس هم با اسیلوسکوپ نگاه میکنم کلاک میده لحظه ی اول هم so وss یه کلاک میده که کامل نیست بعد صفر میشه
                      سلام.
                      اگر از پروتئوس ورژن 8 به بالا استفاده می کنید نمی تونید ازش استفاده کنیدحتی داخل پوشه پروژه PIC18 خود پروتئوس هم کار نمیکنه پروتئوستون به ورژن 7.10 تغییر بدید حتما جواب می گیرید

                      دیدگاه


                        #12
                        پاسخ : کار با ماژول max6675

                        سلام من تو نمایش در حالت رفرش دارم کسی میتونه کمکی کنه؟حالت استاتیک دما رو قشنگ نشون میده وخوبه ولی تو رفرش اعداد بهم میریزه
                        { خلاف قوانین - پاک شد }

                        دیدگاه

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