اطلاعیه

Collapse
No announcement yet.

سوال در مورد چرخش دستگاه جوجه کشی

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

    سوال در مورد چرخش دستگاه جوجه کشی

    با سلام،یه دستگاه جوجه کشی دارم درست میکنم،واسه چرخش از داخل تایمر بعد از یه مدتی یه رله کهوصله به موتور 220 رو روشن و واسه خاموش شدنش از میکروسوئیچ استفاده کردم،که میکروسوئیچ ها رو پول اپ خارجی کردم و وقفه رو مد بالارونده ست کردم،بعضی وقتا رو لبه پایین رونده خاموش میشه،اکثر مواقع رو لبه بالارونده خاموش میشه،بعضی وقتا که کلا قطع نمیشه،ممنون میشم کمکم کنید،کدم هم این هست
    [FONT=Yekan]#ifndef F_CPU[/FONT]#define F_CPU 1000000UL
    #endif


    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <util/delay.h>
    #include <avr/sleep.h>
    #include "LCD_16x2_H_file.h"
    #include "DHT.h"


    //#define SLEEP_MODE_IDLE 0


    double hum,temp;
    char buffer[17];
    double arr_ave_h[10]={ 0 },arr_ave_t[10]={ 0 };
    volatile int count = 0,sec = 0,min = 0,hour = 0,day = 0,i=0,Rotate_flag=0,display_flag=0;
    char str[10];
    double humidity,Temperature;


    //void WDT_ON()
    //{
    ///*
    //Watchdog timer enables with typical timeout period 2.1
    //second.
    //*/
    //WDTCR = ( 1<<WDE)|( 1<<WDP2)|( 1<<WDP1)|(1<<WDP0);
    //}
    //void WDT_OFF()
    //{
    ///*
    //This function use for disable the watchdog timer.
    //*/
    //WDTCR = ( 1<<WDTOE)|( 1<<WDE);
    //WDTCR = 0x00;
    //}
    //
    ISR(TIMER1_COMPA_vect)
    {


    count++;
    if (count >= 10)
    {
    sec++;
    count = 0;
    if (sec >= 60)
    {
    min++;
    PORTD |= (1 << 4);
    sec = 0;
    if (min >= 60)
    {
    hour++;

    min = 0;
    if (hour >= 24)
    {
    day++;
    hour = 0;
    }
    }
    }
    }


    }


    ISR(TIMER0_COMP_vect)
    {
    //WDT_OFF();
    sprintf(buffer,"T=%0.1fC H=%0.1f%%",avreage(arr_ave_t),avreage(arr_ave_h));
    sprintf(str,"%02d:%02d:%02d:%02d",day,hour,min,sec);
    LCD_String_xy(0,0,buffer);
    LCD_String_xy(1,0,str);
    }


    ISR(INT0_vect)
    {

    PORTD &= ~(1 << 4);
    _delay_ms(1);
    LCD_Clear();


    }


    ISR(INT1_vect)
    {


    //PORTD |= (1 << 4);
    LCD_Clear();


    }


    int main(void)
    {


    LCD_Init();
    DHT_Setup();

    //WDT_ON();


    timer1_init();
    timer0_init();


    int0_init();
    int1_init();


    DDRD = 0b00010011;
    PORTD = 0b00000000;


    sei();


    while (1)
    {


    DHT_Read(&temp,&hum);
    arr_ave_t[i]=temp;
    arr_ave_h[i]=hum;
    i++;
    if(i == 10){
    i=0;
    }
    _delay_ms(2000);


    }
    }


    void timer1_init()
    {
    TCCR1B |= (1 << WGM12) | (1 << CS11);
    OCR1A = 0x30D3;
    TIMSK |= (1 << OCIE1A);
    }


    void timer0_init()
    {
    TCCR0 |= (1 << WGM01) | (1 << CS00) | (1 << CS02);
    OCR0 = 0x60;
    TIMSK |= (1 << OCIE0);
    }


    void int0_init()
    {
    GICR |= 1<<INT0;
    MCUCR |= 1<<ISC00 | 1<<ISC01;
    }


    void int1_init()
    {
    GICR |= 1<<INT1 ;
    MCUCR |= 1<<ISC10 | 1<<ISC11;
    }



    و ال سی دی هم به هم میریزه،که توی تاپیک های قبلی خوندم کسی راه حل اساسی نگفته،انگار که این مشکل با هیچ روشی درس نمیشه،ممنون میشم کمکم کنید
لطفا صبر کنید...