(Descargo de responsabilidad en caso de que no sea dolorosamente obvio, soy un n00b, especialmente cuando se trata de entender los transistores).
Pensé que lo tenía todo resuelto: un MOSFET de canal p es (o se puede usar como) un interruptor de lado alto para una fuente de voltaje diferente a la que está ejecutando mi MCU. Para comprobar mi comprensión, reuní lo siguiente en una placa de pruebas:
El código en U1 (un arduino de 5V) me permite conducir la línea alto o bajo, o ponerlo en un estado alto-z para simular los 3 escenarios. Esperaba que conducir la línea baja encendería el LED a 9V, y al hacerlo alto apagaría el LED (0V en el drenaje mosfet). Lo que realmente sucedió fue que no había luz y que el drenaje tenía un voltaje de 6 V (5,9 V). Estoy bastante confundido, ¿qué está pasando aquí?
Aquí está el mosfet que estoy usando: enlace
Está diseñado para ser controlado incluso por un nivel lógico de 3.3V, por lo que 5V debería estar bien.