امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Watch dog
نویسنده پیام
hadikh73 آفلاین
مدیــر کـل سایـت
*******

ارسال‌ها: 1,218
موضوع‌ها: 43
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 13632
( 14739 تشکر در 4686 ارسال )
ارسال: #12
RE: Watch dog
سلام
من قبلا با کدویزارد واچ داگ  رو فعال کرده بودم و مشکلی نداشتم
شما دقیقا چه مشکلی دارید و ازکجا مطمئن هستیدکه کار نمیکنه؟

۲۱-آبان-۱۳۹۷, ۲۰:۱۴:۴۷
ارسال‌ها
پاسخ
تشکر شده توسط : 1نفر, babyy
sofi3940 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 0
تاریخ عضویت: مرداد ۱۳۹۰

تشکرها : 0
( 5 تشکر در 2 ارسال )
ارسال: #13
RE: Watch dog
(۲۱-آبان-۱۳۹۷, ۲۰:۱۴:۴۷)hadikh73 نوشته است: سلام
من قبلا با کدویزارد واچ داگ  رو فعال کرده بودم و مشکلی نداشتم
شما دقیقا چه مشکلی دارید و ازکجا مطمئن هستیدکه کار نمیکنه؟

سلام
در یک برنامه نسبتا بزرگتر نیاز به فعال سازی واچ داگ دارم .چون با کدویژن کار می کنم می خواستم با آن واچ داگ رو فعال کنم .اما هر گار می کنم فعال نمیشه با ویزارد و حتی فیوز بیت فعال نشد در همه موارد از نرم افزار پروگرام میکروی ، خزاما استفاده می کنم .الان آن قسمت که مربوط به واچ داگ است می گذارم .
#include <mega8.h>
#include <stdlib.h>
#include <delay.h>
#include <stdio.h>

#define led1 PORTB.3   // 1 ON
#define led2 PORTB.2   // 1 ON
#define led3 PORTB.1   // 1 ON
unsigned int msec,mc;
unsigned int sec1; 
unsigned int min1;

 void time()
 {
   sec1++;
    if(sec1 > 59)
    { 
     mc++;
     min1++;
     sec1=0;
    }
  }
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
 TCNT0=0xC2;
   msec++;
   if(msec>999)
    {
     msec=0;
     time();
    }

}

void wdt_reset()  //-------------WDT REset
 { 
  #asm("wdr")
 }       
 void wdt_off()    //--------------WDT Off
 {
  #asm("wdr")
  WDTCR|=(1<<WDCE) | (1<<WDE);
  WDTCR=0x07;  
 }
 void wdt_on()    //---------------WDT ON
  {
   WDTCR =0x0f;   
  }  
 void flasher(int x,int y,int led_t)
 {
   int g;
   for(g=0;g<x;g++)
   {   
    switch(led_t)
     {
      case 1:
        led1 = 1;
        break;
      case 2:
        led2 = 1;
        break;
      case 3:
        led3 = 1;
        break;       
     }
      delay_ms(y);
      switch(led_t)
     {
      case 1:
        led1 = 0;
        break;
      case 2:
        led2 = 0;
        break;
      case 3:
        led3 = 0;
        break;       
     }
     delay_ms(y);
   }
  }      
void main(void)
{
// Declare your local variables here
PORTB=0x00;
DDRB=0x0E;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x03;
TCNT0=0xC2;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;

TIMSK=0x01;

UCSRB=0x00;

ACSR=0x80;
SFIOR=0x00;

ADCSRA=0x00;

SPCR=0x00;

TWCR=0x00;
#pragma optsize-
WDTCR=0x1F;
WDTCR=0x0F;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Global enable interrupts
#asm("sei")
 flasher(2,100,1);
 flasher(2,100,2);  
 flasher(2,100,3);
while (1)
   {
     wdt_on();
     msec=0;
    while(mc < 3000)
     {  
          
       flasher(2,100,1); 
       delay_ms(200);
        
      } 
      delay_ms(1000);     
      wdt_off();
   }
}
۲۲-آبان-۱۳۹۷, ۱۸:۴۶:۳۰
ارسال‌ها
پاسخ
sofi3940 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 0
تاریخ عضویت: مرداد ۱۳۹۰

تشکرها : 0
( 5 تشکر در 2 ارسال )
ارسال: #14
RE: Watch dog
این برنامه با ویزارد واچ داگ رو فعال می کنه .اشکال اینه که واچ داگ اصلن کار نمی کنه یعنی ری ست میکرو رو فعال نمی کنه.
(آخرین ویرایش در این ارسال: ۲۲-آبان-۱۳۹۷, ۱۸:۴۸:۳۲، توسط sofi3940.)
۲۲-آبان-۱۳۹۷, ۱۸:۴۷:۴۴
ارسال‌ها
پاسخ
sofi3940 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 0
تاریخ عضویت: مرداد ۱۳۹۰

