problem with atmega32a

mikroC, mikroBasic and mikroPascal PRO for Microchip’s (formerly Atmel) 8-bit AVR MCUs
Post Reply
Author
Message
Ahmed allam
Posts: 1
Joined: 17 Jul 2016 17:02

problem with atmega32a

#1 Post by Ahmed allam » 12 Apr 2017 12:18

hi
I have problem with atmega32 and char lcd 2x16 project
so , I need help

the problem :
when I add more code for my code that make the micro not work !

let's see

the code work well :)

Code: Select all


// LCD module connectionr
sbit LCD_RS at PORTD4_bit;
sbit LCD_EN at PORTD3_bit;
sbit LCD_D4 at PORTC2_bit;
sbit LCD_D5 at PORTC3_bit;
sbit LCD_D6 at PORTC4_bit;
sbit LCD_D7 at PORTC5_bit;

sbit LCD_RS_Direction at DDD4_bit;
sbit LCD_EN_Direction at DDD3_bit;
sbit LCD_D4_Direction at DDC2_bit;
sbit LCD_D5_Direction at DDC3_bit;
sbit LCD_D6_Direction at DDC4_bit;
sbit LCD_D7_Direction at DDC5_bit;
// End LCD module connections



//Timer2 Prescaler = 1024; Preload = 155; Actual Interrupt Time = 9.984 ms

//Place/Copy this part in declaration section
void InitTimer2(){
  SREG_I_bit = 1;
  OCR2 = 249;
  TCCR2 = 0x28;
  TCCR2 |= 0x04;
  OCIE2_bit = 1;
}




                       //

const char Time_min[9][3] ={"05","10","15","20","25","30","35","40","45"};

const char Delay_Time[9][5] ={"0010","0020","0050","0100","0300",
                                     "0600","1000","2000","3000"};


const char msg_menu[9][15] =
                          {"Select Current","   Settings   ","Time:      min",
                           "Delay:      mS","  Enter Code  ","Dev-ID: 5A6C32",
                           "     About    ","www.matux.com ","00-00-00-00-00",
                           };

const char menu[15][15] = {"    Item.1    ","    Item.2    ","    Item.3    ",
                           "    Item.4    ","    Item.5    ","    Item.6    ",
                           "    Item.7    ","    Item.8    ","    Item.9    ",
                           "    Item10    ","    Item11    ","    Item12    ",
                           "    Item13    ","    Item14    ","    Item15    ",
                           };

const char sub_menu[9][15] =
                          {"   sItem.1    ","   sItem.2    ","   sItem.3    ",
                           "   sItem.4    ","   sItem.5    ","   sItem.6    ",
                           "   sItem.7    ","   sItem.8    ","   sItem.9    ",
                           };



int t1,t2;
char dep,fm,cm,sm,setm,time_marker;
char i;                              // Loop variable
char sel_flag ;
signed char time, sec ;
signed int mSec;


void Timer2Overflow_ISR() org IVT_ADDR_TIMER2_COMP {
  mSec-=1;
  if (mSec <=0)
  {
   mSec=50;
   sec--;
   if (sec<=0 && time !=0)
   {
    sec=59;
    if(time>0)time--;
   }
   else  //if (sec<=0 && time <=0)
   {time =0;sec=0;}
  }
}



void view(char x,char y, char txt) {
  char c;
  for(c=0;c<14;c++)
    Lcd_chr(x,c+y,menu[txt-1][c]);
}

void msg_view(char x,char y, char txt) {
  char c;
  for(c=0;c<14;c++)
    Lcd_chr(x,c+y,msg_menu[txt-1][c]);
}

void sub_view(char x,char y, char txt) {
  char c;
  for(c=0;c<14;c++)
    Lcd_chr(x,c+y,sub_menu[txt-1][c]);
}

void select (char se)
{
  Lcd_chr(1,1,' ');
  Lcd_chr(1,16,' ');
  Lcd_chr(2,1,' ');
  Lcd_chr(2,16,' ');
  Lcd_chr(se,1,'>');
  Lcd_chr(se,16,'<');

}


signed short time1,sec1;
char txt_time[4];
void run_fun(char t,char d)
{

 Lcd_Cmd(_LCD_CLEAR);
 time =5*(t+1); ;
 time1=0;
 sec1=0;
 time--;
 sec=59;
 mSec=500;
 
 lcd_out(1,1,"Time: ");
 lcd_out(2,1,"Runing...");
 InitTimer2();

 while (time>0 || sec >0)
 {
  if(sec1 != sec)
  {
   time1=time;
   sec1=sec;
   
   if (time==0)
   {txt_time[1]='0';txt_time[2]='0';}
   else
   {ByteToStr(time1, txt_time);}
   
   for (i=0;i<3;i++)
    {Lcd_chr(1,6+i,txt_time[i]);}
    
   Lcd_chr(1,10,':');
   
   if (sec==0)
   {txt_time[1]='0';txt_time[2]='0';sec1=0;}
   else
   {ByteToStr(sec, txt_time);}
   
   for (i=0;i<3;i++)
    {Lcd_chr(1,11+i,txt_time[i]);}
   
  }
 }
 if (sec==0)
 {
  TCCR2 = 0x00;
  lcd_cmd(_lcd_clear);
  lcd_out(2,7,"Done");
 }
 while(1){}
}
                      /* set time funcations */

