TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: remi04 en 14 de Julio de 2017, 12:11:44

Título: output_float(pin); una duda...
Publicado 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

Código: [Seleccionar]
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í.

Código: [Seleccionar]
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?
 
Título: Re:output_float(pin); una duda...
Publicado por: KILLERJC en 14 de Julio de 2017, 14:36:12
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

Código: C
  1. while (1){
  2.        
  3.        output_low(DQ);
  4.        output_drive(DQ);
  5.        delay_ms(500);
  6.        output_float(DQ);
  7.        delay_ms(500);
  8. }
Título: Re:output_float(pin); una duda...
Publicado por: remi04 en 14 de Julio de 2017, 16:01:09
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.