اطلاعیه

Collapse
No announcement yet.

کمک در برنامه سون سگمنت

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

    کمک در برنامه سون سگمنت

    دوستان من این برنامه رو نوشتم ،
    اولا کار میکرد ولی یذره دست بردم توش دیگه کار نمی کنه
    میخواستم بدونم شما میتونید مشکلش رو بر طرف کنید؟؟؟؟
    کد:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date  : 8/31/2015
    Author : John
    Company : reza
    Comments: 
    
    
    Chip type        : ATmega32A
    Program type      : Application
    AVR Core Clock frequency: 2.000000 MHz
    Memory model      : Small
    External RAM size    : 0
    Data Stack size     : 512
    *****************************************************/
    
    #include <mega32a.h>
    #include <delay.h>
    
    unsigned char SegCounter=0;
    unsigned int SegNum=0;
    
    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    
    unsigned char SegBuf[10]={0xd7,0x11,0xcd,0x5d,0x1b,0x5e,0xde,0x17,0xdf,0x5f};
    unsigned int Temp=0;
    
    
    // Reinitialize Timer 0 value
    TCNT0=0x64;
    SegCounter++; 
     
                    `  
       if(SegNum<10)
       {   
        if(SegCounter==1) 
        {
        PORTC=SegBuf[0]; 
        PORTC.5=1;
        PORTD.0=0; 
        PORTD.1=0;
        PORTD.2=1;
        PORTD.3=0;  
        }
        else if(SegCounter==2) 
        {   
        Temp=SegNum%10;
        PORTC=SegBuf[Temp]; 
        PORTD.0=0; 
        PORTD.1=0;
        PORTD.2=0;
        PORTD.3=1;  
        SegCounter=0; 
        }
       } 
       else if(SegNum<100)
       {   
        if(SegCounter==1) 
        {   
        Temp=SegNum/10;
        
        PORTC=SegBuf[Temp]; 
        PORTC.5=1;
        PORTD.0=0; 
        PORTD.1=0;
        PORTD.2=1;
        PORTD.3=0; 
        }
        else if(SegCounter==2) 
        {   
        Temp=SegNum%10;
        PORTC=SegBuf[Temp];
        PORTD.0=0; 
        PORTD.1=0;
        PORTD.2=0;
        PORTD.3=1;  
        SegCounter=0; 
        }
       } 
       else if(SegNum<1000)
       { 
        if(SegCounter==1) 
        { 
        Temp=SegNum/100;
        Temp=Temp%10;
        PORTC=SegBuf[Temp]; 
        PORTD.0=0; 
        PORTD.1=1;
        PORTD.2=0;
        PORTD.3=0;  
        }
        else if(SegCounter==2) 
        { 
        Temp=SegNum/10;
        Temp=Temp%10;
        PORTC=SegBuf[Temp];
        PORTD.0=0; 
        PORTD.1=0;
        PORTD.2=1;
        PORTD.3=0;  
        PORTC.5=1;  
        }  
        else if(SegCounter==3) 
        { 
        Temp=SegNum%10;
        PORTC=SegBuf[Temp];
        PORTD.0=0; 
        PORTD.1=0;
        PORTD.2=0;
        PORTD.3=1; 
        SegCounter=0;   
        }
       }  
       else
       {  
        if(SegCounter==1) 
        { 
        Temp=SegNum/1000;
        Temp=Temp%10;
        PORTC=SegBuf[Temp]; 
        PORTD.0=1; 
        PORTD.1=0;
        PORTD.2=0;
        PORTD.3=0;  
        }
        else if(SegCounter==2) 
        { 
        Temp=SegNum/100;
        Temp=Temp%10;
        PORTC=SegBuf[Temp];
        PORTD.0=0; 
        PORTD.1=1;
        PORTD.2=0;
        PORTD.3=0;   
        }  
        else if(SegCounter==3) 
        {    
        Temp=SegNum/10;
        Temp=Temp%10;
        PORTC=SegBuf[Temp]; 
        PORTC.5=1;
        PORTD.0=0; 
        PORTD.1=0;
        PORTD.2=1;
        PORTD.3=0;   
        } 
        else if(SegCounter==4) 
        {    
        Temp=SegNum%10;
        PORTC=SegBuf[Temp]; 
        PORTD.0=0; 
        PORTD.1=0;
        PORTD.2=0;
        PORTD.3=1;  
        SegCounter=0; 
        }
       }  
       
       
    }
    
    // Timer2 overflow interrupt service routine
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
    // Reinitialize Timer2 value
    TCNT2=130;
    // Place your code here
    
    }
    
    // Voltage Reference: AVCC pin
    #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
    
    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | ADC_VREF_TYPE;
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=(1<<ADSC);
    // Wait for the AD conversion to complete
    while ((ADCSRA & (1<<ADIF))==0);
    ADCSRA|=(1<<ADIF);
    return ADCW;
    }
    
    // Declare your global variables here
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTA=0x00;
    DDRA=0x00;
    
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTB=0x00;
    DDRB=0x00;
    
    // Port C initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTC=0x00;
    DDRC=0xFF;
    
    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0 
    PORTD=0x00;
    DDRD=0xFF;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 7.813 kHz
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=0x03;
    TCNT0=0x64;
    OCR0=0x00;
    
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 250.000 kHz
    // Mode: Fast PWM top=0xFF
    // OC2 output: Non-Inverted PWM
    ASSR=0x00;
    TCCR2=0x6A;
    TCNT2=130;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x40;
    
    
    
    // USART initialization
    // USART disabled
    UCSRB=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC Clock frequency: 500.000 kHz
    // ADC Voltage Reference: AVCC pin
    // ADC Auto Trigger Source: Free Running
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
    SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
    
    // SPI initialization
    // SPI disabled
    SPCR=0x00;
    
    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
       {
       // Place your code here 
       SegNum=read_adc(1c);
       SegNum++; 
       delay_ms(200);
       if(SegNum>9999) SegNum=0; 
         
       //OCR2=165;
       }
    }

    #2
    پاسخ : کمک در برنامه سون سگمنت

    برای چیه؟ کار کلیش چی باید باشه؟
    http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

    دیدگاه


      #3
      پاسخ : کمک در برنامه سون سگمنت

      نوشته اصلی توسط loveman
      دوستان من این برنامه رو نوشتم ،
      اولا کار میکرد ولی یذره دست بردم توش دیگه کار نمی کنه
      میخواستم بدونم شما میتونید مشکلش رو بر طرف کنید؟؟؟؟
      کد:
      /*****************************************************
      This program was produced by the
      CodeWizardAVR V2.05.3 Standard
      Automatic Program Generator
      © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
      http://www.hpinfotech.com
      
      Project : 
      Version : 
      Date  : 8/31/2015
      Author : John
      Company : reza
      Comments: 
      
      
      Chip type        : ATmega32A
      Program type      : Application
      AVR Core Clock frequency: 2.000000 MHz
      Memory model      : Small
      External RAM size    : 0
      Data Stack size     : 512
      *****************************************************/
      
      #include <mega32a.h>
      #include <delay.h>
      
      unsigned char SegCounter=0;
      unsigned int SegNum=0;
      
      // Timer 0 overflow interrupt service routine
      interrupt [TIM0_OVF] void timer0_ovf_isr(void)
      {
      
      unsigned char SegBuf[10]={0xd7,0x11,0xcd,0x5d,0x1b,0x5e,0xde,0x17,0xdf,0x5f};
      unsigned int Temp=0;
      
      
      // Reinitialize Timer 0 value
      TCNT0=0x64;
      SegCounter++; 
       
                      `  
         if(SegNum<10)
         {   
          if(SegCounter==1) 
          {
          PORTC=SegBuf[0]; 
          PORTC.5=1;
          PORTD.0=0; 
          PORTD.1=0;
          PORTD.2=1;
          PORTD.3=0;  
          }
          else if(SegCounter==2) 
          {   
          Temp=SegNum%10;
          PORTC=SegBuf[Temp]; 
          PORTD.0=0; 
          PORTD.1=0;
          PORTD.2=0;
          PORTD.3=1;  
          SegCounter=0; 
          }
         } 
         else if(SegNum<100)
         {   
          if(SegCounter==1) 
          {   
          Temp=SegNum/10;
          
          PORTC=SegBuf[Temp]; 
          PORTC.5=1;
          PORTD.0=0; 
          PORTD.1=0;
          PORTD.2=1;
          PORTD.3=0; 
          }
          else if(SegCounter==2) 
          {   
          Temp=SegNum%10;
          PORTC=SegBuf[Temp];
          PORTD.0=0; 
          PORTD.1=0;
          PORTD.2=0;
          PORTD.3=1;  
          SegCounter=0; 
          }
         } 
         else if(SegNum<1000)
         { 
          if(SegCounter==1) 
          { 
          Temp=SegNum/100;
          Temp=Temp%10;
          PORTC=SegBuf[Temp]; 
          PORTD.0=0; 
          PORTD.1=1;
          PORTD.2=0;
          PORTD.3=0;  
          }
          else if(SegCounter==2) 
          { 
          Temp=SegNum/10;
          Temp=Temp%10;
          PORTC=SegBuf[Temp];
          PORTD.0=0; 
          PORTD.1=0;
          PORTD.2=1;
          PORTD.3=0;  
          PORTC.5=1;  
          }  
          else if(SegCounter==3) 
          { 
          Temp=SegNum%10;
          PORTC=SegBuf[Temp];
          PORTD.0=0; 
          PORTD.1=0;
          PORTD.2=0;
          PORTD.3=1; 
          SegCounter=0;   
          }
         }  
         else
         {  
          if(SegCounter==1) 
          { 
          Temp=SegNum/1000;
          Temp=Temp%10;
          PORTC=SegBuf[Temp]; 
          PORTD.0=1; 
          PORTD.1=0;
          PORTD.2=0;
          PORTD.3=0;  
          }
          else if(SegCounter==2) 
          { 
          Temp=SegNum/100;
          Temp=Temp%10;
          PORTC=SegBuf[Temp];
          PORTD.0=0; 
          PORTD.1=1;
          PORTD.2=0;
          PORTD.3=0;   
          }  
          else if(SegCounter==3) 
          {    
          Temp=SegNum/10;
          Temp=Temp%10;
          PORTC=SegBuf[Temp]; 
          PORTC.5=1;
          PORTD.0=0; 
          PORTD.1=0;
          PORTD.2=1;
          PORTD.3=0;   
          } 
          else if(SegCounter==4) 
          {    
          Temp=SegNum%10;
          PORTC=SegBuf[Temp]; 
          PORTD.0=0; 
          PORTD.1=0;
          PORTD.2=0;
          PORTD.3=1;  
          SegCounter=0; 
          }
         }  
         
         
      }
      
      // Timer2 overflow interrupt service routine
      interrupt [TIM2_OVF] void timer2_ovf_isr(void)
      {
      // Reinitialize Timer2 value
      TCNT2=130;
      // Place your code here
      
      }
      
      // Voltage Reference: AVCC pin
      #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
      
      // Read the AD conversion result
      unsigned int read_adc(unsigned char adc_input)
      {
      ADMUX=adc_input | ADC_VREF_TYPE;
      // Delay needed for the stabilization of the ADC input voltage
      delay_us(10);
      // Start the AD conversion
      ADCSRA|=(1<<ADSC);
      // Wait for the AD conversion to complete
      while ((ADCSRA & (1<<ADIF))==0);
      ADCSRA|=(1<<ADIF);
      return ADCW;
      }
      
      // Declare your global variables here
      
      void main(void)
      {
      // Declare your local variables here
      
      // Input/Output Ports initialization
      // Port A initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
      PORTA=0x00;
      DDRA=0x00;
      
      // Port B initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
      PORTB=0x00;
      DDRB=0x00;
      
      // Port C initialization
      // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
      // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
      PORTC=0x00;
      DDRC=0xFF;
      
      // Port D initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out 
      // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0 
      PORTD=0x00;
      DDRD=0xFF;
      
      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: 7.813 kHz
      // Mode: Normal top=0xFF
      // OC0 output: Disconnected
      TCCR0=0x03;
      TCNT0=0x64;
      OCR0=0x00;
      
      
      // Timer/Counter 2 initialization
      // Clock source: System Clock
      // Clock value: 250.000 kHz
      // Mode: Fast PWM top=0xFF
      // OC2 output: Non-Inverted PWM
      ASSR=0x00;
      TCCR2=0x6A;
      TCNT2=130;
      OCR2=0x00;
      
      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // INT2: Off
      MCUCR=0x00;
      MCUCSR=0x00;
      
      
      
      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=0x40;
      
      
      
      // USART initialization
      // USART disabled
      UCSRB=0x00;
      
      // Analog Comparator initialization
      // Analog Comparator: Off
      // Analog Comparator Input Capture by Timer/Counter 1: Off
      ACSR=0x80;
      SFIOR=0x00;
      
      // ADC initialization
      // ADC Clock frequency: 500.000 kHz
      // ADC Voltage Reference: AVCC pin
      // ADC Auto Trigger Source: Free Running
      ADMUX=ADC_VREF_TYPE;
      ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
      SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
      
      // SPI initialization
      // SPI disabled
      SPCR=0x00;
      
      // TWI initialization
      // TWI disabled
      TWCR=0x00;
      
      // Global enable interrupts
      #asm("sei")
      
      while (1)
         {
         // Place your code here 
         SegNum=read_adc(1c);
         SegNum++; 
         delay_ms(200);
         if(SegNum>9999) SegNum=0; 
           
         //OCR2=165;
         }
      }
      یه برنامه ساده رو زیادی پیچوندی. منم الان حوصله اصلاحش رو ندارم ولی بهتره نقشه مدارش رو هم بزاری

      این بخش خیلی واسم جالب بود:
      کد:
       SegNum=read_adc(1c);
      توی میکرو به این تعداد ADC نداریم :rolleyes:
      البته این هیچ کد هگز نیست . باید از این خطا بگیره
      فکر کنم مگا۳۲ هشتا بیشتر ADC نداره.
      صفر تا هفت
      If the wind will not serve, take to the oars

      دیدگاه

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