Autor Tema: Tan elemental, que .... no funciona!  (Leído 3287 veces)

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

Desconectado xp8100

  • PIC12
  • **
  • Mensajes: 71
Tan elemental, que .... no funciona!
« en: 26 de Julio de 2010, 22:30:30 »
Saludos.

Estoy perdido con algo tan simple como leer el estado de un PIN.

Si, ya lo se, es de primero, pero me estoy volviendo loco.

Os adjunto el programa para ver si alguien tiene idea de por que no funciona (el valo siempre es '0')

Situavción actual: PIN_C4 con una resiatencia de 10K a +5. Entre C4 y masa un pulsador.
Supongo: Pulsador sin activar, valor de C4 = 1, pulsador activado valor de C4 = 0.

Pues no: Siempre es 0.

Lo más curioso es que la simulacion en PROTEUS 7.6 SP0 Build 8304 funciona perfecta.
CCS = Version 4.104

#include    <18f4550.h>
#fuses      HS, PLL5, CPUDIV1, NOWDT, PUT, BROWNOUT, NOLVP, MCLR
#use        delay(clock=20M)

#define CONTACT_1             PIN_C4
#define SEND                  PIN_C6
#define RECEIVE               PIN_C7

#use RS232(baud=9600,xmit=SEND,rcv=RECEIVE,stream=STANDARD)
#include    <lcd.c>


void main(void) {
  char cContact1_Status;

  lcd_init();
  delay_ms(6);

  printf(lcd_putc, "Test entradas\r\n");

do{


  if (input_state(CONTACT_1)) cContact1_Status = '1';
  else cContact1_Status = '0';
  fprintf(STANDARD, "Estado de C4=%c\r\n",cContact1_Status);

  } while(true);
}

Entiendo que algo estoy haciendo mal, ya que he probado en todas las entrads del puerto C y el resultado es el mismo.
Gracias anticipadas.
jc

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Tan elemental, que .... no funciona!
« Respuesta #1 en: 26 de Julio de 2010, 22:59:50 »
Hola xp8100, para leer el estado de un pin la ayuda de CCS dice lo siguiente:

Syntax: value = input (pin)
 
Parameters:
 Pin to read.  Pins are defined in the devices .h file.  The actual value is a bit address.  For example, port a (byte 5) bit 3 would have a value of 5*8+3 or 43.  This is defined as follows:  #define PIN_A3 43. 


The PIN could also be a variable.  The variable must have a value equal to one of the constants (like PIN_A1) to work properly.  The tristate register is updated unless the FAST_I0 mode is set on port A.  note that doing I/0 with a variable instead of a constant will take much longer time.
 
Returns:
0 (or FALSE) if the pin is low,
1 (or TRUE) if the pin is high
 
Function:
 This function returns the state of the indicated pin.   The method of I/O is dependent on the last USE *_IO directive.  By default with standard I/O before the input is done the data direction is set to input.

Requires:
 Pin constants are defined in the devices .h file

 
 
Examples:
Código: Visual Basic
  1. while ( !input(PIN_B1) );
  2.  
  3. // waits for B1 to go high
  4. if( input(PIN_A0) )
  5.    printf("A0 is now high\r\n");
  6.  
  7. int16 i=PIN_B1;
  8.  
  9. while(!i);
  10.  
  11. //waits for B1 to go high

Prueba este codigo:

Código: Visual Basic
  1. if (input(CONTACT_1))
  2. {cContact1_Status = '1';}
  3. else
  4. {cContact1_Status = '0';}


En la ayuda esta todo men.

Saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado xp8100

  • PIC12
  • **
  • Mensajes: 71
Re: Tan elemental, que .... no funciona!
« Respuesta #2 en: 27 de Julio de 2010, 09:41:02 »
Gracias amigo por tan "documentada" :-) respuesta.
Efectivamente esa es la forma que siempre he usado para leer el estado de un PIN.
Pero tampoco funciona.

He probado a cambiar el puertoPIN_C4 por otro PIN del puerto C: Nada, siempre '0'
He probado a usar otro PIN de otro puerto, PIN_B1 (desactivando las pull-up): Nada, siempre '0'
He probado a cambiar la MCU por otro 18F4550 nuevo: Nada, siempre '0'

