EmbDev.net

Forum: µC & Digital Electronics ATMEGA8 beginner problem


von Ajay R. (ajay_r)


Rate this post
useful
not useful
I'm using ATmega 8 (8L - 8PI) , I am trying to blink two LED's in 
alternate order with legs PB0 and PB6 for each LED's but its not 
working..
1
‪#‎define F_CPU 1000000UL
2
3
‪#‎include <avr/io.h>
4
#include <util/delay.h>
5
6
int
7
main (void)
8
{
9
DDRB |= _BV(DDB0);
10
DDRB |= _BV(DDB6);
11
while(1)
12
{
13
PORTB = 00000001;
14
_delay_ms(500);
15
PORTB = 01000000;
16
17
_delay_ms(500);
18
}
19
}

: Edited by Admin
von Lothar M. (Company: Titel) (lkmiller) (Moderator)


Rate this post
useful
not useful
Ajay R. wrote:
> but its not working
WHAT is not working?

von Ajay R. (ajay_r)


Rate this post
useful
not useful
two leds are not blinking...only one is blinking

von MWS (Guest)


Rate this post
useful
not useful
Ajay R. wrote:
> PORTB = 01000000;

You need to tell the compiler it's a binary expression.

von Ajay R. (ajay_r)


Rate this post
useful
not useful
I am new to this(noob),can you please modify my code.

von Ajay R. (ajay_r)


Rate this post
useful
not useful
Ajay R. wrote:
> I am new to this(noob),can you please modify my code.

converting it to hexadecimal form would help??

von Hartl192 (Guest)


Rate this post
useful
not useful
Ajay R. wrote:
> PORTB = 00000001;
> _delay_ms(500);
> PORTB = 01000000;

Try it like this:
 PORTB = 0x01;
> _delay_ms(500);
> PORTB = 0x40;

von A.S.M. (Guest)


Rate this post
useful
not useful
Ajay R. wrote:

 while(1)
 {
 PORTB = 0b00000001;
 _delay_ms(500);
 PORTB = 0b01000000;

 _delay_ms(500);
 }

von MWS (Guest)


Rate this post
useful
not useful
Ajay R. wrote:
> can you please modify my code.

You already got the hint ;D

Btw., I think binary representation is the better translation.

For the compiler 01000000 is a number, one million, which doesn't fit a 
port of 8 bit very well. 0b01000000 will do a better job.

von Karol B. (johnpatcher)


Rate this post
useful
not useful
Ajay R. wrote:
> I am new to this(noob),can you please modify my code.

Adopt your main loop to look something like this:
1
PORTB = 0x01;
2
_delay_ms(500);
3
PORTB = 0x40;
4
_delay_ms(500);

Alternatively, if you are using avr-gcc, you can also make use of the 
"0b" notation:
1
PORTB = 0b00000001;
2
_delay_ms(500);
3
PORTB = 0b01000000;
4
_delay_ms(500);

Best regards,
Karol Babioch

von Ajay R. (ajay_r)


Rate this post
useful
not useful
Thanks to all of you,its working now :D

von Karol B. (johnpatcher)


Rate this post
useful
not useful
Ajay R. wrote:
> Thanks to all of you,its working now :D

Well, you should try to understand what was wrong with your notation in 
order to learn something from your mistake ;).

Best regards,
Karol Babioch

von Ajay R. (ajay_r)


Rate this post
useful
not useful
Karol Babioch wrote:
> Ajay R. wrote:
>> Thanks to all of you,its working now :D
>
> Well, you should try to understand what was wrong with your notation in
> order to learn something from your mistake ;).
>
> Best regards,
> Karol Babioch

Karol can you name a book or give a link from where i can learn basic 
AVR,I understood what i did wrong but want to further expand my 
knowledge.
Thanks in advance

von Lothar M. (Company: Titel) (lkmiller) (Moderator)


Rate this post
useful
not useful
Karol Babioch wrote:
> you should try to understand
And also you should have learned, that its not enough to say:
Its not working!

von Ajay R. (ajay_r)


Rate this post
useful
not useful
Lothar Miller wrote:
> Karol Babioch wrote:
>> you should try to understand
> And also you should have learned, that its not enough to say:
> Its not working

Ok,from now on i will be specific about the problem i faced.

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.