Autor Tema: porque añardir int a una lectura de pin  (Leído 1268 veces)

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

Desconectado alfredo1972

  • PIC10
  • *
  • Mensajes: 5
porque añardir int a una lectura de pin
« en: 11 de Octubre de 2015, 15:37:49 »
Estoy teniendo ciertos problemas, a la hora de leer si un pin esta en 0 o 1

tengo este pin definido

#define OW                 PORTDbits.RD1

En esta funcion, hasta que no he cambiado esta la comprobacion


if (OW == 1)         // 124.8 us to here since master pulls bus low
      {
         zumbar();
      }

POR ESTA.....******************


if (((int)(OW)) == 1)         // 124.8 us to here since master pulls bus low
      {
         zumbar;
      }

No leia el pin correctamente

A que corresponde esto, A algo del compilador??
Porque si recuerdo bien, antes no me hacia falta

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:porque añardir int a una lectura de pin
« Respuesta #1 en: 11 de Octubre de 2015, 16:45:58 »
No entiendo por que debes castearlo a un int, ni deberias hacerlo.

PORTDbits es un estructura separada bit a bit  con los bits nombrados RD0 RD1,etc es totalmente correcto hacer:

if(PORTDbits.RD1==1)
//o directamente
if(PORTDbits.RD1)

Solo preguntaria si el bit es uno. Para mi es otro problema el que tenes. Castearlo a int  te lo transforma a
0000 0001

El cual nuevamente comparas y sigue siendo lo mismo.. no vale la pena tampoco, incluso podes ver el ASM generado y ver la diferencia.

Desconectado alfredo1972

  • PIC10
  • *
  • Mensajes: 5
Re:porque añardir int a una lectura de pin
« Respuesta #2 en: 11 de Octubre de 2015, 17:08:46 »
Pues eso digo yo, pero hasta que no lo he puesto, no se leía bien el pin
Por eso mi pregunta

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:porque añardir int a una lectura de pin
« Respuesta #3 en: 11 de Octubre de 2015, 17:17:37 »
Si queres la solucion lo unico que queda es que pases el ASM generado para ambos codigos, esa partecita nomas. ahi vamos a ver que es lo que hace, si es un error del compilador o no. Pero no veo el por que no deberia funcionar.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:porque añardir int a una lectura de pin
« Respuesta #4 en: 11 de Octubre de 2015, 18:47:12 »
No sera, que lo has configurado como entrada y luego has configurado algun periferico, o has vuelto a tocas la configuración de los pines o alguna librería.

las librerías pueden cambiar muchas cosas que no sabemos, sobre todo si no la hemos hecho nosotros.

un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:porque añardir int a una lectura de pin
« Respuesta #5 en: 11 de Octubre de 2015, 19:07:37 »
Acabo de correr una simulacion en XC8, para comprobar esto.

Codigo a prueba:
Código: C++
  1. while(1){
  2.          if(PORTBbits.RB0) { PORTB=0x10; }
  3.         if(PORTBbits.RB0==1) { PORTB=0x10; }
  4.         if((int)PORTBbits.RB0==1) { PORTB=0x10; }
  5.     }

Codigo ASM creado de cada IF:
Código: ASM
  1. ;        if(PORTBbits.RB0) { PORTB=0x10; }
  2. 0x7EF: BTFSS PORTB, 0x0
  3. 0x7F0: GOTO 0x7F3
  4. 0x7F1: MOVLW 0x10
  5. 0x7F2: MOVWF PORTB
  6. ;        if(PORTBbits.RB0==1) { PORTB=0x10; }
  7. 0x7F3: BTFSS PORTB, 0x0
  8. 0x7F4: GOTO 0x7F7
  9. 0x7F5: MOVLW 0x10
  10. 0x7F6: MOVWF PORTB
  11. ;        if((int)PORTBbits.RB0==1) { PORTB=0x10; }
  12. 0x7F7: BTFSS PORTB, 0x0
  13. 0x7F8: GOTO 0x7EF
  14. 0x7F9: MOVLW 0x10
  15. 0x7FA: MOVWF PORTB

Es decir exactamente lo mismo en todos los casos. Nuevamente ese no es tu problema, tenes otro problema mas que seguro, que tal ves eso lo este tapando.

Esta ves utilize un define

Código: C++
  1. #define OW  PORTBbits.RB0
  2.  
  3. //..... main, config, etc
  4.  
  5.     while(1){
  6.          if(OW) { PORTB=0x10; }
  7.         if(OW==1) { PORTB=0x10; }
  8.         if((int)OW==1) { PORTB=0x10; }
  9.     }

Nuevamente el codigo ASM es el mismo, exactamente igual:

Código: ASM
  1. ;         if(OW) { PORTB=0x10; }
  2. 0x7EF: BTFSS PORTB, 0x0
  3. 0x7F0: GOTO 0x7F3
  4. 0x7F1: MOVLW 0x10
  5. 0x7F2: MOVWF PORTB
  6. ;        if(OW==1) { PORTB=0x10; }
  7. 0x7F3: BTFSS PORTB, 0x0
  8. 0x7F4: GOTO 0x7F7
  9. 0x7F5: MOVLW 0x10
  10. 0x7F6: MOVWF PORTB
  11. ;        if((int)OW==1) { PORTB=0x10; }
  12. 0x7F7: BTFSS PORTB, 0x0
  13. 0x7F8: GOTO 0x7EF
  14. 0x7F9: MOVLW 0x10
  15. 0x7FA: MOVWF PORTB

Definitivamente algo mal tenes, o le estas echando la culpa a eso cuando es otra cosa.
Y siendo que el codigo NO cambia para nada, directamente no le hiciste nada a tu codigo y funciona igual
« Última modificación: 11 de Octubre de 2015, 19:16:00 por KILLERJC »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:porque añardir int a una lectura de pin
« Respuesta #6 en: 11 de Octubre de 2015, 19:15:54 »
¿es posible colgar todo el código?

un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw


 

anything