Go Down

Topic: set pins with shift and pin 13 for an ext. LED (Read 603 times) previous topic - next topic

libhart

All,

These seem like newbie questions that were probably answered before at some point but I searched and couldn't find anything.

1.  Is there a way to set all 14 output pins, or better yet a subset of them, via a bit string.  Say I want to set all 14 HIGH.  Can I somehow use a shift or some other command to write 11111111111111 and set them all high, or set pin 4-7 high with 00001111000000?  Can I set every other pin high from pin 3-8 by using 101010 somehow?  You get the idea.

2.  Is there a way to disable the on-board LED so I can use pin 13 to drive an external LED?

Thanks as always.  The arduino is so cool, I have to ration my time w/it so I can function at work :)

CosineKitty

Hey libhart,

Take a look at the tutorial I wrote, in the section called "A word about port registers in the Atmega8 microcontroller":

http://www.arduino.cc/playground/Code/BitMath#registers

libhart

That's beautiful!  Exactly what I wanted to do.  Good points about the code not being portable though, I'll have to give it some thought.  In my case I've got to set a sequence of pins high or low and I think it'd almost be more understandable w/the bit string than to have multiple 'for' loops all in a row.  Thanks again.

libhart

Glad I double checked things on your tutorial.  Told me how to do what I wanted, but the example is a bit off.  In your setup function, you have the below.  The top two lines are correct, but then the bottom two lines are switched.  PORTB is 8-13, not 2-7, same switch for PORTD.  Thanks.

       // set pins 0 (serial transmit) and 2..7 as output,
       // but leave pin 1 (serial receive) as input
       // (otherwise serial port will stop working!) ...
       DDRD = B11111101;  // digital pins 7,6,5,4,3,2,1,0

       // set pins 8..13 as output...
       DDRB = B00111111;  // digital pins -,-,13,12,11,10,9,8

       // Turn off digital output pins 2..7 ...
       PORTB &= B00000011;   // turns off 2..7, but leaves pins 0 and 1 alone

       // Write simultaneously to pins 8..13...
       PORTD = B00111000;   // turns on 13,12,11; turns off 10,9,8

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy