NEW: Learning electronics? Ask your questions on the new Electronics Questions & Answers site hosted by CircuitLab.
Microcontroller Programming » Having problem in using PIN as an I/P
February 09, 2010 by banerjen |
Hi, I'm having a problem in using PC4 and PC5 as an I/P pin. I used the code ->
Now, the problem is that it is cycling between 1 and 0 for both the pins in the LCD irrespective of the input given to the PIN. Nandan. |
---|---|
February 09, 2010 by Rick_S |
I'm assuming you're using a switch through a resistor to ground for your input or some other method of pulling the two pins you are checking low? If so, did you set your data direction registers (DDRC) and turn on the internal pullups? the code snippet below would do that for the two pins you want to check.
Otherwise, with my limited knowledge of C, the code (assuming you had something to write to the lcd in place of the comments) looks ok. Rick |
February 09, 2010 by banerjen |
Hi Rick, I used PB4 and PB5 using the same code and they are working perfectly as input pins. And no, I did enable the pull up resistors. After I write this code and put it in the MCU then without the application of any input the PIN is switching itself between 1 and 0. I had done the addition using the DIP switches previously by enabling the pull ups and it worked fine for me. I even changed the pins to PB2 (PC4) and PB3 (PC5) but to no avail. Thanks. And if I could not make myself clear then please let me know. Regards, Nandan. |
February 09, 2010 by Rick_S |
That really sounds as if the internal pullups aren't on leaving the pin to float. However, what is really odd is that it still changes even when you ground the pin thru a resistor with the switch. Is your circuit the same as the DIP switch arithmatic only with the switches going to PB4 and PB5?? Could you take and post an overhead photo of your circuit and maybe post more of the code so we can look it over better? Right now I'm at a loss. Rick |
February 09, 2010 by banerjen |
Hi Rick, No, I am sorry. I actually did not enable the pull up resistors. But, earlier when I did the DIP arithmetic circuit I enabled it and it had worked fine then. Should I use the pull up resistors and try??? Cause in the NerdKits guide they gave an example of using the pin without enabling the pull ups. They just configured the PIN as an i/p pin and read the PINx register value to determine the status of the PIN value. I tried the same thing but it has not worked for me. Instead it is switching between 1 and 0 continuously. But, now I am thinking of enabling the pull ups and using it the way I did on the DIP arithmetic circuit. But, I still can't think of any reason as to why the PIN is switching itself between 1 and 0 without the application of any signal!? Thanks. I will send you a picture of my circuit soon. I don't have my camera with me right now. Regards, Nandan. |
February 10, 2010 by Rick_S |
With the internal pullups off, the pin is floating. You can add your own external pullups by placing a 10k resistor from the pin to the 5v rail then connecting your switch from the pin to ground. This way when the switch is open, the pin is held high by the resistor and when the switch is closed the pin is pulled low by the switch. The resistor is in place to prevent a dead short to ground when you close the switch. What confused me was when you said - - "Now, the problem is that it is cycling between 1 and 0 for both the pins in the LCD irrespective of the input given to the PIN. - - Even with the pullups off, when you connect the pin to ground, the state of the pin should be held low and the reading should not change. Of course that is if I was interpreting your statement correctly. Rick |
February 10, 2010 by banerjen |
Hi Rick, I enabled the pull ups and it is working fine. Guess that was the problem, it was probably floating between 1 and 0. Cause when I had given it a signal 1 it showed 1 and when I had connected it to the ground it was showing 0. One question, why does it switch between 1 and 0 when it is floating? Why does it not settle for one particular value? And, why did two pins remain at zero when they were floating? Thanks a lot. Regards, Nandan. |
February 10, 2010 by Rick_S |
I'm actually not 100% sure but my guess is there are other internal factors that bring it above and below the threshold level thus toggling the bit. I just try to make a point of always using either internal or external pullups when I'm checking pin state. Rick |
February 10, 2010 by Rick_S |
BTW, Glad to hear it's working for you!! Rick |
February 10, 2010 by banerjen |
Hi Rick, One more question. I used four input pins PB2 to PB5. Now, when I enabled the pull up resistors for the four of them and measured the potential at the terminals, I found that PB2 had 4.93 V, PB3 had something around 4.89 V, PB4 had about 3.29 V and PB5 had 0.68 V. So, only the pins PB2, PB3 and PB4 were at a high state. I then connected an external resistor from the 5 V line to the PIN PB5. And it worked fine. I was wondering that even after enabling the pull up resistors, why did the voltage differ like this. Is something wrong with my MCU unit. Because the last time I had used it for the DIP arithmetic circuit this arrangement had worked fine. Also, I am using four outputs to drive an L293D motor driver. Do you think that it has anything to do with this? Anyway, thanks a lot for helping me out. Nandan. |
February 10, 2010 by Rick_S |
This is where things begin to elude me as well. I don't know exactly why that would be. I'm sure there are others here with more electronic background than my self taught experiences will provide. |
February 12, 2010 by hevans (NerdKits Staff) |
Hi banerjen, I can't think of a good reason why you would be measuring such wonky voltages on your pins. When you turn on the pull up resistors you should measure 5V with a multimeter on the pin unless something explicitly driving the pin low. Are you sure the pins are set as input pins? Humberto |
February 13, 2010 by banerjen |
Hi Humberto, I know, I too am surprised. But, when I used an external pull-up resistor, it worked fine for me then. I had once accidentally used 12V directly in the MCU. Did it destroy the internal pull-ups. Because, everything else is working fine. All I need to do is use external pull-ups for inputs and external pull-downs for outputs. And yes, the pins were set as input pins.
Nandan. |
Please log in to post a reply.
Did you know that our USB NerdKit works on Windows, Linux, and Mac OS X? Learn more...
|