Estoy leyendo el archivo de encabezado 1_wire para PIC18 con el compilador C18. en la función write_byte, especificaron que para escribir bit1; hacemos entrada de línea y eso lo llevará alto. ¿Podemos especificar un valor de salida alto o bajo en el puerto TRIS que especifica la dirección de E/S?
#define OW_LAT LATCbits.LATC1
#define OW_PIN PORTCbits.RC1
#define OW_TRIS TRISCbits.TRISC1
void ow_write_byte(unsigned char data)
{
char i;
for (i=0;i<8;i++)
{
// DQ Low
OW_LAT=0;
OW_TRIS=OUTPUT;
// Keep it low for 10us to start the WRITE
Delay10TCYx(10);
// Keep low i.e. keep output mode and low if WRITE0 (bit 0)
// or release line i.e. make input to take it high if WRITE1 (bit1)
OW_TRIS = data & 0x01;
Delay10TCYx(50);
// Release the line. Total of 60us
OW_TRIS=INPUT;
// Some recovery time between the bits 2us
Delay10TCYx(2);
data =data >>1;
}
}
La idea detrás de esto es la siguiente:
Establecer el bit TRIS (haciéndolo 1
) hará que el pin correspondiente sea una entrada.
Un extracto típico de una hoja de datos PIC:
Establecer un bit TRISA (= 1) convertirá el pin PORTA correspondiente en una entrada (es decir, pondrá el controlador de salida correspondiente en un modo de alta impedancia). Borrar un bit TRISA (= 0) hará que el pin PORTA correspondiente sea una salida (es decir, colocará el contenido del latch de salida en el pin seleccionado).
Que el pin esté en modo de alta impedancia significa (entre otras cosas) que el pin no está controlado por el propio chip. Por lo tanto, toma cualquier estado definido por el circuito externo (el circuito alrededor del PIC).
El bus de 1 cable utiliza resistencias pull-up . Puedes verlo en el artículo de wikipedia :
Como puede ver, el estado predeterminado es alto. Eso significa que el bus usa una resistencia pull-up para hacer que su estado predeterminado sea alto.
Eso también está escrito en la wikipedia:
La red Dallas 1-Wire se implementa físicamente como un dispositivo maestro de drenaje abierto conectado a uno o más esclavos de drenaje abierto. Una sola resistencia pull-up es común a todos los dispositivos y actúa para elevar el bus hasta 3 o 5 voltios y puede proporcionar energía a los dispositivos esclavos. La comunicación ocurre cuando un maestro o esclavo afirma que el bus está bajo, es decir, conecta la resistencia pull up a tierra a través de su MOSFET de salida. También están disponibles chips de puente y controladores de 1 cable específicos. Se pueden lograr velocidades de datos de 16,3 kbit/s. También hay un modo de sobremarcha que acelera la comunicación por un factor de 10.
Andy alias
makouda