TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: remi04 en 14 de Julio de 2017, 12:11:44
-
De este modo el pin parpadea perfectamente. Esta conectado a vdd con 4k7 pullup
while (1){
output_low(DQ);
delay_ms(500);
output_high(DQ);
delay_ms(500);
}
Pero de este otro no y sin embargo necesito usar un puerto así.
while (1){
output_low(DQ);
delay_ms(500);
output_float(DQ);
delay_ms(500);
}
Es que necesito comunicar un bus onewire y necesito dejar el puerto en float (como entrada) para leer la respuesta del slave, todo eso lo hace bien, pero en cuanto vuelvo a dar instruccion input_low(dq) ya no vuelve a responder mas. Digamos que se queda ya siempre como entrada y no cambia de dirección.
Estoy usando las directivas use_fast_io.
¿Alguna sugerencia?
-
El por que ocurre eso es simple.
output_float() actua sobre el registro TRIS
mienrtas que output_low y output_high solo actuan sobre los PORTx/LATx, pero no modifican los TRIS si es que se usa el FAST_IO
Si qusieras volverlo a salida deberias modificar los tris de ese pin, para hacerlo pin a pin, podes usar output_drive(PIN_xx)
PD: Yo me aseguraria dejando el output_low y luego de ese ponerle el output_drive
while (1){
output_low(DQ);
output_drive(DQ);
delay_ms(500);
output_float(DQ);
delay_ms(500);
}
-
Muchas gracias Killer. Lo he solucionado al final quitando los Fast_io y dejándolos en Standar que si actúa sobre el Tris también y me funciona.
No obstante tomo nota de tu respuesta por que está bien también conocer la forma de hacerlo usando Fast_io.
Un saludo.