اطلاعیه

Collapse
No announcement yet.

کمک در مورد عیب پروژه ی چراغ راهنمای AVR

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

    #16
    پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

    نوشته اصلی توسط hamidreza.nayeri
    چرا موقع نمایش دادن ۱۹ و ۲۶ رو از عددتون کم میکنید؟ چه ضرورتی داره این کار؟

    ضمنا اون دو تا continue اول رو بردارید. لازم نیست break یا continue اونجا باشه. من اولش که برنامه تون رو خوندم یه چیز دیگه برداشت کرده بودم. الان اون continue ها باعث میشن اصلا برنامه تون به قسمت مربوط به چراغ نرسه
    دوم اینکه داخل حلقه اصلی شما (خط 68 به بعد) یک سری while گذاشتید که باهاش شرط رو تست میکنید بعد داخلش break گذاشتید. تمام اون while ها رو بکنید if و break رو هم بردارید. این البته مشکلی رو حل نمیکنه فقط اصولی تره اینطوری برنامه نویسی کردن
    فعلا برنامه اولتون رو درست کنید تا برسیم به برنامه دوم
    موقع برنامه نویسی حساب کردم که همیشه باید بیشترین مقدار ما عدد 19باشه و چون من از 2*19استفاده کرده بودم برای همین از اون19تا کم کردم تا به عدد مورد نظرم برسم.اگر میخواستم به جای عدد 36از عدد 19 استفاده کنم مجبور بودم 2تا حلقه فور بنویسم.
    عدد 26را به این خاطر از 36 کم کردم که 19+7=26یعنی این که درون فرمول 19 تا باید کم کرد تا عدد نصف بشه و 7 را هم به این خاطر کم کردم که بین سبز و قرمز باید 7ثانیه اختلاف باشه چون اگر قرمز 19ثانیه روشن باشه سبز12ثانیه و زرد هم7ثانیه روشن میشه. :read:
    درون حلقه ی ایف19تا ازش کم کردم چون عدد از19بزرگتر بود ولی درون الس این کار رو نکردم چون عدد از 19 کوچیک تر بود و 7تا ازش کم کردم تا بتونم به ثانیه ی چراغ سبز دست رسی داشته باشم.
    امام صادق عليه‏السلام :

    هرچيزى‏زكاتى دارد و زكات دانش، آموختن آن است به اهلش.

    دیدگاه


      #17
      پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

      خب من حرفم همینه
      شما از ۱۹ شروع کن بشمر بیا پایین تا به صفر برسی
      اینطوری راحت تر هم هست

      دیدگاه


        #18
        پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

        نوشته اصلی توسط hamidreza.nayeri
        خب من حرفم همینه
        شما از ۱۹ شروع کن بشمر بیا پایین تا به صفر برسی
        اینطوری راحت تر هم هست
        داداش میشه بگی الان من تغییرات رو چه جوری اعمال کنم که دیگه اشتباه نباشه و من کار دوباره نکنم ؟؟؟؟؟؟؟؟؟؟؟/ :cry2: :cry2: :cry2:
        مننظورم اینه که من بلد نیسم میشه یه خورده از برنامه رو برام بنویسی؟ :nerd: :nerd: :nerd:
        البته اگه براتون زحمتی نیست
        امام صادق عليه‏السلام :

        هرچيزى‏زكاتى دارد و زكات دانش، آموختن آن است به اهلش.

        دیدگاه


          #19
          پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

          نوشته اصلی توسط mgh40007
          داداش میشه بگی الان من تغییرات رو چه جوری اعمال کنم که دیگه اشتباه نباشه و من کار دوباره نکنم ؟؟؟؟؟؟؟؟؟؟؟/ :cry2: :cry2: :cry2:
          مننظورم اینه که من بلد نیسم میشه یه خورده از برنامه رو برام بنویسی؟ :nerd: :nerd: :nerd:
          البته اگه براتون زحمتی نیست
          من نگفتم روش تون اشتباهه گفتم شاید دلیلی داشته
          ضمن این که اینطوری نمیشه برنامه رو عیب یابی کرد. من الان کد شما رو میخونم دو سه تا نکته به ذهنم میرسه و میگم معلوم نیست در عمل اصلا کار بکنه

          من AVR ندارم که تست کنم براتون. شبیه ساز هم همینطور یعنی اگر چیزی هم بنویسم معلوم نیست کار بکنه
          شما سغی کن همینی که نوشتی رو درستش کنی

          اضافه شده در تاریخ :
          یک چیز دیگری هم به ذهنم رسید. شما اعدادی که برای seg نوشتید به نظرم اشتباه میان. سون سگمنت ها تون آند مشترکند یا کاتد مشترک؟
          به نظرم کاتد مشترک هستند. اگر کاتد مشترک باشند باید سگمنتی که میخواید روشنش کنید رو سفر کنید تا روشن شه نه یک

          اضافه شده در تاریخ :
          آقا من این کد رو عجالتا برات نوشتم ببین کار میکنه یا نه (بعیده)
          فقط هنوز کد مربوط به چراغ رو ننوشتم این مال شمارنده هاست

          کد:
          #include <mega16.h>
          #include <delay.h>
          int a = 0;
          int d = 19;
          interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
          	a++;
          	if (a >= 1000){
          		d--;
          		a = 0;
          
          		if(d < 0){
          			d = 19;
          		}
          	}
          
          	TCNT0=0X83;        
          	TCCR0=0x03;    //FAAL KARDAN TIMER (TAGHSIM BAR 64 VA HALAT NORMAL)
          }
          void main(){
          	unsigned char seg[] = {0x40, 0x75, 0x24, 0x30, 0x15, 0x12, 0x02, 0x34, 0x00, 0x10};
          	DDRD = 0XFF;
          	DDRB = 0XFF;
          	DDRC = 0xFF;
          	DDRA = 0XFF;
          	TCNT0 = 0X83;                //1ms
          	TIMSK = 0x01;
          	TCCR0 = 0X03;
          
          	int d2;
          
          	#asm("sei")
          	while(1) {
          		d2 = d + 7;
          
          		PORTC = 0x02;
          		PORTB = seg[d / 10];
          		delay_ms(2);
          
          		PORTC = 0x01;
          		PORTB = seg[d % 10];
          		delay_ms(2);
          
          		PORTC = 0x04;
          		PORTB = seg[d2 / 10];
          		delay_ms(2);
          
          		PORTC = 0x08;
          		PORTB = seg[d2 % 10];
          		delay_ms(2);
          
          
          //		if(d > 12) {
          //			PORTD = 0x21;
          //		}
          //		if(d <= 12 && d > 19) {
          //			PORTD = 0X11;
          //		}
          //		if(d <= 19 && d > 7) {
          //			PORTD=0X0C;
          //		}
          //		if(d <= 7 && d > 0) {
          //			PORTD=0X0A;
          //		}
          	}
          }

          دیدگاه


            #20
            پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

            نوشته اصلی توسط hamidreza.nayeri
            من نگفتم روش تون اشتباهه گفتم شاید دلیلی داشته
            ضمن این که اینطوری نمیشه برنامه رو عیب یابی کرد. من الان کد شما رو میخونم دو سه تا نکته به ذهنم میرسه و میگم معلوم نیست در عمل اصلا کار بکنه

            من AVR ندارم که تست کنم براتون. شبیه ساز هم همینطور یعنی اگر چیزی هم بنویسم معلوم نیست کار بکنه
            شما سغی کن همینی که نوشتی رو درستش کنی

            اضافه شده در تاریخ :
            یک چیز دیگری هم به ذهنم رسید. شما اعدادی که برای seg نوشتید به نظرم اشتباه میان. سون سگمنت ها تون آند مشترکند یا کاتد مشترک؟
            به نظرم کاتد مشترک هستند. اگر کاتد مشترک باشند باید سگمنتی که میخواید روشنش کنید رو سفر کنید تا روشن شه نه یک

            اضافه شده در تاریخ :
            آقا من این کد رو عجالتا برات نوشتم ببین کار میکنه یا نه (بعیده)
            فقط هنوز کد مربوط به چراغ رو ننوشتم این مال شمارنده هاست

            کد:
            #include <mega16.h>
            #include <delay.h>
            int a = 0;
            int d = 19;
            interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
            	a++;
            	if (a >= 1000){
            		d--;
            		a = 0;
            
            		if(d < 0){
            			d = 19;
            		}
            	}
            
            	TCNT0=0X83;        
            	TCCR0=0x03;    //FAAL KARDAN TIMER (TAGHSIM BAR 64 VA HALAT NORMAL)
            }
            void main(){
            	unsigned char seg[] = {0x40, 0x75, 0x24, 0x30, 0x15, 0x12, 0x02, 0x34, 0x00, 0x10};
            	DDRD = 0XFF;
            	DDRB = 0XFF;
            	DDRC = 0xFF;
            	DDRA = 0XFF;
            	TCNT0 = 0X83;                //1ms
            	TIMSK = 0x01;
            	TCCR0 = 0X03;
            
            	int d2;
            
            	#asm("sei")
            	while(1) {
            		d2 = d + 7;
            
            		PORTC = 0x02;
            		PORTB = seg[d / 10];
            		delay_ms(2);
            
            		PORTC = 0x01;
            		PORTB = seg[d % 10];
            		delay_ms(2);
            
            		PORTC = 0x04;
            		PORTB = seg[d2 / 10];
            		delay_ms(2);
            
            		PORTC = 0x08;
            		PORTB = seg[d2 % 10];
            		delay_ms(2);
            
            
            //		if(d > 12) {
            //			PORTD = 0x21;
            //		}
            //		if(d <= 12 && d > 19) {
            //			PORTD = 0X11;
            //		}
            //		if(d <= 19 && d > 7) {
            //			PORTD=0X0C;
            //		}
            //		if(d <= 7 && d > 0) {
            //			PORTD=0X0A;
            //		}
            	}
            }

            داداش دمت گرم شما کارت درسته
            من تستش کردم به d2گیر میداد گذاشتم قبل از اینتراپت درست شد .تا جایی که سواد من میکشه نباید گیر میداد ولی گیر داد.
            اون چیزی که توی پور تئوس من نشون داد این بود که همه ی سون سگمنت ها کلمه ی Aرو نشون میدادند
            امام صادق عليه‏السلام :

            هرچيزى‏زكاتى دارد و زكات دانش، آموختن آن است به اهلش.

            دیدگاه


              #21
              پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

              اون ایراد به خاطر اختلاف ورژن کامپایلرها و اختلاف رفتاری شونه چیز مهمی نیست

              چرا A؟ سگمنت هات از نوع چی اند؟ آند یا کاتد مشترک؟

              یه چیزی یادم اومد. قبل از اینکلود کردن کتابخونه delay نباید مقدار کلاک رو براش تعریف کنی؟ فرکانس کلاکت چقدر بود؟

              دیدگاه


                #22
                پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

                من برای خودم فرکانس رو 8 مگ تعریف کرده بودم.مگه فرقی هم میکنه؟

                البته ابعد از 4ثانیه شکلش این جوری میشه و بر عکس

                من مدار شمارو در سون سگمنت کاتد مشترک و با همون مداری که درصفحه ی قبل گذاشتم تست کردم
                راستی دوستان اگه امکانش هست برای متن زیر برام توضیع بدین اگه امکانش هست امشب جوابم رو بدین.چون من نمیدونم این ها چیه و گفته باید بیای برام این هارو توضیع بدی ولی من اصلا از روش هم نمیتونم بخونم :cry: :sad: :question: :question: :question: :question:
                دوستان اگه اطلاعاتی دارین برام بزارین من هیچ اطلاعاتی ندارم.عاجزانه خواهش مندم :cry2: :cry2:

                [code=c]
                #pragma used+
                #pragma used+
                sfrb TWBR=0;
                sfrb TWSR=1;
                sfrb TWAR=2;
                sfrb TWDR=3;
                sfrb ADCL=4;
                sfrb ADCH=5;
                sfrw ADCW=4; // 16 bit access
                sfrb ADCSRA=6;
                sfrb ADCSR=6; // for compatibility with older code
                sfrb ADMUX=7;
                sfrb ACSR=8;
                sfrb UBRRL=9;
                sfrb UCSRB=0xa;
                sfrb UCSRA=0xb;
                sfrb UDR=0xc;
                sfrb SPCR=0xd;
                sfrb SPSR=0xe;
                sfrb SPDR=0xf;
                sfrb PIND=0x10;
                sfrb DDRD=0x11;
                sfrb PORTD=0x12;
                sfrb PINC=0x13;
                sfrb DDRC=0x14;
                sfrb PORTC=0x15;
                sfrb PINB=0x16;
                sfrb DDRB=0x17;
                sfrb PORTB=0x18;
                sfrb PINA=0x19;
                sfrb DDRA=0x1a;
                sfrb PORTA=0x1b;
                sfrb EECR=0x1c;
                sfrb EEDR=0x1d;
                sfrb EEARL=0x1e;
                sfrb EEARH=0x1f;
                sfrw EEAR=0x1e; // 16 bit access
                sfrb UBRRH=0x20;
                sfrb UCSRC=0X20;
                sfrb WDTCR=0x21;
                sfrb ASSR=0x22;
                sfrb OCR2=0x23;
                sfrb TCNT2=0x24;
                sfrb TCCR2=0x25;
                sfrb ICR1L=0x26;
                sfrb ICR1H=0x27;
                sfrb OCR1BL=0x28;
                sfrb OCR1BH=0x29;
                sfrw OCR1B=0x28; // 16 bit access
                sfrb OCR1AL=0x2a;
                sfrb OCR1AH=0x2b;
                sfrw OCR1A=0x2a; // 16 bit access
                sfrb TCNT1L=0x2c;
                sfrb TCNT1H=0x2d;
                sfrw TCNT1=0x2c; // 16 bit access
                sfrb TCCR1B=0x2e;
                sfrb TCCR1A=0x2f;
                sfrb SFIOR=0x30;
                sfrb OSCCAL=0x31;
                sfrb TCNT0=0x32;
                sfrb TCCR0=0x33;
                sfrb MCUCSR=0x34;
                sfrb MCUCR=0x35;
                sfrb TWCR=0x36;
                sfrb SPMCR=0x37;
                sfrb TIFR=0x38;
                sfrb TIMSK=0x39;
                sfrb GIFR=0x3a;
                sfrb GICR=0x3b;
                sfrb OCR0=0X3c;
                sfrb SPL=0x3d;
                sfrb SPH=0x3e;
                sfrb SREG=0x3f;
                #pragma used-

                // Interrupt vectors definitions


                // Needed by the power management functions (sleep.h)
                #asm
                #ifndef __SLEEP_DEFINED__
                #define __SLEEP_DEFINED__
                .EQU __se_bit=0x80
                .EQU __sm_mask=0x70
                .EQU __sm_powerdown=0x20
                .EQU __sm_powersave=0x30
                .EQU __sm_standby=0x60
                .EQU __sm_ext_standby=0x70
                .EQU __sm_adc_noise_red=0x10
                .SET power_ctrl_reg=mcucr
                #endif
                #endasm


                // CodeVisionAVR C Compiler
                // (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.


                #pragma used+
                #pragma used+

                void delay_us(unsigned int n);
                void delay_ms(unsigned int n);

                #pragma used-



                unsigned char a,b;



                unsigned char segment (unsigned char input){
                switch(input){
                case 1:{return 0x06;break;}
                case 2:{return 0x5B;break;}
                case 3:{return 0x4F;break;}
                case 4:{return 0x66;break;}
                case 5:{return 0x6D;break;}
                case 6:{return 0x7D;break;}
                case 7:{return 0x07;break;}
                case 8:{return 0x7F;break;}
                case 9:{return 0x6F;break;}
                case 0:{return 0x3F;break;}
                }
                }

                void delay_green(void){
                PORTA.7=0;
                PORTB.0=0;
                a=9;
                b=0;
                while(b!=10){
                delay_ms(1000);
                b++;
                PORTC=segment(a);
                PORTA.6=1;
                PORTB.1=1;
                a--;
                }
                a=9;
                }


                void delay_red(void){
                PORTA.6=0;
                PORTB.1=0;
                a=9;
                b=0;
                while(b!=10){

                delay_ms(1000);
                b++;
                PORTC=segment(a);
                PORTA.7=1;
                PORTB.0=1;
                a--;
                }
                }


                void main(void){
                PORTA=0x00;
                DDRA=0xFF;
                PORTB=0x00;
                DDRB=0x03;
                PORTC=0x00;
                DDRC=0xFF;
                PORTD=0x00;
                DDRD=0xFF;


                while (1)
                {
                PORTA.0=0;
                PORTA.3=1;
                PORTA.2=1;
                delay_green();
                PORTA.2=0;
                PORTA.1=1;
                delay_ms(1500);
                PORTA.1=0;
                PORTA.0=1;
                PORTA.3=0;
                PORTA.5=1;
                delay_red();
                PORTA.4=1;
                PORTA.5=0;
                delay_ms(1500);
                PORTA.4=0;
                };
                }
                [/code]
                این برنامه ی چراغ راهنماست که از توی سایت دانلود شده الکترونیک فور یو اگه اطلاعاتی دارین به منم بدین محتاجم
                امام صادق عليه‏السلام :

                هرچيزى‏زكاتى دارد و زكات دانش، آموختن آن است به اهلش.

                دیدگاه


                  #23
                  پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

                  نوشته اصلی توسط mgh40007
                  من برای خودم فرکانس رو 8 مگ تعریف کرده بودم.مگه فرقی هم میکنه؟

                  البته ابعد از 4ثانیه شکلش این جوری میشه و بر عکس

                  من مدار شمارو در سون سگمنت کاتد مشترک و با همون مداری که درصفحه ی قبل گذاشتم تست کردم
                  راستی دوستان اگه امکانش هست برای متن زیر برام توضیع بدین اگه امکانش هست امشب جوابم رو بدین.چون من نمیدونم این ها چیه و گفته باید بیای برام این هارو توضیع بدی ولی من اصلا از روش هم نمیتونم بخونم :cry: :sad: :question: :question: :question: :question:
                  دوستان اگه اطلاعاتی دارین برام بزارین من هیچ اطلاعاتی ندارم.عاجزانه خواهش مندم :cry2: :cry2:

                  [code=c]
                  #pragma used+
                  #pragma used+
                  sfrb TWBR=0;
                  sfrb TWSR=1;
                  sfrb TWAR=2;
                  sfrb TWDR=3;
                  sfrb ADCL=4;
                  sfrb ADCH=5;
                  sfrw ADCW=4; // 16 bit access
                  sfrb ADCSRA=6;
                  sfrb ADCSR=6; // for compatibility with older code
                  sfrb ADMUX=7;
                  sfrb ACSR=8;
                  sfrb UBRRL=9;
                  sfrb UCSRB=0xa;
                  sfrb UCSRA=0xb;
                  sfrb UDR=0xc;
                  sfrb SPCR=0xd;
                  sfrb SPSR=0xe;
                  sfrb SPDR=0xf;
                  sfrb PIND=0x10;
                  sfrb DDRD=0x11;
                  sfrb PORTD=0x12;
                  sfrb PINC=0x13;
                  sfrb DDRC=0x14;
                  sfrb PORTC=0x15;
                  sfrb PINB=0x16;
                  sfrb DDRB=0x17;
                  sfrb PORTB=0x18;
                  sfrb PINA=0x19;
                  sfrb DDRA=0x1a;
                  sfrb PORTA=0x1b;
                  sfrb EECR=0x1c;
                  sfrb EEDR=0x1d;
                  sfrb EEARL=0x1e;
                  sfrb EEARH=0x1f;
                  sfrw EEAR=0x1e; // 16 bit access
                  sfrb UBRRH=0x20;
                  sfrb UCSRC=0X20;
                  sfrb WDTCR=0x21;
                  sfrb ASSR=0x22;
                  sfrb OCR2=0x23;
                  sfrb TCNT2=0x24;
                  sfrb TCCR2=0x25;
                  sfrb ICR1L=0x26;
                  sfrb ICR1H=0x27;
                  sfrb OCR1BL=0x28;
                  sfrb OCR1BH=0x29;
                  sfrw OCR1B=0x28; // 16 bit access
                  sfrb OCR1AL=0x2a;
                  sfrb OCR1AH=0x2b;
                  sfrw OCR1A=0x2a; // 16 bit access
                  sfrb TCNT1L=0x2c;
                  sfrb TCNT1H=0x2d;
                  sfrw TCNT1=0x2c; // 16 bit access
                  sfrb TCCR1B=0x2e;
                  sfrb TCCR1A=0x2f;
                  sfrb SFIOR=0x30;
                  sfrb OSCCAL=0x31;
                  sfrb TCNT0=0x32;
                  sfrb TCCR0=0x33;
                  sfrb MCUCSR=0x34;
                  sfrb MCUCR=0x35;
                  sfrb TWCR=0x36;
                  sfrb SPMCR=0x37;
                  sfrb TIFR=0x38;
                  sfrb TIMSK=0x39;
                  sfrb GIFR=0x3a;
                  sfrb GICR=0x3b;
                  sfrb OCR0=0X3c;
                  sfrb SPL=0x3d;
                  sfrb SPH=0x3e;
                  sfrb SREG=0x3f;
                  #pragma used-

                  // Interrupt vectors definitions


                  // Needed by the power management functions (sleep.h)
                  #asm
                  #ifndef __SLEEP_DEFINED__
                  #define __SLEEP_DEFINED__
                  .EQU __se_bit=0x80
                  .EQU __sm_mask=0x70
                  .EQU __sm_powerdown=0x20
                  .EQU __sm_powersave=0x30
                  .EQU __sm_standby=0x60
                  .EQU __sm_ext_standby=0x70
                  .EQU __sm_adc_noise_red=0x10
                  .SET power_ctrl_reg=mcucr
                  #endif
                  #endasm


                  // CodeVisionAVR C Compiler
                  // (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.


                  #pragma used+
                  #pragma used+

                  void delay_us(unsigned int n);
                  void delay_ms(unsigned int n);

                  #pragma used-



                  unsigned char a,b;



                  unsigned char segment (unsigned char input){
                  switch(input){
                  case 1:{return 0x06;break;}
                  case 2:{return 0x5B;break;}
                  case 3:{return 0x4F;break;}
                  case 4:{return 0x66;break;}
                  case 5:{return 0x6D;break;}
                  case 6:{return 0x7D;break;}
                  case 7:{return 0x07;break;}
                  case 8:{return 0x7F;break;}
                  case 9:{return 0x6F;break;}
                  case 0:{return 0x3F;break;}
                  }
                  }

                  void delay_green(void){
                  PORTA.7=0;
                  PORTB.0=0;
                  a=9;
                  b=0;
                  while(b!=10){
                  delay_ms(1000);
                  b++;
                  PORTC=segment(a);
                  PORTA.6=1;
                  PORTB.1=1;
                  a--;
                  }
                  a=9;
                  }


                  void delay_red(void){
                  PORTA.6=0;
                  PORTB.1=0;
                  a=9;
                  b=0;
                  while(b!=10){

                  delay_ms(1000);
                  b++;
                  PORTC=segment(a);
                  PORTA.7=1;
                  PORTB.0=1;
                  a--;
                  }
                  }


                  void main(void){
                  PORTA=0x00;
                  DDRA=0xFF;
                  PORTB=0x00;
                  DDRB=0x03;
                  PORTC=0x00;
                  DDRC=0xFF;
                  PORTD=0x00;
                  DDRD=0xFF;


                  while (1)
                  {
                  PORTA.0=0;
                  PORTA.3=1;
                  PORTA.2=1;
                  delay_green();
                  PORTA.2=0;
                  PORTA.1=1;
                  delay_ms(1500);
                  PORTA.1=0;
                  PORTA.0=1;
                  PORTA.3=0;
                  PORTA.5=1;
                  delay_red();
                  PORTA.4=1;
                  PORTA.5=0;
                  delay_ms(1500);
                  PORTA.4=0;
                  };
                  }
                  [/code]
                  این برنامه ی چراغ راهنماست که از توی سایت دانلود شده الکترونیک فور یو اگه اطلاعاتی دارین به منم بدین محتاجم
                  سلام

                  این زبان برنامه نویسی اسمبلیه خوب چرا اول راه اسمبلی انتخاب کردین :rolleyes:
                  من یه توضیحات کلی می دم که شما هم باید تلاش کنید و از دیتاشیت میکرو مورد نظر اون چیزی رو که می گم از دیتاشیت در بیاری و بنویسی :smile:

                  [code=c]sfrb TWBR=0;[/code]

                  دستور sfr در واقع اشاره به یه رجیستر می کنه اگر رجیستر میکرو 8 بیتی باشه از sfrb و اگر رجیستر انتخابی میکرو 16 بیتی باشه از sfrw استفاده میشه

                  برای مثال در دستور بالا می بینی که اشاره به رجیستر TWBR شده خوب منم مثل تو این رجیسترا رو نمی دونم چیه برای همین می رم دیتاشیت مگا 16 رو باز می کنم و همون رجستر رو سرچ می کنم و می بینیم که
                  TWBR مخفف TWI Bit Rate Register هست که خودشم 8 بیتیه یعنی اینا رو برنامه نویس از قبل می دونسته و با دستور sfrb به صورت مستقیم مقدار دهی کرده یعنی 0 رو در این رجیستر ذخیره کرده

                  twi همون پروتکل دو سیمه i2c هست
                  فرمول زیر جایگاه رجیستر TWBR رو نشون میده که نقش مهمی در تعین فرکانس SCL داره یعنی تقسیم کننده فرکانس هست
                  i2c دو تا سیم داره یکی SCL و دیگری SDA این رجیستر در واقع سرعت کلاک یا همان SCL رو مشخص می کنه

                  [code=c]sfrw ADCW=4; // 16 bit access[/code]
                  این رجیستر مربوط میشه به ADC ولی نتونستم تو دیتاشیت پیدا کنم بقیه رجیستر ها هستن بگریدن پیدا می کنید
                  برای سرچ کردن تو pdf میکرو CTRL+F را بزنید و رجیستر را کپی کنید و اینتر را بزنید

                  [code=c] .EQU __se_bit=0x80[/code]

                  دستور EQU یک ثابت تعریف می کند برای مثال اگر شما ثابت __se_bit را تعریف نمی کردین نمی تونستید از این نام استفاده کنید
                  بعد از تعریف ثابت از این به بعد هر جا از این نام استفاده کنید این نام برای شما قابل مفهمومه اما کامپایلر با مقدار ثابت سر و کار دارد یعنی اون چیزی که شما می بینید نام ثابت است و اون چیزی که کامپایلر برای خودش ترجمه می کنه مقدار ثابت هست

                  برد جوجه کشی:
                  مطالعه پست 1 (حتما مطالعه کنید)


                  مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

                  دانلود

                  توجه:
                  این برد نیمه صنعتی و خانگی هست...
                  برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

                  آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

                  دیدگاه


                    #24
                    پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

                    نوشته اصلی توسط mohammad...
                    سلام

                    این زبان برنامه نویسی اسمبلیه خوب چرا اول راه اسمبلی انتخاب کردین :rolleyes:
                    من یه توضیحات کلی می دم که شما هم باید تلاش کنید و از دیتاشیت میکرو مورد نظر اون چیزی رو که می گم از دیتاشیت در بیاری و بنویسی :smile:

                    [code=c]sfrb TWBR=0;[/code]

                    دستور sfr در واقع اشاره به یه رجیستر می کنه اگر رجیستر میکرو 8 بیتی باشه از sfrb و اگر رجیستر انتخابی میکرو 16 بیتی باشه از sfrw استفاده میشه

                    برای مثال در دستور بالا می بینی که اشاره به رجیستر TWBR شده خوب منم مثل تو این رجیسترا رو نمی دونم چیه برای همین می رم دیتاشیت مگا 16 رو باز می کنم و همون رجستر رو سرچ می کنم و می بینیم که
                    TWBR مخفف TWI Bit Rate Register هست که خودشم 8 بیتیه یعنی اینا رو برنامه نویس از قبل می دونسته و با دستور sfrb به صورت مستقیم مقدار دهی کرده یعنی 0 رو در این رجیستر ذخیره کرده

                    twi همون پروتکل دو سیمه i2c هست
                    فرمول زیر جایگاه رجیستر TWBR رو نشون میده که نقش مهمی در تعین فرکانس SCL داره یعنی تقسیم کننده فرکانس هست
                    i2c دو تا سیم داره یکی SCL و دیگری SDA این رجیستر در واقع سرعت کلاک یا همان SCL رو مشخص می کنه

                    [code=c]sfrw ADCW=4; // 16 bit access[/code]
                    این رجیستر مربوط میشه به ADC ولی نتونستم تو دیتاشیت پیدا کنم بقیه رجیستر ها هستن بگریدن پیدا می کنید
                    برای سرچ کردن تو pdf میکرو CTRL+F را بزنید و رجیستر را کپی کنید و اینتر را بزنید

                    [code=c] .EQU __se_bit=0x80[/code]

                    دستور EQU یک ثابت تعریف می کند برای مثال اگر شما ثابت __se_bit را تعریف نمی کردین نمی تونستید از این نام استفاده کنید
                    بعد از تعریف ثابت از این به بعد هر جا از این نام استفاده کنید این نام برای شما قابل مفهمومه اما کامپایلر با مقدار ثابت سر و کار دارد یعنی اون چیزی که شما می بینید نام ثابت است و اون چیزی که کامپایلر برای خودش ترجمه می کنه مقدار ثابت هست
                    داداش من نمیدونستم که این زبون اسمبلی هست.من امروز باید پروژم رو تموم کنم این رو براش فرستادم گفت خوبه فقط باید بیای خودت بگی این ها چیه.از اون جایی که پروژه ای هم که خودم نوشتم هنوز جواب نداده.دیدم این پروژه تو اینترنت هست گفتم شاید این به درد بخوره.ولی داداش دمت گرم خیلی اقایی با این که حرف هات مختصر بود ولی مفید هم بود یه سوالی که برام پیش اومد اینه که .. :applause:
                    ایا میشه زبان اسمبلی رو توی کدویژن پروگرام کرد؟
                    ایا دیتا شیت فارسی هم داریم برای زبان اسمبلی/؟
                    برنامه های بالا دیگه داره تکمیل میشه.میشه راهنمایی کنید تا برنامه های بالاهم انشاالله تکمیل بشه تا بتونم اون ها رو هم تحویل بدم؟
                    دیگه از هرچی چراغ راهنماست دارم متنفر میشم. :angry: :angry:
                    راستی یه طرحی به زهنم رسید پایه اید برنامه های چراغ راهنما رو توی این تاپیک بزاریم و عیب یابی کنیم تاخدایی نکرده اگه دانشجویی دوباره کارش گیر کرد بتونه از این تاپیک استفاده کنه؟چون که من توی اینتر نت خیلی گشتم ولی یا همش پولی بود یا مشکل برنامه نویسی داشت یا هم تک رقمی بود که پروژه ی من 2رقمی هست.من 4پایم به جای پایه بودن شما رو نمیدونم
                    امام صادق عليه‏السلام :

                    هرچيزى‏زكاتى دارد و زكات دانش، آموختن آن است به اهلش.

                    دیدگاه


                      #25
                      پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

                      نوشته اصلی توسط mgh40007
                      داداش من نمیدونستم که این زبون اسمبلی هست.من امروز باید پروژم رو تموم کنم این رو براش فرستادم گفت خوبه فقط باید بیای خودت بگی این ها چیه.از اون جایی که پروژه ای هم که خودم نوشتم هنوز جواب نداده.دیدم این پروژه تو اینترنت هست گفتم شاید این به درد بخوره.ولی داداش دمت گرم خیلی اقایی با این که حرف هات مختصر بود ولی مفید هم بود یه سوالی که برام پیش اومد اینه که .. :applause:
                      ایا میشه زبان اسمبلی رو توی کدویژن پروگرام کرد؟
                      ایا دیتا شیت فارسی هم داریم برای زبان اسمبلی/؟
                      برنامه های بالا دیگه داره تکمیل میشه.میشه راهنمایی کنید تا برنامه های بالاهم انشاالله تکمیل بشه تا بتونم اون ها رو هم تحویل بدم؟
                      دیگه از هرچی چراغ راهنماست دارم متنفر میشم. :angry: :angry:
                      راستی یه طرحی به زهنم رسید پایه اید برنامه های چراغ راهنما رو توی این تاپیک بزاریم و عیب یابی کنیم تاخدایی نکرده اگه دانشجویی دوباره کارش گیر کرد بتونه از این تاپیک استفاده کنه؟چون که من توی اینتر نت خیلی گشتم ولی یا همش پولی بود یا مشکل برنامه نویسی داشت یا هم تک رقمی بود که پروژه ی من 2رقمی هست.من 4پایم به جای پایه بودن شما رو نمیدونم
                      سلام
                      شرمنده که یکم دیر جواب میدم
                      بله دیگه همون دستورات بالایی اسمبلی هستن که کد ویژن اینا رو هم کامپایل می کنه مثل دستورات C
                      نه داداش دیتاشیت فارسی نیست مگر اینکه یه نفر یه دیتاشیت رو با دقت کامل ترجمه کنه که همچین کسایی رو هم نداریم ما یا لاقل اگر هم داریم سمت ترجمه نمی رن پس باید خودت دست به کار بشی و بفهمی اون رجیستر ها چیکار می کنن
                      شما وقتی برنامه ای رو به زبان C می نویسید دیگه با رجیستر کاری ندارید و خود کامپایلر میره رجیستر رو پیدا می کنه و دستکاری می کنه اگر می گن زبان اسمبلی سخته بیشتر برای همین می گن که شما نیاز داری جزئیات کامل یک قطعه رو بدونی مثلا اگر بخوای اسمبلی براش برنامه بنیوسی باید بدونی چه رجیستر هایی داره و بیای از این رجیستر ها استفاده کنی

                      الان من نمی دونم شما تونستین برنامه بالا رو تکمیل کنید یا نه؟ اگر تکمیل نشده فایل پروتیوس و فایل C رو قرار بده تا ببینیم مشکل مدار چیه

                      در مورد پایه بودن هم یه پایم شکسته و یه پایه برام مونده ممکنه پایه باشم و ممکنه نباشم :mrgreen:
                      برد جوجه کشی:
                      مطالعه پست 1 (حتما مطالعه کنید)


                      مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

                      دانلود

                      توجه:
                      این برد نیمه صنعتی و خانگی هست...
                      برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

                      آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

                      دیدگاه


                        #26
                        پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

                        نوشته اصلی توسط mohammad...
                        سلام
                        شرمنده که یکم دیر جواب میدم
                        بله دیگه همون دستورات بالایی اسمبلی هستن که کد ویژن اینا رو هم کامپایل می کنه مثل دستورات C
                        نه داداش دیتاشیت فارسی نیست مگر اینکه یه نفر یه دیتاشیت رو با دقت کامل ترجمه کنه که همچین کسایی رو هم نداریم ما یا لاقل اگر هم داریم سمت ترجمه نمی رن پس باید خودت دست به کار بشی و بفهمی اون رجیستر ها چیکار می کنن
                        شما وقتی برنامه ای رو به زبان C می نویسید دیگه با رجیستر کاری ندارید و خود کامپایلر میره رجیستر رو پیدا می کنه و دستکاری می کنه اگر می گن زبان اسمبلی سخته بیشتر برای همین می گن که شما نیاز داری جزئیات کامل یک قطعه رو بدونی مثلا اگر بخوای اسمبلی براش برنامه بنیوسی باید بدونی چه رجیستر هایی داره و بیای از این رجیستر ها استفاده کنی

                        الان من نمی دونم شما تونستین برنامه بالا رو تکمیل کنید یا نه؟ اگر تکمیل نشده فایل پروتیوس و فایل C رو قرار بده تا ببینیم مشکل مدار چیه

                        در مورد پایه بودن هم یه پایم شکسته و یه پایه برام مونده ممکنه پایه باشم و ممکنه نباشم :mrgreen:
                        سلام استاد
                        دمت گرم که هوای مارو داری
                        مدار بالا مشکلش اینه که شمارنده اش دورقمی نیست یعنی این که دورقمی هست ولی دورقمش باهم یک عدد مشابه نشون میدهند من لینکش رو میزارم اگرمیتونی درست کن انشاالله به درد بچه های دیگه بخوره ولی مشکل من همون برنامه ی اوله که جواب نمیده!!! :sad: این برنامه بالا سطحش ازمن خیلی بالاتره من اجازه ارائه کردنش رو نتونستم بگیرم.مجبورم برنامه ی خرچنگ غورباغه ی خودم رو تموم کنم که اون هم تا جمعه تونستم وقت بگیرم وگرنه تمدید پروژه میخورم :angry: :angry:
                        اگه کسی میتونه کمک کنه دمش گرم oo:
                        امام صادق عليه‏السلام :

                        هرچيزى‏زكاتى دارد و زكات دانش، آموختن آن است به اهلش.

                        دیدگاه


                          #27
                          پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

                          مشکل اینکه دو تا 7سگمنت یک عدد رو نشون میده اینه که شما روی پورتت یک مقدارو نوشتی و بعد سگمنت بعدی رو انتخاب می کنی و عدد مربوط به اونو رو پورت قرار میدی. که این کار با سرعت بالا باعث میشه دوتا سگمنت یه چیزو نشون بدن. برای درست شدنش باید بعد از نشون دادن عدد تو سگمنت اولی پورت رو خاموش کنی و بعد سگمنت دومی رو انتخاب کنی و عدد اونو روش بریزی .
                          به عبارت ساده تر:
                          1. انتخاب سگمنت اول
                          2. قرار دادن عدد مربوط به اون
                          3. صفر کردن مقدار سگمنت
                          4.انتخاب سگمنت دوم
                          5. قرار دادن عدد مربوط به اون
                          3. صفر کردن مقدار سگمنت
                          و دوباره مراحل بالا از اول.
                          الهم صل علی محمد و آل محمد و عجل فرجهم
                          www.adaksell.com

                          دیدگاه


                            #28
                            پاسخ : کمک در مورد عیب پروژه ی چراغ راهنمای AVR

                            نوشته اصلی توسط mgh40007
                            سلام استاد
                            دمت گرم که هوای مارو داری
                            مدار بالا مشکلش اینه که شمارنده اش دورقمی نیست یعنی این که دورقمی هست ولی دورقمش باهم یک عدد مشابه نشون میدهند من لینکش رو میزارم اگرمیتونی درست کن انشاالله به درد بچه های دیگه بخوره ولی مشکل من همون برنامه ی اوله که جواب نمیده!!! :sad: این برنامه بالا سطحش ازمن خیلی بالاتره من اجازه ارائه کردنش رو نتونستم بگیرم.مجبورم برنامه ی خرچنگ غورباغه ی خودم رو تموم کنم که اون هم تا جمعه تونستم وقت بگیرم وگرنه تمدید پروژه میخورم :angry: :angry:
                            اگه کسی میتونه کمک کنه دمش گرم oo:
                            سلام
                            می دونی مشکل برنامت کجاست؟
                            تو پروتیوس از سون سگمنت کاتد مشترک استفاده کردین و باید برای فعال شدن هر سون سگمنت پایه مشترک رو صفر کنی نه یک!
                            اشتباهتون تنها همینجا بود که نمایش داده نمیشد
                            در مورد فرکانس میکرو هم باید تو پروتیوس فرکانس رو روی 8 مگ قرار بدین
                            این برنامه اصلاح شده است من همون کد هگزی که به پورت C دادین not کردم تا مشکل بر طرف بشه
                            [code=c]
                            #include <mega16.h>
                            #include <delay.h>
                            int a=0;
                            int d=38;
                            interrupt [TIM0_OVF] void timer0_ovf_isr(void){

                            a++;
                            if (a>=1000){
                            d--;
                            a=0;
                            }
                            if(d<=0){
                            d=36;

                            }
                            TCNT0=0X83;
                            TCCR0=0x03; //FAAL KARDAN TIMER (TAGHSIM BAR 64 VA HALAT NORMAL)

                            }
                            void main(){
                            unsigned char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6 f};
                            //7SEG CC
                            DDRD=0XFF;
                            DDRB=0XFF;
                            DDRC=0xFF;
                            DDRA=0XFF;
                            TCNT0=0X83; //1ms
                            TIMSK=0x01;
                            TCCR0=0X03;
                            #asm("sei&quot
                            while (1){


                            if(d>=19){
                            PORTC=~0xf1;
                            PORTB=seg[((d-19)/10)];
                            delay_ms(4);
                            PORTC=~0Xf2;
                            PORTB=seg[(d-19)%10];
                            delay_ms(4);
                            PORTC=~0xf4;
                            PORTB=seg[(d-26)/10];
                            delay_ms(4);
                            PORTC=~0xf8;
                            PORTB=seg[(d-26)%10];
                            delay_ms(4);
                            //continue;
                            }
                            else{
                            PORTC=~0xf1;
                            PORTB=seg[((d-7)/10)];
                            delay_ms(4);
                            PORTC=~0Xf2;
                            PORTB=seg[(d-7)%10];
                            delay_ms(4);
                            PORTC=~0xf4;
                            PORTB=seg[(d)/10];
                            delay_ms(4);
                            PORTC=~0xf8;
                            PORTB=seg[(d)%10];
                            delay_ms(4);
                            //continue;
                            }



                            while (d>26){
                            PORTD=0x21;
                            break;
                            };
                            while (d<=26&&d>19) {
                            PORTD=0X11;
                            break;
                            };
                            while (d<=19&&d>7) {
                            PORTD=0X0C;
                            break;
                            };
                            while (d<=7&&d>0) {
                            PORTD=0X0A;
                            PORTD=0X40;
                            break;
                            };

                            }
                            }
                            [/code]
                            برد جوجه کشی:
                            مطالعه پست 1 (حتما مطالعه کنید)


                            مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

                            دانلود

                            توجه:
                            این برد نیمه صنعتی و خانگی هست...
                            برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

                            آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

                            دیدگاه

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