Autor Tema: Comprobando estado de los pines pic18f4550  (Leído 2309 veces)

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

Desconectado Carlos2302

  • PIC16
  • ***
  • Mensajes: 110
Comprobando estado de los pines pic18f4550
« en: 05 de Mayo de 2016, 20:46:26 »
Hola amigos estoy realizando un programa sencillo para verificar el correcto funcionamiento de los pines en modo de salida digital del pic18f4550. Pero al ejecutarlo en la practica solo funciona correctamente el porta los demas se quedan en estado alto. este es el programa.

#include <main.h>


 /*------------------------------------------------------------ Acerca de. ------------------------------------------------------------
                                                   © 2016. Todosobremecatronica.hol.es       
======================================================================================================================================
** Autor: Carlos Daniel Rodriguez
** Programa: Verificar salidas del Pic18f4550
Con este programa lo que buscamos es verificar que todas las salidas del pic funcionen
adecuadamente colocando cada salida en nivel alto por un periodo de 1.5 Seg
para tener tiempo suficiente para ir colocando la punta de un tester en cada
salida y de esta forma verificar que su estado cambia de alto a bajo
------------------------------------------------------------------------------------------------------------------------------------*/

//----------------------------------------------------- Directivas de Procesado. -----------------------------------------------------

#BYTE TRISA  = 0xF92
#BYTE TRISB  = 0xF93
#BYTE TRISC  = 0xF94
#BYTE TRISD  = 0xF95
#BYTE TRISE  = 0xF96
             
#BYTE PORTA  = 0xF80
#BYTE PORTB  = 0xF81
#BYTE PORTC  = 0xF82
#BYTE PORTD  = 0xF83
#BYTE PORTE  = 0xF84
//-------------------------------------------------------- Función Principal. --------------------------------------------------------
void main(){
 
   TRISA=0x00;    // PORTx como salida
   TRISB=0x00;   
   TRISC=0x00;   
   TRISD=0x00;   
   TRISE=0x00;   
   
   while(TRUE){         // Bucle Infinito.
     
      output_high(PIN_A0);
       delay_ms(1500);
      output_low(PIN_A0);
       delay_ms(1500);
       
       output_high(PIN_A1);
       delay_ms(1500);
      output_low(PIN_A1);
       delay_ms(1500);
       
       output_high(PIN_A2);
       delay_ms(1500);
      output_low(PIN_A2);
       delay_ms(1500);
       
       output_high(PIN_A3);
       delay_ms(1500);
      output_low(PIN_A3);
       delay_ms(1500);
       
       output_high(PIN_A5);
       delay_ms(1500);
      output_low(PIN_A5);
       delay_ms(1500);
       
       output_high(PIN_B0);
       delay_ms(1500);
      output_low(PIN_B0);
       delay_ms(1500);
       
       output_high(PIN_B1);
       delay_ms(1500);
      output_low(PIN_B1);
       delay_ms(1500);
       
       output_high(PIN_B2);
       delay_ms(1500);
      output_low(PIN_B2);
       delay_ms(1500);
       
       output_high(PIN_B3);               
       delay_ms(1500);
      output_low(PIN_B3);
       delay_ms(1500);
       
       output_high(PIN_B4);
       delay_ms(1500);
      output_low(PIN_B4);
       delay_ms(1500);
       
       output_high(PIN_B5);
       delay_ms(1500);
      output_low(PIN_B5);
       delay_ms(1500);
       
       output_high(PIN_B6);
       delay_ms(1500);
      output_low(PIN_B6);
       delay_ms(1500);
       
       output_high(PIN_B7);
       delay_ms(1500);
      output_low(PIN_B7);
       delay_ms(1500);
     
       
       output_high(PIN_C0);
       delay_ms(1500);
      output_low(PIN_C0);
       delay_ms(1500);
       
       output_high(PIN_C1);
       delay_ms(1500);
      output_low(PIN_C1);
       delay_ms(1500);
       
       output_high(PIN_C2);
       delay_ms(1500);
      output_low(PIN_C2);
       delay_ms(1500);
       
       output_high(PIN_C4);
       delay_ms(1500);
      output_low(PIN_C4);
       delay_ms(1500);
       
       output_high(PIN_C5);
       delay_ms(1500);
      output_low(PIN_C5);
       delay_ms(1500);
       
       output_high(PIN_C6);
       delay_ms(1500);
      output_low(PIN_C6);
       delay_ms(1500);
       
       output_high(PIN_C7);
       delay_ms(1500);
      output_low(PIN_C7);
       delay_ms(1500);
       
       
       output_high(PIN_D0);
       delay_ms(1500);
      output_low(PIN_D0);
       delay_ms(1500);
       
       output_high(PIN_D1);
       delay_ms(1500);
      output_low(PIN_D1);
       delay_ms(1500);
       
       output_high(PIN_D2);
       delay_ms(1500);
      output_low(PIN_D2);
       delay_ms(1500);
       
       output_high(PIN_D3);
       delay_ms(1500);
      output_low(PIN_D3);
       delay_ms(1500);
       
       output_high(PIN_D4);
       delay_ms(1500);
      output_low(PIN_D4);
       delay_ms(1500);
       
       output_high(PIN_D5);
       delay_ms(1500);
      output_low(PIN_D5);
       delay_ms(1500);
       
       output_high(PIN_D6);
       delay_ms(1500);
      output_low(PIN_D6);
       delay_ms(1500);
       
       output_high(PIN_D7);
       delay_ms(1500);
      output_low(PIN_D7);
       delay_ms(1500);
       
       output_high(PIN_E0);
       delay_ms(1500);
      output_low(PIN_E0);
       delay_ms(1500);
       
       output_high(PIN_E1);
       delay_ms(1500);
      output_low(PIN_E1);
       delay_ms(1500);
       
       output_high(PIN_E2);
       delay_ms(1500);
      output_low(PIN_E2);
       delay_ms(1500);
   }                             
                                 
}         
Gracias a Dios por aquellas personas que ayudan sin esperar nada a cambio. Dios los bendiga hoy mañana y siempre.