void view_time (char tp,char cp)
{
  char x;
  for (x=0;x<2;x++)
  {
   Lcd_chr(1,9+x,time_min[tp][x]);     // Write frist time in time row ..
  }

  for (x=0;x<4;x++)
  {
   Lcd_chr(2,9+x,delay_time[cp][x]);    // Write frist delay in delay row ..
  }
}

void set_time ()
{

 char step_pointer=0;
 char time_pointer=0;
 char delay_pointer=0;
 select(1);                                // put pointer in first line ..


 while(1)
 {
  view_time (time_pointer,delay_pointer);

  if (PINA2_bit==0)                   // ok button
  {
   while(PINA2_bit==0) {}
   if (step_pointer == 0)
    {
     step_pointer =1;
     select(2);
    }
   else
    {
     Lcd_Cmd(_LCD_CLEAR);
     run_fun(time_pointer,delay_pointer);
    }
  }

  if (PINA0_bit==0)                   // down button
  {
   while (PINA0_bit==0){}
   if (step_pointer == 0)
    {
     time_pointer++;
     if(time_Pointer>=8){time_pointer=8;}
    }
   else
    {
     delay_pointer++;
     if(delay_Pointer>=8){delay_pointer=8;}
    }

  }

  if (PINA1_bit==0)                   // up button
  {
   while (PINA1_bit==0){}
   if (step_pointer == 0)
    {
     time_pointer--;
     if(time_Pointer<=1){time_pointer=1;}
    }
   else
    {
     delay_pointer--;
     if(delay_Pointer<=1){delay_pointer=1;}
    }
  }

  if (PINA3_bit==0)                   // back button
  {
      while (PINA3_bit==0){}
      select(1);                       // move pointer to 2nd line..
      sub_view(1,2,sm);
      sub_view(2,2,sm+1);
      dep=3;
      break;
  }
 }
}


