Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronic Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Register Log in

programming help nedded

Status
Not open for further replies.

Mithun_K_Das

Advanced Member level 3
Joined
Apr 24, 2010
Messages
857
Helped
23
Reputation
46
Reaction score
23
Trophy points
1,308
Location
Dhaka, Bangladesh, Bangladesh
Activity points
8,017
unsigned int battery, main, over_load, temp, sw;
void main()

{
int i ;
long int charg, flash, alarm, main_ok;
DDRD = 0xFF;
DDRB = 0xFF;
DDRC= 0b0000010;
while(1)
{
battery = ADC_Read(1); // battery stasus check
main = ADC_Read(4); // main status check
over_load = ADC_Read(0); // o\L check
temp = ADC_Read(2); // temp check
sw = ADC_Read(3); // switch check.

if(sw < 512)
{
main_ok = 0;
charg = 0;
if((main <= 860) &&(main >= 737)) // main status check . main is ok.
{

main_ok++;
if(main_ok >= 10000) // main delay for surge protection.
{
PORTB2_bit = 1; //output triac on
PORTB5_bit = 1; // output indication on, non flashing
if(battery < 223) // check battery under 12V
{
charg++;
if(charg >= 100000)
{
PORTB0_bit = 1; // charging on by relay on.
flash++ ;
if(flash >= 10000)
{
PORTB5_bit = ~PORTB5_bit; // charging indication by toggleing main indicator.
flash = 0;
}
}
}
if(battery >= 275) // battery full charge.
{
PORTB0_bit = 0; // setting relay off.
PORTB5_bit = 1; // setting main indicator on, non flashing.
}
}
}
else
{
PORTB2_bit = 0; // setting output triac off.
PORTB5_bit = 0; // main indicator off.
if((battery < 195)&&(over_load > 150)&&(temp < 350))// check battery if lowr than 10.5V & overload & temperature
{
PORTD = 0x00; // main sinewave oscillator off.
PORTB3_bit = 1; // osc # 1 off.
PORTB4_bit = 0; // backup indicator off.
alarm++;
if(alarm > 10000)
{
PORTC5_bit = ~PORTC5_bit; // generating alarm
alarm = 0;
}


}
else // if all conditions are suitable then run the inverter.
{
PORTB3_bit = 0; // osc # 1 on.
PORTB5_bit = 0; // alarm off
PORTB4_bit = 1; // backup indicator on.
PORTB1_bit = 1; // inverter output switch(Triac) on.

// osc sinewave on
{
for(i=0;i<15;i++)
{
PORTD = (i);
Delay_us(32);
}

for(i=15;i>0;i--)
{
PORTD = (i);
Delay_us(32);
}
for(i=0;i<15;i++)
{
PORTD = (16*i);
Delay_us(32);
}

for(i=15;i>0;i--)
{
PORTD = (16*i);
Delay_us(32);
}
}

}

}

}
else
{
if(main > 737) // main is over 150V
{
PORTB5_bit = 1; // main availability indication on.
if(battery >= 275)
{
PORTB0_bit = 0; // charging off.
}
else // charging on...
{
PORTB0_bit = 1; // charging on.
flash++ ;
if(flash >= 10000)
{
PORTB5_bit = ~PORTB5_bit; // charging indication on by toggling main LED.
flash = 0;
}
}
}
}
}
}




///////////////////////////////////////////////////////////

Errors are shown in line 2.
please help me, I can't find any error... but still can't make it error free.
 
Last edited:

andre_teprom

Super Moderator
Staff member
Joined
Nov 7, 2006
Messages
9,181
Helped
1,140
Reputation
2,299
Reaction score
1,116
Trophy points
1,403
Location
Brazil
Activity points
53,319
Let me give you some recomendations :

> Explain what compiler are you using ( some ones don´t accept multiple variables declarations at same statements )
> Use
Code:
 formatter provide at this forum to make your code more inteligible.

+++
 

Mithun_K_Das

Advanced Member level 3
Joined
Apr 24, 2010
Messages
857
Helped
23
Reputation
46
Reaction score
23
Trophy points
1,308
Location
Dhaka, Bangladesh, Bangladesh
Activity points
8,017
@ btbass: errors are at line 2: 'main function error.' fortunately I've found the error. the main is declared twitch in the first line and 2nd line. I've corrected it.

@ andre_teprom: it is MikroC Pro.

thanks for help.

---------- Post added at 06:19 ---------- Previous post was at 06:13 ----------

error is shown in the colored line.

but not I'm fetching another problem. time is not maintained for each cycle of sine wave I've generated in the program. Can you help me?

simulated image:
 

btbass

Advanced Member level 5
Joined
Jul 20, 2001
Messages
1,897
Helped
438
Reputation
880
Reaction score
287
Trophy points
1,363
Location
Oberon
Activity points
12,861
You need to look at the structure of your program. At the moment you have a single function, 'main()', that does everything. Code written in this way quickly becomes unmanageable and hard to understand.

You should divide the program into functional blocks, with each function doing one specific task.
Then the main function should be a loop that calls the functions as required.

You should also consider using a timer interrupt to generate your sine wave output to achieve a constant time step.
 

Mithun_K_Das

Advanced Member level 3
Joined
Apr 24, 2010
Messages
857
Helped
23
Reputation
46
Reaction score
23
Trophy points
1,308
Location
Dhaka, Bangladesh, Bangladesh
Activity points
8,017
ok, i'm trying.

---------- Post added at 11:20 ---------- Previous post was at 11:16 ----------

how can I call blocks? can you give me any example... I'm not so strong in programming, pls help
 

btbass

Advanced Member level 5
Joined
Jul 20, 2001
Messages
1,897
Helped
438
Reputation
880
Reaction score
287
Trophy points
1,363
Location
Oberon
Activity points
12,861
Well you need to write the program as you know what is going on and what you want it to do.
The idea is to divide and conquer, small simple functions that do one specific thing are easier to write and understand than one big complex function that tries to do everything. If you are using Mplab, use the SIM debugger and single step through the code to see what is going on.
If it was me, I would approach it something like this.

Code:
/*--- Function prototype ---*/

void switch_check(void);
void battery_status(void);

/*--- Program entry ---*/

void main(void)
  {

  /* Initialise ports here */

  while(1)  /* Main program loop */
    {
    switch_check();

    battery_status();  /* Similar functions that you write */
    }
  }	


/*--- Check switch function ---*/

void switch_check(void)
  {
  unsigned int sw;

  sw = ADC_Read(3); // switch check.

  if(sw < 512)
     {
     main_ok = 0;
     charg = 0;
     }
  else
    {
    main_ok = 1;
    charg = 1;
    }
  }

/*--- Get battery Status ---*/

void battery_status(void)
  {
  unsigned int battery;

  battery = ADC_Read(1);

  if(battery    /* Stuff you need to write */

  }
 

Mithun_K_Das

Advanced Member level 3
Joined
Apr 24, 2010
Messages
857
Helped
23
Reputation
46
Reaction score
23
Trophy points
1,308
Location
Dhaka, Bangladesh, Bangladesh
Activity points
8,017
Hi,
all other functions are responding well but except ADC. I can't be able to use 5ADCs at a time. I don't know why. I'm using atmega8. Any idea?
 

Status
Not open for further replies.
Toggle Sidebar

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top