[TriEmbed] [OBSOLETE trianglearduino:1095] Problem with AtTiny85 and buttons
Robert Mackie
rob at mackies.org
Tue Jul 15 14:55:45 CDT 2014
You're absolutely right. It depends on the application. Talking about
taking "about a second" to turn off led me to presume it was still at the
human perception level.
Rob.
On Tue, Jul 15, 2014 at 3:29 PM, R Craig <roncraig007 at yahoo.com> wrote:
> Doesn't it sort of depend, Rob, on who or what is at the other end?
>
> Without debouncing the button, the IR LED will flash on-off-on-off some
> number of times before settling down to on. If the other end were just a
> human looking at the light, then sure, it wouldn't matter because the human
> would never detect or be confused by the very brief flashes. This being an
> IR, though, I imagine there is another piece of electronics at the other
> end, and it might or might not be confused by the IR going on and off a
> bunch of times with each single button press.
>
> If it is a sensor in a target, it might well register 6 or 8 hits (racking
> up some serious points in the process) with just a single press of the
> button. The point of debouncing the button is to ensure your output
> switches state just *once* with each press. For an IR LED, it might make
> quite a difference, depending on the circumstances.
>
> Best,
> Ron
> --------------------------------------------
> On Tue, 7/15/14, Robert Mackie <rob at mackies.org> wrote:
>
> Subject: Re: [TriEmbed] [OBSOLETE trianglearduino:1095] Problem with
> AtTiny85 and buttons
> To: "Adam Haile" <email at adamhaile.net>
> Cc: "TriEmbed Discussion" <triembed at triembed.org>
> Date: Tuesday, July 15, 2014, 2:15 PM
>
> Just to
> emphasize, since you weren't doing a toggled state but
> were having the light simply show the current pressed state
> of the button (bright when switch closed, no light when
> switch open) you don't need to worry about
> de-bouncing.
>
> However, you do need to take
> care of biasing the input as described in Adam's email
> or with an external resistor.
> Rob.
>
>
> On Tue, Jul 15, 2014 at 10:32 AM, Adam Haile <email at adamhaile.net>
> wrote:
>
> Joe,
> Easiest
> way to do the mentioned bias resistors is to use the
> one's built into the AT chip :)Every IO pin
> on the AT series chips have an internal pull-up resistor
> ranging from 10k-50k ohm (depending on the chip
> model).
>
>
>
> To enable it, you set the
> pin mode to input and then write a high bit to it. Sounds
> weird, but that's just the way the resisters
> work:
> pinMode(buttonPin, INPUT);
>
>
>
>
> digitalWrite(buttonPin, HIGH);
> //sets internal pull-up
>
>
>
> Then, simply wire your button
> to "pull" that pin to ground. i.e. hook one side
> of the button to buttonPin and the other to ground. When the
> button closes the bias is now ground because it has the
> least resistance and your micro will see LOW. See the
> following for more: http://arduino.cc/en/Tutorial/DigitalPins
>
>
>
> For debouncing, if you aren't too worried
> about not doing it the most efficient way try this:
> http://playground.arduino.cc/code/bounce
>
>
>
> At its simplest, you can do something like
> this:
>
>
>
> uint8_t _oldState = HIGH;uint8_t _curState =
> _oldState;long bounceThreshold = 100;//wait
> 100ms, increase or decrease depending on how sesitive you
> want the debouncing
> _curState =
> digitalRead(buttonPin);
>
>
> if(_curState != _oldState){ delay(bounceThreshold); if(_curState ==
> digitalRead(buttonPin))
>
> { if(_curState) { // turn LED
> on:
>
>
> } else { // turn LED
> off:
>
>
> } _oldState =
> _curState; }}
>
>
> It's pretty basic, but it gets the job done
> in most cases. Note, this should make it so the LED is on
> only while the button is actually down. It's not a
> toggle (press on/press off). To to that, in the if(_curSate)
> section just flip a boolean (ledState != ledState) and then
> at the end of that whole if statement do
> digitalWrite(ledPin, ledState);
>
>
>
> There's many ways to
> skin this one... personally I use external interrupts with
> buttons... but that's a whole other lesson. Though, side
> note. The reason the internal bias resistors are pull-up is
> that the chips are set to only be able to be woken from
> sleep when the external interrupt goes LOW. You can
> configure the interrupts to react to LOW or HIGH, but being
> woken from sleep is a special case and it looks like they
> simplified the chip circuit by requiring that a wake be a
> LOW pulse.
>
>
>
>
>
>
>
> On Tue, Jul 15, 2014 at 10:15 AM,
> Glen Smith <mrglenasmith at gmail.com>
> wrote:
>
>
>
> I'm guessing that
> you have 2 problems. One is due to your input switch
> bouncing. When a mechanical switch closes it does not simply
> change from false to true. For a few milliseconds
> (immediately for us slow humans but forever for a
> u-processor running this little bit of code) it bounces back
> & forth between the two states. Regardless of how fast
> or hard you push that switch, the Tiny85 will see many of
> these changes.
>
>
>
>
> The other thing you are running into is called
> a floating input. When you set the button as an input, you
> need to use a resistor to bias the input to return to a
> known level. Think of it like a lever, unless a spring
> pushes or pulls the lever to a known state, when you let go
> of it, the lever will simply stay where you left it. In the
> case of your input, you left it high, so the charge on the
> input slowly dissipates, and a second or so later the Tiny85
> sees it as a low. These biasing resistors are called pull-up
> & pull-down resistors.
>
>
>
>
> On Jul 15, 2014 6:58
> AM, "Bothari" <bothari at gmail.com>
> wrote:
>
>
>
>
> Group,
> I've been learning about
> hardware for the last couple of months, but I've come up
> against a problem with inputs. I put together a little IR
> gun with the AtTiny85, but I can't get the trigger to
> fire the gun. I've reduced the problem to one AtTiny85
> with a resistor and LED, but I still don't understand
> what's going on.
>
>
>
>
>
> With the below code (Blink
> from the examples) I can touch the #2 pin high and the light
> on pin 3 comes on, but it stays on for like a second or so
> before going off. I think it should go off immediately.
>
>
>
>
>
>
> I added 3 blinks
> on the LED on startup to make sure I know when it resets,
> and the fuse bits for the oscillator are set to 8mHz. That
> works as expected.
> Any
> ideas?
>
>
>
>
> Joe
> const
> int buttonPin = 2; // the number of the pushbutton
> pinconst int ledPin = 3; // the number
> of the LED pin
> //
> variables will change:
>
>
>
>
> int buttonState = 0; // variable for
> reading the pushbutton status
> void setup() { //
> initialize the LED pin as an output:
> pinMode(ledPin, OUTPUT);
>
>
>
>
> digitalWrite(ledPin, LOW); // initialize
> the pushbutton pin as an input:
> pinMode(buttonPin, INPUT);
> //Show that we
> rebooted digitalWrite(ledPin, HIGH);
>
>
>
>
> delay(300); digitalWrite(ledPin,
> LOW); delay(300);
> digitalWrite(ledPin,
> HIGH); delay(300);
> digitalWrite(ledPin, LOW);
> delay(300);
>
>
>
>
>
> digitalWrite(ledPin,
> HIGH); delay(300);
> digitalWrite(ledPin, LOW);
> delay(300); }
> void loop(){ // read
> the state of the pushbutton value:
>
>
>
>
> buttonState = digitalRead(buttonPin);
> // check if the pushbutton is
> pressed. // if it is, the buttonState is
> HIGH: if (buttonState == HIGH) {
> // turn LED on:
>
>
>
>
> digitalWrite(ledPin, HIGH);
> } else { // turn LED
> off: digitalWrite(ledPin,
> LOW); }}
>
>
> --
> "There are
> only two industries that refer to their customers as
> ‘users’." - Edward Tufte
>
>
>
>
>
>
>
>
> --
>
> NOTICE: This list is OBSOLETE. For details about the
> replacement TriEmbed list go here:
>
> http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
>
> ---
>
> You received this message because you are subscribed to the
> Google Groups "trianglearduino" group.
>
> To unsubscribe from this group and stop receiving emails
> from it, send an email to trianglearduino+unsubscribe at googlegroups.com.
>
> Visit this group at http://groups.google.com/group/trianglearduino.
>
> For more options, visit https://groups.google.com/d/optout.
>
>
>
> _______________________________________________
>
> Triangle, NC Embedded Computing mailing list
>
> TriEmbed at triembed.org
>
> http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
>
> TriEmbed web site: http://TriEmbed.org
>
>
>
>
>
> _______________________________________________
>
> Triangle, NC Embedded Computing mailing list
>
> TriEmbed at triembed.org
>
> http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
>
> TriEmbed web site: http://TriEmbed.org
>
>
>
>
> -----Inline Attachment Follows-----
>
> _______________________________________________
> Triangle, NC Embedded Computing mailing list
> TriEmbed at triembed.org
> http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
> TriEmbed web site: http://TriEmbed.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.triembed.org/pipermail/triembed_triembed.org/attachments/20140715/ef09be9c/attachment.htm>
More information about the TriEmbed
mailing list