void main(){



                      // Port intialization //
  DDRA=0x00;
  porta=0xff;
                      // LCD intialization //
  Lcd_Init();                        // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off



                      // Variable intialization //

  fm=1;cm=1;sm=1;setm=0;t1=1;t2=1;
  time_marker=1;
  i=0;

                      // main view //
  Lcd_Out(1,6,"Mutex");                 // Write text in first row ..
  Lcd_Out(2,6," Mini ");                // Write text in second row ..
  Delay_ms(500);                       // delay for 2 sacend ..
  Lcd_Cmd(_LCD_CLEAR);                  // Clear display ..



  msg_view(1,2,1);
  msg_view(2,2,2);
  select(1);
  dep=1;


 while(1)
 {

                         /*      OK button      */

  if (PINA2_bit==0){                    // ok button ..
     while(PINA2_bit==0){}
     Lcd_Cmd(_LCD_CLEAR);
     if (dep==1)                        // frist screen deep "layer 1"..
     {
      if (fm==1)                        // if you select 'select current'..
      {
       view(1,2,1);                     // dispaly first current on line 1 ..
       view(2,2,2);                     // display second currrent on line 2 ..
       select(1);                       // put pointer in first line ..
       dep=2;                           // change deep flag to layer 2 ..
                                        // layer 2 : mode layer
       cm=1;                            // put current pointer on first current.
      }
      else if (fm==2)                   // if you select 'settings'..
      {
       msg_view(1,2,5);                 // dispaly code option on line 1..
       msg_view(2,2,7);                 // display about option on line 2..
       select(1);                       // put pointer in first line ..
       dep=12;                          // change deep flag to layer 12 ..
                                        // layer 12 : settings layer ..
       setm=1;                          // put setting pointer on first option..
      }
     }
     else if (dep==2)                   // current screen deep layer 2..
     {
      sub_view(1,2,1);                  // dispaly 1st mode on line 1..
      sub_view(2,2,2);                  // display 2nd mode on line 2..
      select(1);                        // put pointer in first line ..
      dep=3;                            // change deep flag to layer 3 ..
                                        // layer 3 : current modes layer ..
      sm=1;                             // put mode pointer on first option..

     }
     else if (dep==3)                   // mode screen deep layer 3..
     {
      msg_view(1,2,3);                  // dispaly 1st Run time on line 1..
      msg_view(2,2,4);                  // display 2nd wait time on line 2..
      select(1);                        // put pointer in first line ..
      dep=4;                            // change deep flag to layer 4..
                                        // layer 4 : Run layer ..
      time_marker=1;                    // put timer pointer on first option..
      set_time();
     }

     else if (dep==4)
     {

     }


     else if (dep==12)                  // setting screen deep layer 12..
     {
      if (setm==1)                      // enter code screen ..
      {
                                        //

      }
      else if (setm==2)                 // about screen ..
      {
       msg_view(1,1,6);                 // dispaly 1st website on line 1..
       msg_view(2,1,8);                 // display 2nd Device ID on line 2..
      }

     }

  }

                              //back button

  if (PINA3_bit==0){                    // back button ..
     while(PINA3_bit==0){}

     if (dep==2)                   // current screen deep layer 2..
     {
      Lcd_Cmd(_LCD_CLEAR);
      msg_view(1,2,1);
      msg_view(2,2,2);
      select(1);
      dep=1;

     }
     else if (dep==3)                   // mode screen deep layer 3..
     {
      select(1);                       // move pointer to 2nd line..
      view(1,2,cm);
      view(2,2,cm+1);
      dep=2;
     }

     else if (dep==4)
     {
      select(1);                       // move pointer to 2nd line..
      sub_view(1,2,sm);
      sub_view(2,2,sm+1);
      dep=3;
     }


     else if (dep==12)                  // setting screen deep layer 12..
     {
      if (setm==1)                      // enter code screen ..
      {
                                        //

      }
      else if (setm==2)                 // about screen ..
      {
       msg_view(1,1,6);                 // dispaly 1st website on line 1..
       msg_view(2,1,8);                 // display 2nd Device ID on line 2..
      }

     }

  }

                             // Down button

  if (PINA0_bit==0){                    // Down button
     while(PINA0_bit==0){}
     if (dep==1)                        // frist screen deep layer 1..
     {
      if (fm<2)                         // if 1st layer pointer on 1st line do..
      {
       fm++;                            // move pointer to next line
       select(2);                       // apply moving on screen
      }
     }

     else if (dep==2)                   // current screen deep layer 2..
     {
      if (cm==1)                         // if 2nd layer flag equal 1 do..
      {
       cm=2;                            // incr 2nd layer flag by one..
       select(2);                       // move pointer to 2nd line..
      }
      else if (cm<14)                  // if 2nd layer flag equal 14 do..
      {
       select(2);                       // move pointer to 2nd line..
       view(1,2,cm);
       view(2,2,cm+1);
       cm++;                            // incr 2nd layer flag by one..
      }
     }

     else if (dep==3)                   // current mode screen deep layer 2..
     {
      if (sm==1)                         //
      {
       sm=2;
       select(2);
      }
      else if (sm<5)
      {
       select(2);
       sub_view(1,2,sm);
       sub_view(2,2,sm+1);
       sm++;
      }
     }


     else if (dep==12)
     {
      if (setm<2)
      {
       setm++;
       select(2);
      }
     }
  }


                         /*       up button     */
  if (PINA1_bit==0){                    // UP button..
     while(PINA1_bit==0){}
     if (dep==1)                        // frist screen dep..
     {
      if (fm>1)
      {
       fm--;
       select(1);
      }
     }

     else if (dep==2)
     {
      if (cm==14)
      {
       select(1);
       cm=13;
      }
      else if (cm>1)
      {
       select(1);
       view(1,2,cm-1);
       view(2,2,cm);
       cm--;
      }
     }
     else if (dep==3)
     {
      if (sm==5)
      {
       select(1);
       sm=4;
      }
      else if (sm>1)
      {
       select(1);
       sub_view(1,2,sm-1);
       sub_view(2,2,sm);
       sm--;
      }
     }
     if (dep==12)
     {
      if (setm>1)
      {
       setm--;
       select(1);
      }
     }



  }

 }


}

when I add any new statement like if or for , that make my code not work

what can I do ?? , what is the problem ???

notes
1. I use MikroC pro for AVR 3.5
2. programmer is USB-ASP
3. crystal 16M


images :

https://ibb.co/nEj6Fk
https://ibb.co/d57RFk
https://ibb.co/bRMWgQ
https://ibb.co/kKXF85

User avatar
dusan.poluga
mikroElektronika team
Posts: 780
Joined: 02 Feb 2017 14:21

Re: problem with atmega32a

#2 Post by dusan.poluga » 19 Apr 2017 11:07

Hi,

Can you zip and post your project files so i have the same setup while testing ?

Regards,
Dusan Poluga.

Post Reply

Return to “AVR PRO Compilers”