تشکرها : 0
( 5 تشکر در 2 ارسال )
ارسال: #15
RE: Watch dog
اینم همان برنامه با روش فعال سازی نرم افزاری
#include <mega8.h>
#include <stdlib.h>
#include <delay.h>
#include <stdio.h>


#define led1 PORTB.3   // 1 ON
#define led2 PORTB.2   // 1 ON
#define led3 PORTB.1   // 1 ON

unsigned int msec,mc;
unsigned int sec1; 
unsigned int min1;

 void time()
 {
   sec1++;
    if(sec1 > 59)
    { 
     min1++;
     sec1=0;
    }
  }
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
 TCNT0=0xC2;
   msec++;   
    mc++;
   if(msec>999)
    {
     msec=0;
     time();
    }
}
void wdt_on(void)
 {  
  WDTCR = 0x1f;
  WDTCR =0x0f;
  }
void wdt_off(void)
 {
  #asm ("wdr")
   WDTCR = 0x1f;
   WDTCR = 0x00;
 }


 void flasher(int x,int y,int led_t)
 {
   int g;
   for(g=0;g<x;g++)
   {   
    switch(led_t)
     {
      case 1:
        led1 = 1;
        break;
      case 2:
        led2 = 1;
        break;
      case 3:
        led3 = 1;
        break;       
     }
      delay_ms(y);
      switch(led_t)
     {
      case 1:
        led1 = 0;
        break;
      case 2:
        led2 = 0;
        break;
      case 3:
        led3 = 0;
        break;       
     }
     delay_ms(y);
   }
  }      
void main(void)
{
// Declare your local variables here
PORTB=0x00;
DDRB=0x0E;
TCCR0=0x03;
TCNT0=0xC2;

TIMSK=0x01;
//SREG |= 0b10000000;
#asm("sei")
#asm("wdr")
    
 flasher(2,100,1);
 flasher(2,100,2);  
 flasher(2,100,3);
while (1)
   {  
      #asm("wdr")
      wdt_on();
      mc=0;
    while(mc <3000)
     {  
       flasher(2,100,1); 
     }  
     // WDTCR=0x1F;
     // WDTCR=0x00;
      delay_ms(2000);     
   }
}
(آخرین ویرایش در این ارسال: ۲۲-آبان-۱۳۹۷, ۱۹:۰۰:۲۲، توسط sofi3940. دلیل ویرایش: نمایش بهتر کدها )
۲۲-آبان-۱۳۹۷, ۱۸:۵۰:۱۳
ارسال‌ها
پاسخ
sofi3940 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 0
تاریخ عضویت: مرداد ۱۳۹۰

تشکرها : 0
( 5 تشکر در 2 ارسال )
ارسال: #16
RE: Watch dog
سلام همان برنامه با Bascom که بخوبی کار میکنه :
$regfile = "m8def.dat"
 $crystal = 4000000
'Config Watchdog = 2048

Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output

Led1 Alias Portb.1
Led2 Alias Portb.2
Led3 Alias Portb.3
 Enable Interrupts

Dim B As Byte


 Led1 = 1
 Waitus 1
 Led1 = 0
 Waitus 1

 Led2 = 1
 Waitus 1
 Led2 = 0
 Waitus 1
 Led3 = 1
 Waitus 1
 Led3 = 0
 Waitus 1

 Set Led1
 Set Led2
 Set Led3
 Waitus 1
 Reset Led1
 Reset Led2
 Reset Led3
 Waitus 1
'Config Watchdog = 2048
Wdtcr = &H1F
Wdtcr = &H07
Do
 Wdtcr = &H0F
 For B = 0 To 1
  Led1 = 1
  Waitus 1
  Led1 = 0
  Waitus 1
 Next B
Wdtcr = &H1F
Wdtcr = &H07
Loop

۲۳-آبان-۱۳۹۷, ۲۰:۲۵:۱۳
ارسال‌ها
پاسخ
sofi3940 آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 0
تاریخ عضویت: مرداد ۱۳۹۰

تشکرها : 0
( 5 تشکر در 2 ارسال )
ارسال: #17
RE: Watch dog
سلام به همه 
تصور میکنم علتشو پیدا کردم .همین برنامه c رو در MikroC_pro For avr نوشتم کار کرد گمان میکنم چون میکرو ویژن کرک شده هست دستورات مربوط به واچ داگ رو کمپایل نمی کنه! 008
(آخرین ویرایش در این ارسال: ۲۴-آبان-۱۳۹۷, ۱۳:۰۰:۴۷، توسط sofi3940.)
۲۴-آبان-۱۳۹۷, ۱۳:۰۰:۰۱
ارسال‌ها
پاسخ
تشکر شده توسط : alimogmov, a.mehran, hadikh73


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS