Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics 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.

CVAVR coding problem with ATmega 8535

Status
Not open for further replies.

wakaka

Full Member level 4
Joined
Dec 7, 2005
Messages
237
Helped
10
Reputation
20
Reaction score
6
Trophy points
1,298
Activity points
2,931
Hi there, I'm doing a simple test using CVAVR with ATEMGA8535, and i dun get the expected result.
I only wan push button once, running LED start, push again, stop.
The problem is the push buttom seems not sensitive.
1st time press the push button, LED starts running.
2nd pressed, it might or might stop.
3rd, 4th ,5th ..... pressed and so on, not responding sometimes.....

Code:
#include <mega8535.h> 
#include <delay.h> 
// Declare your global variables here 

void main(void) 
{ 
// Declare your local variables here 
unsigned char count, pstat; 
// 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=In Func2=In Func1=In Func0=In 
// State7=T State6=P State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x40; 
DDRD=0x00; 

// Timer/Counter 0 initialization 
// Clock source: System Clock 
// Clock value: Timer 0 Stopped 
// Mode: Normal top=FFh 
// OC0 output: Disconnected 
TCCR0=0x00; 
TCNT0=0x00; 
OCR0=0x00; 

// Timer/Counter 1 initialization 
// Clock source: System Clock 
// Clock value: Timer 1 Stopped 
// Mode: Normal top=FFFFh 
// OC1A output: Discon. 
// OC1B output: Discon. 
// Noise Canceler: Off 
// Input Capture on Falling Edge 
// Timer 1 Overflow Interrupt: Off 
// Input Capture Interrupt: Off 
// Compare A Match Interrupt: Off 
// Compare B Match Interrupt: Off 
TCCR1A=0x00; 
TCCR1B=0x00; 
TCNT1H=0x00; 
TCNT1L=0x00; 
ICR1H=0x00; 
ICR1L=0x00; 
OCR1AH=0x00; 
OCR1AL=0x00; 
OCR1BH=0x00; 
OCR1BL=0x00; 

// Timer/Counter 2 initialization 
// Clock source: System Clock 
// Clock value: Timer 2 Stopped 
// Mode: Normal top=FFh 
// OC2 output: Disconnected 
ASSR=0x00; 
TCCR2=0x00; 
TCNT2=0x00; 
OCR2=0x00; 

// External Interrupt(s) initialization 
// INT0: Off 
// INT1: Off 
// INT2: Off 
MCUCR=0x00; 
MCUCSR=0x00; 

// Timer(s)/Counter(s) Interrupt(s) initialization 
TIMSK=0x00; 

// Analog Comparator initialization 
// Analog Comparator: Off 
// Analog Comparator Input Capture by Timer/Counter 1: Off 
ACSR=0x80; 
SFIOR=0x00; 

count=0x01; 
pstat=0; 

while (1) 
      { 
      // Place your code here 
if(!PIND.6) 
{pstat = !pstat;} 

if((PIND.6) &&(pstat==1)) 
{ 
 PORTC = count; 
 count = count<<1; 
 delay_ms(250); 
 if(count==0) 
{count = 0x01;} 
} 

if((PIND.6) && (pstat==0)) 
{ 
PORTC = 0; 
} 
      }; 
}
 

Re: CVAVR coding problem

Hi!

You can try this code:

unsigned char mode=0;

...
DDRD=0x00;
PORTD.6=1;

while(1)
{

if(PIND.6==0)
{
while(PIND.6==0) {};
delay_ms(30);
if(++mode>2) mode=1;
}

if(mode==1) Led=ON;
else Led=OFF;
//else if(mode==2) Led=OFF;



}

:D
 

CVAVR coding problem

thanks for ur suggestion, I'll try it out.
But wat i wanna know is that, did i write the code wrongly?? i dun think I'm wrong actually
 

CVAVR coding problem

Code:
	for(;;)
	{
		// Wait for button press
		while(PIND.6 !=0)
			;

		// Button is pressed so wait debounce time 
		delay_ms(30);

		// After debouncing time has left check whether button is still pressed 
		if(PIND.6 != 0)
			continue;

		// Button was pressed and kept for more than 30 milliseconds - play with your LED
		// here
	
		// Now after led has been handled wait for button release 
		for(;;)
		{
			while(PIND.6 !=1)
				;
			
			// Button release detected - debounce button release 
			delay_ms(30);
			if(PIND.6 == 1)
				break;
		}
	}
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top