اطلاعیه

Collapse
No announcement yet.

خطا در برنامه c تابلوروان

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

    #16
    پاسخ : خطا در برنامه c تابلوروان

    میشه آخرین کدتون رو بصورت کامل قرار بدین؟

    دیدگاه


      #17
      پاسخ : خطا در برنامه c تابلوروان

      نوشته اصلی توسط امیر . م
      میشه آخرین کدتون رو بصورت کامل قرار بدین؟
      خدمت شما:
      کد:
      Chip type        : ATmega32A
      Program type      : Application
      AVR Core Clock frequency: 16.000000 MHz
      Memory model      : Small
      External RAM size    : 0
      Data Stack size     : 512
      *****************************************************/
      #include <mega32a.h>
      #define columns 40
      #define offset 50
      #define space  6
      #define SPEED  5
      #define NOP   #asm("nop")
      #define DATA  PORTA.0
      #define CLOCK  PORTA.1
      #define STROBE PORTA.2
        
         const char font[] = {
           0x42,0x61,0x51,0x49,0x46,// 2
           0x3E,0x51,0x49,0x45,0x3E,// 0
           0x00,0x42,0x7F,0x40,0x00,// 1
           0x18,0x14,0x12,0x7F,0x10,// 4
           };     
           
            char text[]="2014";
           char buffer[1000];
           char display[columns];
           int n;
           
           void scan(char negative);
           void load(char *str);
           void effect();
           
               //----------------
           void main(void) 
           {       
           
             char s;
             //------------
             //lcd_init(16);
             //lcd_clear();
             
             //-------------
              DDRA=0xFF;
              load(text);
              while(1)
              {
                for(s=0;s<SPEED;s++)
                 scan(0);
                effect();
              }
           }
           //--------------------
           void load(char *str)
           {   
              int FontPosition,i,j=0;
              while(*str != 0)
              {
                FontPosition=(int)((*str++)-32)*5;
                for(i=0;i<5;i++)
                  buffer[j+i]=font[FontPosition+i];
                j+=space;
              }
           } 
           //----------------------
           void effect()
           {
             register char i;
             for(i=0;i<columns;i++)
              display[i]=display[i+1];
              display[columns-1]=buffer[n];
              n++;
              if(n==(sizeof(text)*5)+offset)n=0;
           }
           //-------------------------- 
            void scan(char negative)
           {     
              char i,j,data; 
             for(j=0;j<8;j++){
               STROBE=0;
               CLOCK=1;
               for(i=columns;i>0;i--){
                data=display[i-1];
                if(negative)
                 data=~display[i-1];
                data=data>>j;
                DATA=data & 0x01;
                CLOCK=0;
                NOP
                NOP
                CLOCK=1;
              }
             for(i=0;i<8;i++){
              DATA=0;
              if(i==j)
                DATA=1;
              CLOCK=0;
              NOP
              NOP
              CLOCK=1;
             }
             STROBE=1;
             NOP
             NOP
             STROBE=0;
            }
           }
      قبل از دویدن باید راه رفتن یاد گرفت.

      دیدگاه


        #18
        پاسخ : خطا در برنامه c تابلوروان

        چند تا مورد :
        AVCC رو به 5 ولت وصل کردی؟
        این خط فکر کنم باید تغییر کنه :
        کد:
        char display[columns];
        باید بشه :
        کد:
        char display[columns+2];
        چون یک بایت بیشتر از حد مجاز ازش استفاده میکردی و متغیر n که خط بعدش تعریف شده، تغییر میکرد.
        کد کامل :
        کد:
        #include <mega32a.h>
        #define columns 40
        #define offset 50
        #define space  6
        #define SPEED  5
        #define NOP   #asm("nop")
        #define DATA  PORTA.0
        #define CLOCK  PORTA.1
        #define STROBE PORTA.2
        
        const char font[] =
        {
        0x42,0x61,0x51,0x49,0x46,// 2
        0x3E,0x51,0x49,0x45,0x3E,// 0
        0x00,0x42,0x7F,0x40,0x00,// 1
        0x18,0x14,0x12,0x7F,0x10,// 4
        };
        
        char text[]="2014";
        char buffer[1000];
        char display[columns+2];
        int n;
        
        void scan(char negative);
        void load(char *str);
        void effect();
        
        //----------------
        void main(void)
        {
        	
        	char s;
        	DDRA=0xFF;
        	load(text);
        	while(1)
        	{
        		for(s=0;s<SPEED;s++)
        			scan(0);
        		effect();
        	}
        }
        //--------------------
        void load(char *str)
        {
        	int FontPosition,i,j=0;
        	while(*str != 0)
        	{
        		FontPosition=(int)((*str++)-32)*5;
        		for(i=0;i<5;i++)
        			buffer[j+i]=font[FontPosition+i];
        		j+=space;
        	}
        }
        //----------------------
        void effect()
        {
        	register char i;
        	for(i=0;i<columns;i++)
        		display[i]=display[i+1];
        	display[columns-1]=buffer[n];
        	n++;
        	if(n==(sizeof(text)*5)+offset)n=0;
        }
        //--------------------------
        void scan(char negative)
        {
        	char i,j,data;
        	for(j=0;j<8;j++)
        	{
        		STROBE=0;
        		CLOCK=1;
        		for(i=columns;i>0;i--)
        		{
        			data=display[i-1];
        			if(negative)
        				data=~display[i-1];
        			data=data>>j;
        			DATA=data & 0x01;
        			CLOCK=0;
        			NOP;
        			NOP;
        			CLOCK=1;
        		}
        		for(i=0;i<8;i++)
        		{
        			DATA=0;
        			if(i==j)
        				DATA=1;
        			CLOCK=0;
        			NOP;
        			NOP;
        			CLOCK=1;
        		}
        		STROBE=1;
        		NOP;
        		NOP;
        		STROBE=0;
        	}
        }

        دیدگاه


          #19
          پاسخ : خطا در برنامه c تابلوروان

          نوشته اصلی توسط امیر . م
          چند تا مورد :
          AVCC رو به 5 ولت وصل کردی؟
          این خط فکر کنم باید تغییر کنه....
          تست میکنم.
          ------------------------
          خط رو تغییردادم و AVCC رو به پنچ ولت وصل کردم بازم جواب نداد.
          قبل از دویدن باید راه رفتن یاد گرفت.

          دیدگاه


            #20
            پاسخ : خطا در برنامه c تابلوروان

            مشکل از کدویزن هست این کد اخری که گزاشتم چون هدر فایل ها رو برداشتم دیگه ارور نمیده.احتمالا همون کد اولی باید درست باشه.
            یه برنامه جدید باز میکنم که فقط یه تابع اصلی main داره و فقط کتابخونه ی stdio رو include میکنم بعد داخل main هم چیزی نمینویسم ولی وقتی کمپایلش میکنم همین سه تا Library error ازش میگیره.کدویزن من 2.05.0 professional هست.نسخه جدید رو نصب و تست میکنم...
            دوستان ببینید برای شما هم این مشکل پیش میاد؟
            قبل از دویدن باید راه رفتن یاد گرفت.

            دیدگاه


              #21
              پاسخ : خطا در برنامه c تابلوروان

              مشکل رو فکر کنم فهمیدم. شما بیزحمت فایل پروژه رو همراه کد بزار.
              احتمالا سر تنظیمات stack هست که مشکل داری.

              دیدگاه


                #22
                پاسخ : خطا در برنامه c تابلوروان

                مشکل حل شد.
                همون کد اول:
                کد:
                #include <mega32a.h>
                #include <delay.h>
                #asm
                  .equ __lcd_port=0x1B
                #endasm
                #include <lcd.h>
                #include <stdio.h>
                
                #define columns 40
                #define offset 50
                #define space  6
                #define SPEED  5
                #define NOP   #asm("nop")
                #define DATA  PORTA.0
                #define CLOCK  PORTA.1
                #define STROBE PORTA.2
                  
                   const char font[] = {
                     0X42,0X61,0X51,0X49,0X46,// 2
                     0X3E,0X51,0X49,0X45,0X3E,// 0
                     0X00,0X42,0X7F,0X40,0X00,// 1
                     0X18,0X14,0X12,0X7F,0X10,// 4
                     };
                     
                     void scan(char negative);
                     void load(char *str);
                     void effect();
                     
                     char text[]="2014";
                     char buffer[1000];
                     char display[columns];
                     int n;
                     void main(void) 
                     {
                        char s;
                        DDRA=0xFF;
                        load(text);
                        while(1)
                        {
                          for(s=0;s<SPEED;s++)
                           scan(0);
                          effect();
                        }
                     }
                     //--------------------
                     void load(char *str)
                     {
                        int FontPosition,i,j=0;
                        while(*str != 0)
                        {
                          FontPosition=(int)((*str++)-32)*5;
                          for(i=0;i<5;i++)
                            buffer[j+i]=font[FontPosition+i];
                          j+=space;
                        }
                     } 
                     //----------------------
                     void effect()
                     {
                       register char i;
                       for(i=0;i<columns;i++)
                        display[i]=display[i+1];
                        display[columns-1]=buffer[n];
                        n++;
                        if(n==(sizeof(text)*5)+offset)n=0;
                     }
                     //--------------------------
                      void scan(char negative)
                     {
                       char i,j,data;
                       for(j=0;j<8;j++){
                         STROBE=0;
                         CLOCK=1;
                         for(i=columns;i>0;i--){
                          data=display[i-1];
                          if(negative)
                           data=~display[i-1];
                          data=data>>j;
                          DATA=data & 0x01;
                          CLOCK=0;
                          NOP
                          NOP
                          CLOCK=1;
                        }
                       for(i=0;i<8;i++){
                        DATA=0;
                        if(i==j)
                          DATA=1;
                        CLOCK=0;
                        NOP
                        NOP
                        CLOCK=1;
                       }
                       STROBE=1;
                       NOP
                       NOP
                       STROBE=0;
                      }
                     }
                با این نسخه (3.10) کدویزن:
                http://www.hpinfotech.ro/cvavr_download.html
                بدون خطا کمپایل میشه.میکرو و تابلو هم درست کار میکنند.
                از دوستانی که وقت گزاشتن و کمک کردن ممنونم.
                قبل از دویدن باید راه رفتن یاد گرفت.

                دیدگاه

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