Desconectado Carlos2302

  • PIC16
  • ***
  • Mensajes: 110
Re:Comprobando estado de los pines pic18f4550
« Respuesta #1 en: 05 de Mayo de 2016, 21:34:49 »
Otra pregunta aqui mismo se pueden quemar las salidas de los pic al tocarlo con las manos.
Gracias a Dios por aquellas personas que ayudan sin esperar nada a cambio. Dios los bendiga hoy mañana y siempre.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comprobando estado de los pines pic18f4550
« Respuesta #2 en: 05 de Mayo de 2016, 22:07:51 »
Hay mas registros ademas del TRISx a configurar en cada caso. Algunos puertos no lo necesitan pero otros si.

Y el pin se puede quemar si es que hay una descarga electrostatica.

En tu programa desabilita los puertos analogicos, no modifiques los TRISx total el mismo CCS lo realiza. Y podes crear un loop mucho mas simple para todos.

Código: C
  1. for ( i=1 ; i==128 ; i <<= 1 )
  2. {
  3.        output_a(i);
  4.        output_b(i);
  5.        output_c(i);
  6.        output_d(i);
  7.        output_e(i);
  8.        delay_ms(1500);
  9. }

Desconectado Carlos2302

  • PIC16
  • ***
  • Mensajes: 110
Re:Comprobando estado de los pines pic18f4550
« Respuesta #3 en: 06 de Mayo de 2016, 09:05:08 »
Hola Killerjc gracias por responder hice tu codigo pero no me cuadra mucho xq en que parte se incrementa i, solo lo desplaza a la izquierda pero no lo incrementa y por lo tanto siempre sera 1. Aparte las salidas siempre quedaran encendidas cosa que no quiero para no provocar que el micro maneje altas corrientes, que encienda una salida y luego la apague.
Gracias a Dios por aquellas personas que ayudan sin esperar nada a cambio. Dios los bendiga hoy mañana y siempre.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comprobando estado de los pines pic18f4550
« Respuesta #4 en: 06 de Mayo de 2016, 14:28:42 »
Citar
solo lo desplaza a la izquierda pero no lo incrementa y por lo tanto siempre sera 1.

Entonces no sabes que lo que es desplazar a la izquierda, o un binario.

Código: C
  1. i = 1;

i es 0000 0001

Código: C
  1. i<<=1;


o que es lo mismo que:
Código: C
  1. i = i << 1;
  2. i *= 2;
  3. i = i * 2
(todas equivalentes)

iria:

Código: [Seleccionar]
0000 0001 = 1
0000 0010 = 2
0000 0100 = 4
0000 1000 = 8
0001 0000 = 16
0010 0000 = 32
0100 0000 = 64
1000 0000 = 128

Fin del for por que llego a 128. Pasaste por todos los bits de todos los puertos. Pone el for en un while y listo.

O mejor dicho desplazar a la izquierda x lugares a un "valor" es lo mismo que: valor * 2x

El unico "deficit" es que hay puertos que no estan completos, por lo tanto algunos no van a encender por un tiempo. Ejemplo si PORTE tiene 3 pines, va a encender por 4.5s ( 1.5s cada pin dejando ese delay ) Y luego tendrias apagado los pines restantes (5 * 1.5s = 7.5s)

Ahora acortas el delay, y tenes menos tiempo de "apagado" pero tambien de encendido, que con 0.5s basta y sobraria para poder medirlo con un tester o al tenerlo en el protoboard conectar un led + resistencia para ver si enciende.

Citar
Aparte las salidas siempre quedaran encendidas cosa que no quiero para no provocar que el micro maneje altas corrientes, que encienda una salida y luego la apague

Lo que decis contradice con lo que queres hacer. Sinceramente no se por que tengo que explicar esto.

Corriente ( descontando la que puede llegar a tener el puerto de por si ) va a tener que ver con lo que tengas conectado al puerto, si vos tenes una resistencia de 1ohm conectado a GND y al pin, vas a tener MUCHA corriente, mas de lo que puede dar el puerto. Ahora si vos tenes todos los pines al aire y solo estas midiendo la tension ( con un multimetro), no vas a tener mucha corriente saliente solo la que pueda pasar por la carga del multimetro que son 1Mohm o 10Mohm no recuerdo (uA o nA), si usas un led y le pones 10mA tampoco es "mucha" corriente.

Supuestamente este programa esta para "comprobar" el estado de los pines, eso lo unico que lo vas a poder hacer es fuera del circuito. No lo vas a hacer con un circuito de un proyecto, ya que estarias activando reles, leds, etc. Y aun asi estuviera puesto en una placa, depende de lo que tenes conectado, y no de "cuanto estuvo encendido el circuito". Y deberia estar correctamente calculado el consumo de cada puerto del PIC para que cumpla con las especificaciones del mismo.

Si quisieras podrias poner todas las salidas en 1, y luego todas en 0. Sin ningun problema. Pero adapte el programa a algo parecido a lo que querias. ( Aunque se puede hacer como vos queres tambien ) Pero no debe ser nada lindo esperar todo el puerto B,D,E por un 1 solo pin del Puerto A que no te llego los 1.5 segundos. para verlo

« Última modificación: 06 de Mayo de 2016, 16:28:31 por KILLERJC »


 

anything