Ese mismo micro está leyendo por C1 un DS18S20 (Sensor de temperatura) sin problemas, a la vez que se conecta por C6, C7 y C2 con un MAX487 para comunicaciones RS485 y un rele conectado a C0 (mediante un transistor).

No se si a nivel de #FUSES hay que activar algo, pero no creo.

Voy a usar un 16F877 para ver si obtengo algún resultado positivo.

Moral por los suelos.

Desconectado xp8100

  • PIC12
  • **
  • Mensajes: 71
Re: Tan elemental, que .... no funciona!
« Respuesta #3 en: 27 de Julio de 2010, 09:59:43 »
El viejo 16F877 nunca te defrauda!.

Simplemente cambiar del 18F4550 al 16F877 (por supuesto también cambiar los heads a nivel de CCS) y la lectura es correcta (0 y 1 en función de la posición del pulsador).

Tanto INPUT como INPUT_STATE funcónan 100%.

Ahora si que no me lo explico.

Por favor alguien que me pueda arrojar un poco de luz?.

Gracias anticipadas.

Jc

Desconectado DOMINGO_V

  • PIC10
  • *
  • Mensajes: 14
Re: Tan elemental, que .... no funciona!
« Respuesta #4 en: 30 de Julio de 2010, 08:05:22 »
Puede que la razón sea esto ( sacado de la documentación del PIC18F2455/2550/4455/4550:
apartado 10.3 PORTC, TRISC and LATC


Registers

Note: On a Power-on Reset, these pins, except
RC4 and RC5, are configured as digital
inputs. To use pins RC4 and RC5 as digital
inputs, the USB module must be disabled
(UCON<3> = 0) and the on-chip
USB transceiver must be disabled
(UCFG<3> = 1).

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: Tan elemental, que .... no funciona!
« Respuesta #5 en: 30 de Julio de 2010, 17:25:41 »
Haber... parémonos a pensar:

1) Nos estas diciendo que simulando el circuito en proteus te funciona ?

2) Has grabado el programa en un micro y lo has probado en la realidad ?


Un Saludo !

pd: si lo has probado en la realidad ahí tienes el error.
Share the world !

Blog's

http://www.area0x33.com

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Tan elemental, que .... no funciona!
« Respuesta #6 en: 30 de Julio de 2010, 21:42:03 »
Hola xp8100, intenta cambiando este fuse: PLL5 por este otro PLL1 y además adiciónale este otro fuse: NOPBADEN

Un saludo!

Desconectado xp8100

  • PIC12
  • **
  • Mensajes: 71
Re: Tan elemental, que .... no funciona!
« Respuesta #7 en: 30 de Julio de 2010, 22:54:44 »
Saludos JIM_17

Como indicaba anteriormente, el proyecto lo simulé en PROTEUS (18F4550) , comprobé que todo funcionaba 100% y acto seguid lo grabé sobre un 18F4550.

Todo funcionó como debía, excepto el acceso a la lectura de los PIN's.

No entiendo lo de " ..pd: si lo has probado en la realidad ahí tienes el error."

Hoy realizando varias pruebashe comprobado que sobre el puerto A lee el perfectamente el estado de los PIN's.

Jc

Desconectado xp8100

  • PIC12
  • **
  • Mensajes: 71
Re: Tan elemental, que .... no funciona!
« Respuesta #8 en: 30 de Julio de 2010, 23:00:56 »
Gracias por tu respuesta BMB.

El cambio que sugieres con los fuses con ha causado efecto.

Maldita sea.

Jc

Desconectado xp8100

  • PIC12
  • **
  • Mensajes: 71
Re: Tan elemental, que .... no funciona!
« Respuesta #9 en: 30 de Julio de 2010, 23:02:53 »
Amigo DOMINGO_V, ¿como puedo alterar los indicadores para USB desde el código CCS?.

He encontrado varios sitios que comentan lo mismo, pero siempre hablan "desde MPLAB".

Disculpad las molestias.

Gracias anticipadas, 

Jc


 

anything