با سلام،برای روشن خاموش کردن یه موتور 220 از یه رله استفاده کردم که که میکرو فرمان قطع و وصل رو میده،ولی این رله درست قطع و وصل نمیشه،مدارو بدون برق 220 امتحان میکنم،رله به درستی قطع و وصل میشه،ولی وقتی برق 220 وصل میشه،رله نه درست وصل میشه نه درس قطع،به خصوص در قطع شدن،مشکل از کجا میتونه باشه؟از یه بافر uln2003 استفاده کردم نشد،قبلش یه اپتوکوپلر گذاشتم نشد،با هر مداری گذاشتم رله کار میکنه ولی همون مشکل قطع و وصل رو داره،ممنون میشم کمکم کنید،تاپیک ها رو خوندم ولی بازم چیزی پیدا نکردم
اطلاعیه
Collapse
No announcement yet.
مشکل در قطع و وصل شدن رله با avr
Collapse
X
-
پاسخ : مشکل در قطع و وصل شدن رله با avr
نوشته اصلی توسط arvinfx نمایش پست هاشماتیک بزارین
الان وقفه رو حساس به لبه بالارونده کردم ولی در عمل بعضی وقتا به لبه پایین رونده وقفه عمل میکنه،مشکل از چی میتونه باشه؟
اینم کداری برنامم:
/*
* dht11.c
*
* Created: 5/10/2018 921 AM
* Author : Mgh
*/
#ifndef F_CPU
#define F_CPU 1000000 /* CPU CLOCK FREQUENCY */
#endif
#include <avr/io.h>
#include <stdlib.h>
#include <stdio.h>
#include <util/delay.h>
#include <math.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include "LCD16x2_4bit.h"
#include "DHT.h"
#define SLEEP_MODE_IDLE 0
float hum,temp;
char buffer[17];
float 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];
float humidity,Temperature;
/*
PORTA:
lcd setting
PORTD:
0=>turn on Heater
1=>turn on Fan
2=>Rotation interrupt
3=>display on - start duration interrupt
4=>Rotation
5=>sensor dht11
*/
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) {
WDT_OFF();
cli();
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;
}
}
}
}
sei();
}
ISR(TIMER0_COMP_vect){
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_gotoxy(0,0);
lcd_print(buffer);
lcd_gotoxy(0,1);
lcd_print(str);
i++;
if(i == 10){
i=0;
}
if (day <= 18)
{
humidity = 60;
Temperature = 37.7;
}
else
{
humidity = 73;
Temperature = 37.3;
}
}
ISR(INT0_vect)
{
PORTD &= ~(1 << 4);
}
ISR(INT1_vect)
{
PORTD |= (1 << 4);
}
int main(void)
{
lcdinit();
DHT_Setup();
WDT_ON();
DDRD = 0b00010011;
PORTD = 0b00001100;
TCCR0 |= (1 << WGM01) | (1 << CS00) | (1 << CS02);
OCR0 = 0x60;
TIFR |= (1 << OCF0);
TIMSK |= (1 << OCIE0);
TCNT0 = 0;
TCCR1B |= (1 << WGM12) | (1 << CS01);
OCR1A = 0x30D3;
TIMSK |= (1 << OCIE1A);
//interrupt 0,1
GICR |= 1<<INT0 | 1<<INT1;
MCUCR |= 1<<ISC00 | 1<<ISC01 | 1<<ISC10 | 1<<ISC11;
GIFR |= 1<<INT0 | 1<<INT1;
sei();
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
while(1)
{
DHT_Read(&temp,&hum);
arr_ave_t[i]=temp;
arr_ave_h[i]=hum;
_delay_ms(1000);
}
}
دیدگاه
دیدگاه