Autor Tema: output_float(pin); una duda...  (Leído 1491 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
output_float(pin); una duda...
« 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?
 
« Última modificación: 14 de Julio de 2017, 14:34:14 por remi04 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:output_float(pin); una duda...
« Respuesta #1 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. }

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:output_float(pin); una duda...
« Respuesta #2 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.