اطلاعیه

Collapse
No announcement yet.

کنترل ولتاژ با میکرو(دیمر)

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

    #16
    پاسخ : کنترل ولتاژ با میکرو(دیمر)

    سلام
    اول اینکه من اصلا از ترانس استفاده نکردم برا ایزولاسیون وکلا مدار ایزوله نیست.
    من اول مدار وبرنامه خودم رو بستم که اصلا جواب نداد.بعد اومدم یکی آقای لاچینی روتست کردم اونم همینطور جواب نداد.و یکبار دیگه اومدم برنامه آقای لاچینی رو روی مدار خودم بستم بازم جواب نداد که نداد
    چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

    دیدگاه


      #17
      پاسخ : کنترل ولتاژ با میکرو(دیمر)

      صادق جان اګه بتونی یه اسیلوسکوپ پیدا کنی و با اون عمل کرد دوقسمت از مدار رو ببینی کارت راه میفته (مدار عبور از صفر خروجی میکرو)
      روزی که درک کردیم همه چیز به خدا تعلق دارد . آن روز .روز طلوع دانش است

      دیدگاه


        #18
        پاسخ : کنترل ولتاژ با میکرو(دیمر)

        نوشته اصلی توسط جعفر رضائی
        صادق جان اګه بتونی یه اسیلوسکوپ پیدا کنی و با اون عمل کرد دوقسمت از مدار رو ببینی کارت راه میفته (مدار عبور از صفر خروجی میکرو)
        چه جالب این کارو هم قبلا انجام دادم. معمولا وقتی به بن بس میخورم سوال میپرسم.ولی وقتی میخاستم خروجی گذر از صفر مدار رو چک کنم فیوز زد بالا اسکوپ مال دانشگاه هست.خدارو شکر کاریش نشد
        چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

        دیدگاه


          #19
          پاسخ : کنترل ولتاژ با میکرو(دیمر)

          خب خدارو شکر که بجای درست کردن ابرو چشم کور نشد
          بعدش چی شد تونستی خروجی مدارګذر از صفر رو ببینی یا کلا بیخیال شدی؟
          داشتن خروجی در مدار ګذر از صفر مهمه تا این مدار خروجی به میکرو نده میکرو کاری نمیتونه بکنه
          روزی که درک کردیم همه چیز به خدا تعلق دارد . آن روز .روز طلوع دانش است

          دیدگاه


            #20
            پاسخ : کنترل ولتاژ با میکرو(دیمر)

            این دقیقا اون مداریه که بستم و نتیجه هم داده . فقط این با تریستوره . و اون گذر از صفر هم گذر از مثبت به منفی رو ضاهر میکنه که اینو هم میتونین تو برنامه میکرو درستش کنین . که دو بار آتیش بزنه .
            اگه کدش هم لازم باشه میذارم .

            دیدگاه


              #21
              پاسخ : کنترل ولتاژ با میکرو(دیمر)

              نوشته اصلی توسط جعفر رضائی
              خب خدارو شکر که بجای درست کردن ابرو چشم کور نشد
              بعدش چی شد تونستی خروجی مدارګذر از صفر رو ببینی یا کلا بیخیال شدی؟
              داشتن خروجی در مدار ګذر از صفر مهمه تا این مدار خروجی به میکرو نده میکرو کاری نمیتونه بکنه
              آره بیخیال شدم آبروم جولوی بچه ها رفت !
              بیاین فرض کنیم سخت افزار درست باشه ! برنامه ای که من نوشتم اینطور بوده که : خروجی گذر از صفر میاد به وقفه یک و دو که حساس به لبه بالا رونه وپایین رونده هستند.و به محض احساس لبه بالا رونده خروجی رو کوچکتر از 10 میلی ثانیه دیلی دادم و بعد خروجی رو یک کردم .و همینطور برای لبه پایین رونده که زمان دیلی بوسیله کلید ها کم و زیاد میشن. نمیدونم درست هس یانه اولین برنامه عمرم بود
              آقا هادی شما همون برنامه آقای لاچینی رو استفاده کردین یا خودتون نوشتین. اگه خودتون نوشتین بیزحمت ......
              چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

              دیدگاه


                #22
                پاسخ : کنترل ولتاژ با میکرو(دیمر)

                نه برنامشو خودم نوشتم . واسه کنترل حرارته
                شما به سابروتین وقفه توجه کنین . مقدار تایمرو قرار میده . شما به طور عملی تنظیم کنین درست بیفته اول
                نقطه ی صفر نیم سیکل بعدی .
                اگه هم که مدار منو پیاده سازی کردین باید و با توجه به اینکه شما تریاک استفاده می کنین . دو بار آتیش بزنین . یادتون نره که زمان این دو تا تریگر باهم فرق میکنه . چون یه کم طول میکشه که نقطه ی صفر تشخیص داده شده . مثلا اولی 8 میلی ثانیه . اون یکی 18 میلی ثانیه .

                کد:
                #include<mega8.h>
                #include<delay.h>
                #include<stdio.h> 
                  
                //must to define every variable float that will been divided
                
                unsigned long int w,r,temp,i;
                signed long int edge;
                unsigned long int get_temp();
                
                
                
                //subroutines must been defined befor main 
                
                
                void main(void)
                {
                
                edge=48300;
                
                
                
                #asm("sei")                        
                DDRD.0=1 ;
                DDRD.2=0 ;
                DDRB.0=1;
                
                
                
                ADCSRA=0b10000000;
                ADMUX=0b11000001;
                
                
                // Timer/Counter 1 initialization
                // Clock source: System Clock
                // Clock value: 1000.000 kHz
                // Mode: Normal top=FFFFh
                // OC1A output: Discon.
                // OC1B output: Discon.
                // Noise Canceler: Off
                // Input Capture on Falling Edge
                
                ICR1H=0x00;
                ICR1L=0x00;
                OCR1AH=0x00;
                OCR1AL=0x00;
                OCR1BH=0x00;
                OCR1BL=0x00;
                TCCR1A=0x00;
                TIMSK=0x04;
                
                
                
                 
                
                // External Interrupt(s) initialization
                // INT0: On
                // INT0 Mode: Falling Edge
                // INT1: Off
                GICR|=0x40;
                MCUCR=0x02;
                GIFR=0x40;
                
                 
                // Watchdog Timer initialization
                // Watchdog Timer Prescaler: OSC/2048k
                WDTCR=0x1F;
                WDTCR=0x0F;
                
                
                //63200 === 46936
                //64200 === 54836
                //63380 === 48300
                 
                
                
                
                edge=48000;
                
                #asm("WDR")
                
                
                
                while(1)
                {
                
                
                
                if(temp>320)
                {
                PORTB.0=1;
                edge=edge+6;
                
                for(i=0;i<200;i++)
                {
                delay_ms(900);
                temp=get_temp();
                
                
                if(temp<320)
                {
                i=200;
                }
                }
                } 
                
                
                if(temp<320)
                {
                PORTB.0=0;
                edge=edge-6;
                for(i=0;i<200;i++)
                {
                delay_ms(900);
                temp=get_temp();
                
                if(temp>320)
                {
                i=200;
                }
                
                }
                
                
                
                }
                
                
                
                
                
                
                
                
                
                
                }
                
                
                
                
                
                
                
                }
                
                
                
                
                
                 
                 // External Interrupt 0 service routine
                
                interrupt [EXT_INT0] void ext_int0_isr(void)
                {
                
                #asm("cli")
                #asm("WDR")
                TCNT1=edge;
                TCCR1B=0x01;
                #asm("sei")
                }
                
                
                
                interrupt [TIM1_OVF] void timer1_ovf_isr(void)
                {
                TCCR1B=0x00;
                PORTD.0=1;
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                #asm("NOP");
                PORTD.0=0;
                }
                
                
                
                
                
                unsigned long int get_temp()
                {
                w=0;
                //interface
                for(r=0;r<=40;r++)
                {
                #asm("WDR")
                ADCSRA|=0x40;
                while((ADCSRA&0x10)==0);
                ADCSRA|=0x10;
                temp=ADCW;
                #asm("WDR")
                w=w+temp;
                #asm("WDR")
                }
                
                temp=(w/40);
                
                return temp;
                }

                دیدگاه

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