اطلاعیه

Collapse
No announcement yet.

مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

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

    مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

    دوستان عزیز سلام من حدودا 2 سال پیش یه شمارنده 4 رقمی با سگمن 4.8 در 7.2 ساختم و تحویل مشتری دادم یادمه اون زمان همش سایه مینداخت و من به سختی تونستم مشکل رو حل کنم اما متاسفانه از اون کار ارشیوی ندارم و برنامه رو هم یادم نیست که چه جوری نوشته بودم الان برنامه رو نوشتم و توی پروتئوس جواب میده اما توی عمل همه روی هم می افته میدونم که مشکل توی تنظیم تایم هاست البته سگمنت بزرگ با ولتاژ 7.5 کار میکنه که این خودش یه مشکله اینو با ترانزیستور مثبت حل کردم دوستان اگه کسی تجربهای داره لطفا کمک کنه من 2 روزه با این موضوع درگیرم برنامه ای که من نوشتم اینه:
    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V1.25.9 Standard
    Automatic Program Generator
    © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 2009/03/03
    Author : F4CG
    Company : F4CG
    Comments:


    Chip type : ATmega8
    Program type : Application
    Clock frequency : 8.000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 256
    ************************************************** ***/

    #include <mega8.h>
    #include <delay.h>

    int int_Number=0;

    void segment_putsf(int int_Number)
    {
    if (int_Number==0)
    PORTD=0X40;
    else
    if (int_Number==1)
    PORTD=0X79;
    else
    if (int_Number==2)
    PORTD=0X24;
    else
    if (int_Number==3)
    PORTD=0X30;
    else
    if (int_Number==4)
    PORTD=0X19;
    else
    if (int_Number==5)
    PORTD=0X12;
    else
    if (int_Number==6)
    PORTD=0X02;
    else
    if (int_Number==7)
    PORTD=0X78;
    else
    if (int_Number==8)
    PORTD=0X00;
    else
    if (int_Number==9)
    PORTD=0X10;
    }

    void segment_puts(int int_Number)
    {
    int UInt_number=0;
    int uch_digit=0;
    unsigned char uch_TimeCounter=0;
    if (int_Number<10)
    {
    // while (uch_TimeCounter<=6)
    // {
    segment_putsf(int_Number);
    PORTB.3=0;
    delay_ms(20);
    PORTB.3=1;
    // delay_ms(10);
    segment_putsf(0);
    PORTB.2=0;
    delay_ms(20);
    PORTB.2=1;
    // delay_ms(10);
    segment_putsf(0);
    PORTB.1=0;
    delay_ms(20);
    PORTB.1=1;
    // delay_ms(10);
    segment_putsf(0);
    PORTB.0=0;
    delay_ms(20);
    PORTB.0=1;
    // delay_ms(10);
    // uch_TimeCounter++; // delay 1second
    // }
    }
    else
    if (int_Number>9 && int_Number<100)
    {
    // while (uch_TimeCounter<=6)
    // {
    uch_digit=int_Number%10;
    segment_putsf(uch_digit);
    PORTB.3=0;
    delay_ms(10);
    PORTB.3=1;
    UInt_number=int_Number/10;
    uch_digit=UInt_number%10;
    segment_putsf(uch_digit);
    PORTB.2=0;
    delay_ms(10);
    PORTB.2=1;
    segment_putsf(0);
    PORTB.1=0;
    delay_ms(10);
    PORTB.1=1;
    segment_putsf(0);
    PORTB.0=0;
    delay_ms(10);
    PORTB.0=1;
    // uch_TimeCounter++; // delay 1second
    // }
    }
    else
    if (int_Number>99 && int_Number<1000)
    {
    while (uch_TimeCounter<=6)
    // {
    uch_digit=int_Number%10;
    segment_putsf(uch_digit);
    PORTB.3=0;
    delay_ms(10);
    PORTB.3=1;
    UInt_number=int_Number/10;
    uch_digit=UInt_number%10;
    PORTB.2=0;
    segment_putsf(uch_digit);
    delay_ms(10);
    PORTB.2=1;
    UInt_number=UInt_number/10;
    uch_digit=UInt_number%10;
    PORTB.1=0;
    segment_putsf(uch_digit);
    delay_ms(10);
    PORTB.1=1;
    segment_putsf(0);
    PORTB.0=0;
    delay_ms(10);
    PORTB.0=1;
    // uch_TimeCounter++; // delay 1second
    // }
    }
    else
    if (int_Number>999 && int_Number<10000)
    {
    // while (uch_TimeCounter<=6)
    // {
    uch_digit=int_Number%10;
    segment_putsf(uch_digit);
    PORTB.3=0;
    delay_ms(10);
    PORTB.3=1;
    UInt_number=int_Number/10;
    uch_digit=UInt_number%10;
    segment_putsf(uch_digit);
    PORTB.2=0;
    delay_ms(10);
    PORTB.2=1;
    UInt_number=UInt_number/10;
    uch_digit=UInt_number%10;
    segment_putsf(uch_digit);
    PORTB.1=0;
    delay_ms(10);
    PORTB.1=1;
    UInt_number=UInt_number/10;
    uch_digit=UInt_number%10;
    segment_putsf(uch_digit);
    PORTB.0=0;
    delay_ms(10);
    PORTB.0=1;

    // uch_TimeCounter++; // delay 1second
    // }
    }
    }

    // Declare your global variables here
    void main(void)
    {
    // Declare your local variables here
    unsigned charuch_pin_status=0;
    // Input/Output Ports initialization
    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTB=0xFF;
    DDRB=0xFF;

    // Port C initialization
    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State6=T State5=T State4=T State3=T State2=P State1=P State0=P
    PORTC=0x07;
    DDRC=0x00;

    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
    PORTD=0xFF;
    DDRD=0xFF;


    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    TCCR0=0x00;
    TCNT0=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
    MCUCR=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;

    while (1)
    {
    // Place your code here
    if (charuch_pin_status==1)
    {
    if (PINC.0==0)
    {
    charuch_pin_status=0;
    segment_puts(int_Number);
    int_Number++;
    }
    }
    if (PINC.0==1)
    {
    charuch_pin_status=1;
    }
    if (PINC.1==0) // RESET
    int_Number=0;

    segment_puts(int_Number);

    };
    }
    ممنون میشم اگه راهنمایی کنید.
    سه کس را شنیدم که غیبت رواست وز این درگذشتی چهارم خطاست
    یکی پادشاهی ملامت پسند کز او بر دل خلق بینی گزند
    حلال است از او نقل کردن خبر مگر خلق باشند از او بر حذر
    دوم پرده بر بی حیائی متن که خود میآ‌درد پرده بر خویشتن
    ز حوضش مدار ای برادر نگاه که او میآ‌درافتد به گردن به چاه
    سوم کژ ترازوی ناراست خوی ز فعل بدش هرچه دانی بگوی

    #2
    پاسخ : مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

    دوست عزیز

    شما باید وقفه تایمر رو طوری تنظیم کنید که هر 1ms سون سگمنت هاتونو refresh کنه . در این صورت هیچ مشکلی نخواهید داشت .

    موفق باشید

    دیدگاه


      #3
      پاسخ : مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

      سلام
      من این برنامه رو 2 سال پیش قبل اینکه برم خدمت نوشته بودم از وقفه توش استفاده نشده ولی خوب کار میکرد زمانشم از ds1307 می گرفت . امیدوارم بدردت بخوره




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

      Project :
      Version :
      Date : 5/1/2007
      Author : F4CG
      Company : F4CG
      Comments:


      Chip type : ATmega16L
      Program type : Application
      Clock frequency : 8.000000 MHz
      Memory model : Small
      External SRAM size : 0
      Data Stack size : 256
      ************************************************** ***/

      #include <mega16.h>
      #include <delay.h>
      // I2C Bus functions
      #asm
      .equ __i2c_port=0x18 ;PORTB
      .equ __sda_bit=0
      .equ __scl_bit=1
      #endasm
      #include <i2c.h>

      // DS1307 Real Time Clock functions
      #include <ds1307.h>

      // Declare your global variables here
      unsigned char h,m,s,digit,i;
      void bcdtodigit(unsigned char);
      void main(void)
      {
      // Declare your local variables here

      // Input/Output Ports initialization
      // Port A initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
      // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0
      PORTA=0x00;
      DDRA=0x0F;

      // Port B 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
      PORTB=0x00;
      DDRB=0x00;

      // Port C initialization
      // Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
      // State7=T State6=T State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
      PORTC=0x00;
      DDRC=0x3F;

      // 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;

      // I2C Bus initialization
      i2c_init();

      // DS1307 Real Time Clock initialization
      // Square wave output on pin SQW/OUT: Off
      // SQW/OUT pin state: 0
      rtc_init(0,0,0);
      rtc_set_time(23,59,50);
      //rtc_set_date(10,10,85);
      while (1)
      {
      rtc_get_time(&h,&m,&s);
      //rtc_get_date(&y,&mo,&d);

      digit=h/10;
      PORTC=0x01;
      bcdtodigit(digit);
      delay_ms(3);

      digit=h%10;
      PORTC=0x02;
      bcdtodigit(digit);
      delay_ms(3);

      digit=m/10;
      PORTC=0x04;
      bcdtodigit(digit);
      delay_ms(3);

      digit=m%10;
      PORTC=0x08;
      bcdtodigit(digit);
      delay_ms(3);

      digit=s/10;
      PORTC=0x10;
      bcdtodigit(digit);
      delay_ms(3);

      digit=s%10;
      PORTC=0x20;
      bcdtodigit(digit);
      delay_ms(3);

      };
      }


      //bit haye kam arzashe yek port
      void bcdtodigit(unsigned char digit)
      {
      #define BCD0 PORTA=0x00
      #define BCD1 PORTA=0x01
      #define BCD2 PORTA=0x02
      #define BCD3 PORTA=0x03
      #define BCD4 PORTA=0x04
      #define BCD5 PORTA=0x05
      #define BCD6 PORTA=0x06
      #define BCD7 PORTA=0x07
      #define BCD8 PORTA=0x08
      #define BCD9 PORTA=0x09

      ////////////////////////////////

      // barabar gharar dadane bcd har adad
      if(digit==0){digit=BCD0;}
      else if(digit==1){digit=BCD1;}
      else if(digit==2){digit=BCD2;}
      else if(digit==3){digit=BCD3;}
      else if(digit==4){digit=BCD4;}
      else if(digit==5){digit=BCD5;}
      else if(digit==6){digit=BCD6;}
      else if(digit==7){digit=BCD7;}
      else if(digit==8){digit=BCD8;}
      else if(digit==9){digit=BCD9;}
      ////////////////////////////////////
      }
      A-Hosseini

      دیدگاه


        #4
        پاسخ : مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

        نوکرتم دادا ممنون از بزرگواریت که کمک کردی منم بعضی برنامه ها رو نوشتم و دارم اگه بتونم کمک کنم خوشحال میشم مثلا کار با سنسور دما و رطوبت سری shtxx رو نوشتم اگه خواستی بگو بهت بدم و نوکرتم یا علی
        سه کس را شنیدم که غیبت رواست وز این درگذشتی چهارم خطاست
        یکی پادشاهی ملامت پسند کز او بر دل خلق بینی گزند
        حلال است از او نقل کردن خبر مگر خلق باشند از او بر حذر
        دوم پرده بر بی حیائی متن که خود میآ‌درد پرده بر خویشتن
        ز حوضش مدار ای برادر نگاه که او میآ‌درافتد به گردن به چاه
        سوم کژ ترازوی ناراست خوی ز فعل بدش هرچه دانی بگوی

        دیدگاه


          #5
          پاسخ : مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

          راستی من برنامه ام رو نوشتم و جواب هم داده تو پروتئوس همون برنامه هست که اول همین صفحه گذاشتم اگه دوستان کمکم کنن که همینو روبراش کنم عالی میشه چون من سخت افزارشو کامل آماده کردم اما متاسفانه برنامه رو که روش میریزم اعداد رو هم سایه میندازن و هیچ عددی قابل تشخیص نیست اگه کمک کنید ممنون میشم راسش خیلی گیرم :sad:
          سه کس را شنیدم که غیبت رواست وز این درگذشتی چهارم خطاست
          یکی پادشاهی ملامت پسند کز او بر دل خلق بینی گزند
          حلال است از او نقل کردن خبر مگر خلق باشند از او بر حذر
          دوم پرده بر بی حیائی متن که خود میآ‌درد پرده بر خویشتن
          ز حوضش مدار ای برادر نگاه که او میآ‌درافتد به گردن به چاه
          سوم کژ ترازوی ناراست خوی ز فعل بدش هرچه دانی بگوی

          دیدگاه


            #6
            پاسخ : مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

            عزیز دل برادر

            شما باید کاری کنید که هر 1ms سون سگمنت هاتون refresh بشن . در این صورت مشکل سایه نخواهید داشت .

            موفق باشید

            دیدگاه


              #7
              پاسخ : مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

              سلام از راستش من یه برنامه فلاشر با c نوشتم که روی پورت a یه برنامه و روی پورت b و d یه برنامه دیگه اجرا میکنه ولی مشکل اینجاست که برنامه هر دو پورت رو همزمان اجرا نمیکنه میتونید در این مورد کمکم کنید برنامش چطوری میشه ممنون میشم راستش من یخورده تازه واردم اگه لطف کنید و به زبان ساده راهنمایی کنین یا در نوشتن برنامه کمکم کنید ممنون میشم
              { خلاف قوانین - پاک شد }

              دیدگاه


                #8
                پاسخ : مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

                سلام از راستش من یه برنامه فلاشر با c نوشتم که روی پورت a یه برنامه و روی پورت b و d یه برنامه دیگه اجرا میکنه ولی مشکل اینجاست که برنامه هر دو پورت رو همزمان اجرا نمیکنه میتونید در این مورد کمکم کنید برنامش چطوری میشه ممنون میشم راستش من یخورده تازه واردم اگه لطف کنید و به زبان ساده راهنمایی کنین یا در نوشتن برنامه کمکم کنید ممنون میشم
                { خلاف قوانین - پاک شد }

                دیدگاه


                  #9
                  پاسخ : مشکل با ارتباط سون سگمنت بزرگ مولتی پلکس شده با avr

                  نوشته اصلی توسط 30ma30
                  سلام بد نیست یک سری هم به این سایت بزنید جالب هستش و :
                  .....
                  راستی تو همین سایت اگه سوالی هم بپرسی تو انجمنش بی پاسخ نمی مونه .
                  اینم لینک مربوط به سگمنت دوست عزیز :
                  ..............
                  سعی کردن ماهیگیری یادمون بدن تا ماهی بدن دستمون .
                  جل ال خالق !!!!

                  چی شد یه رفعه ؟؟ 30na30 تغییر جنسیت داد ، شد ، 30ma30 ؟؟؟!!!!

                  دیدگاه

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