پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار
ممنون دوست عزیز: مشکل گیر کردن رله و led حل شده است ! بازر نمی دانم ایا 3 ثانیه سوت می کشه یا نه! فردا عملا تست می کنم !! فقط الان lcd گیر خوداش را داره!! به نظر شما مشکل از چی می تونه باشد؟ یک فیلم چند ثانیه و 1 مگی گذاشتم! از عملکرد مدار!
http://s3.picofile.com/file/8210105576/bandicam_2015_09_04_00_48_12_155.zip.html
سپاس
نوشته اصلی توسط mahdi8866
خب خدا رو شکر حالا که حل شد یکار دیگه بکنیم بیایم دستور روشن شدن رله رو بعد دستور بازر بنویسیم
مشکل از این بود که ما موقعی که پین مربوط رله رو 0 میکردیم با اجرا شدن شرط IF در حلقه دوم بلا فاصله پین رله 1 میشد و 3 ثانیه هم بازر روشن میشد
حالا جای دستور 1 شدن رله رو بعد بازر میذارم و بازر هم با همون 3 ثانیه صوت کشیدن پس شما کد زیر تست کن ببین این چطوره
اگه کد زیر با همون بازر 3 ثانیه درست کار کرد که هیچی وگرنه همون کد قبل رو استفاده کن
[code=c]
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#include <i2c.h>
#include <ds1307.h>
#include <alcd.h>
#define b_down PIND.1
#define b_up PIND.2
#define b_set PIND.0
#define b_set_down PIND.3
#define relay PORTB.7
#define buzzer PORTC.0
//__________________________________________________ __________
void main(){
char lcd_buffer1[16];
unsigned char hr,min,sec,status=0,value=0,roz=0;
unsigned char week,year,month,day;
unsigned char en_hr=0,en_min=0,en_sec=0;
unsigned char st_hr=0,st_min=0,st_sec=0;
unsigned char en_year=0,en_month=0,en_day=0;
unsigned char st_year=0,st_month=0,st_day=0;
unsigned int main_year;
DDRB.7=1;
relay = 0;
DDRC=0xFF;
PORTD=0XFF;
i2c_init();
lcd_init(16);
rtc_init(0,0,0);
if(b_set == 0)
{
rtc_set_time(0,0,0);
rtc_set_date(0,8,7,15);
lcd_putsf("Successfully!"
;
while(1)
{
}
}
delay_ms(20);
rtc_get_time(&en_hr,&en_min,&en_sec);
rtc_get_time(&st_hr,&st_min,&st_sec);
rtc_get_date(&week,&en_day,&en_month,& amp;en_year);
rtc_get_date(&week,&st_day,&st_month,& amp;st_year);
delay_ms(20);
while (1){
while(status == 0)
{
rtc_get_time(&hr,&min,&sec);
rtc_get_date(&week,&day,&month,&ye ar);
main_year = year + 2000;
if(b_up == 0)
{
roz++;
if(roz == 2) roz = 0;
while(b_up == 0);
}
if(roz == 0)
{
if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
{
value = 1;
buzzer = 1;
delay_ms(3000);
buzzer = 0;
relay = 1;
}
if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
{
value = 0;
relay = 0;
}
}
else
{
if(hr == en_hr & min == en_min & sec == en_sec)
{
value = 1;
buzzer = 1;
delay_ms(3000);
buzzer = 0;
relay = 1;
}
if(hr == st_hr & min == st_min & sec == st_sec)
{
value = 0;
relay = 0;
}
}
lcd_clear();
sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer1);
sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
lcd_gotoxy(0,1);
lcd_puts(lcd_buffer1);
if(value == 0)
lcd_putsf("Off"
;
else
lcd_putsf("On"
;
if(roz != 0)
lcd_putsf(" R"
;
if(b_set == 0)
{
status++;
if(status == 19) status = 0;
while(b_set == 0);
}
delay_ms(200);
}
rtc_get_time(&hr,&min,&sec);
b:
while(status == 1)
{
if(b_up == 0)
{
hr++;
if(hr == 25) hr = 0;
delay_ms(70);
}
if(b_down == 0)
{
hr--;
if(hr == -1) hr = 0;
delay_ms(70);
}
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer1,"Time~%02u:%02u:%02u" ;,hr,min,sec);
lcd_puts(lcd_buffer1);
delay_ms(80);
lcd_clear();
sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec);
lcd_puts(lcd_buffer1);
delay_ms(80);
if(b_set == 0)
{
rtc_set_time(hr,min,sec);
status++;
if(status == 19) status = 0;
while(b_set == 0);
}
if(b_set_down == 0)
{
status--;
if(status == -1) status = 0;
while(b_set_down == 0);
goto b;
}
}
[/code]
مشکل از این بود که ما موقعی که پین مربوط رله رو 0 میکردیم با اجرا شدن شرط IF در حلقه دوم بلا فاصله پین رله 1 میشد و 3 ثانیه هم بازر روشن میشد
حالا جای دستور 1 شدن رله رو بعد بازر میذارم و بازر هم با همون 3 ثانیه صوت کشیدن پس شما کد زیر تست کن ببین این چطوره
اگه کد زیر با همون بازر 3 ثانیه درست کار کرد که هیچی وگرنه همون کد قبل رو استفاده کن
[code=c]
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#include <i2c.h>
#include <ds1307.h>
#include <alcd.h>
#define b_down PIND.1
#define b_up PIND.2
#define b_set PIND.0
#define b_set_down PIND.3
#define relay PORTB.7
#define buzzer PORTC.0
//__________________________________________________ __________
void main(){
char lcd_buffer1[16];
unsigned char hr,min,sec,status=0,value=0,roz=0;
unsigned char week,year,month,day;
unsigned char en_hr=0,en_min=0,en_sec=0;
unsigned char st_hr=0,st_min=0,st_sec=0;
unsigned char en_year=0,en_month=0,en_day=0;
unsigned char st_year=0,st_month=0,st_day=0;
unsigned int main_year;
DDRB.7=1;
relay = 0;
DDRC=0xFF;
PORTD=0XFF;
i2c_init();
lcd_init(16);
rtc_init(0,0,0);
if(b_set == 0)
{
rtc_set_time(0,0,0);
rtc_set_date(0,8,7,15);
lcd_putsf("Successfully!"

while(1)
{
}
}
delay_ms(20);
rtc_get_time(&en_hr,&en_min,&en_sec);
rtc_get_time(&st_hr,&st_min,&st_sec);
rtc_get_date(&week,&en_day,&en_month,& amp;en_year);
rtc_get_date(&week,&st_day,&st_month,& amp;st_year);
delay_ms(20);
while (1){
while(status == 0)
{
rtc_get_time(&hr,&min,&sec);
rtc_get_date(&week,&day,&month,&ye ar);
main_year = year + 2000;
if(b_up == 0)
{
roz++;
if(roz == 2) roz = 0;
while(b_up == 0);
}
if(roz == 0)
{
if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
{
value = 1;
buzzer = 1;
delay_ms(3000);
buzzer = 0;
relay = 1;
}
if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
{
value = 0;
relay = 0;
}
}
else
{
if(hr == en_hr & min == en_min & sec == en_sec)
{
value = 1;
buzzer = 1;
delay_ms(3000);
buzzer = 0;
relay = 1;
}
if(hr == st_hr & min == st_min & sec == st_sec)
{
value = 0;
relay = 0;
}
}
lcd_clear();
sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer1);
sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
lcd_gotoxy(0,1);
lcd_puts(lcd_buffer1);
if(value == 0)
lcd_putsf("Off"

else
lcd_putsf("On"

if(roz != 0)
lcd_putsf(" R"

if(b_set == 0)
{
status++;
if(status == 19) status = 0;
while(b_set == 0);
}
delay_ms(200);
}
rtc_get_time(&hr,&min,&sec);
b:
while(status == 1)
{
if(b_up == 0)
{
hr++;
if(hr == 25) hr = 0;
delay_ms(70);
}
if(b_down == 0)
{
hr--;
if(hr == -1) hr = 0;
delay_ms(70);
}
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer1,"Time~%02u:%02u:%02u" ;,hr,min,sec);
lcd_puts(lcd_buffer1);
delay_ms(80);
lcd_clear();
sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec);
lcd_puts(lcd_buffer1);
delay_ms(80);
if(b_set == 0)
{
rtc_set_time(hr,min,sec);
status++;
if(status == 19) status = 0;
while(b_set == 0);
}
if(b_set_down == 0)
{
status--;
if(status == -1) status = 0;
while(b_set_down == 0);
goto b;
}
}
[/code]
http://s3.picofile.com/file/8210105576/bandicam_2015_09_04_00_48_12_155.zip.html
سپاس
دیدگاه