Re: Pullup resistors (Was: Commodore joystick ports)

From: Jim Brain (
Date: 2007-05-09 19:07:42

Marko Mäkelä wrote:
> I think you confused PIN and PORT.  I didn't say anything about PORT,
> and I previously wrote that you should set PORT=0 for open-collector
> operation.  We have the following truth table:
> PORT=0,PIN=0,DDR=0: input, high-Z ("disconnected")
> PORT=0,PIN=0,DDR=1: output 0
> PORT=0,PIN=1,DDR=0: output weak 1 with a pull-up resistor
> PORT=0,PIN=1,DDR=1: output 0 
> The first line is equivalent to outputting 1 if there
> is a pull-up resistor somewhere else in the circuit, like I believe
> there is in the joystick port.
Can you point to some documentation, as I just checked the AVR 
datasheet, and PIN is read-only:

"Three I/O memory address locations are allocated for each port, one 
each for the Data
Register – PORTx, Data Direction Register – DDRx, and the Port Input 
Pins – PINx. The
Port Input Pins I/O location is read only, while the Data Register and 
the Data Direction
Register are read/write."

As well, the pullup is only active when PORT is HI and DDR is LO:

"If PORTxn is written logic one when the pin is configured as an input 
pin, the pull-up
resistor is activated. To switch the pull-up resistor off, PORTxn has to 
be written logic
zero or the pin has to be configured as an output pin. The port pins are 
tri-stated when a
reset condition becomes active, even if no clocks are running."

PORT=0,DDR=0 is input, HiZ
PORT=1,DDR=0 is input, pullup
PORT=X, DDR=1, X is output.

Are you talking about a different uC, or the some MOS part?


Jim Brain, Brain Innovations                                      (X) 
Dabbling in WWW, Embedded Systems, Old CBM computers, and Good Times! 

       Message was sent through the cbm-hackers mailing list

Archive generated by hypermail pre-2.1.8.