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);
}
}
}
}
}
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