Autor Tema: Dudas PIC18F45k22, configurar entradas  (Leído 1855 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Dudas PIC18F45k22, configurar entradas
« en: 04 de Junio de 2016, 02:12:46 »
Saludos,
He trabajado con el 18f25k22 y no he tenido problemas declarando las entradas...pero con este PIC18F45k22, tengo un problema en RA0. se supone que lo configuro como entrada, pero cuando le pongo voltaje (5V) el pic se detiene ( como si estuviera en corto)... y solo sucede en este pin.
Le puse  pulldown de 10K a todas la entradas declaradas, la entrada solo censa 5V.
lo curioso es que, con un divisor de voltaje  ---1k----|----1k----, no hay problema.


Código: C
  1. #use standard_io(A)
  2. #use standard_io(B)
  3. #use standard_io(C)
  4. #use standard_io(D)
  5. #use standard_io(E)
  6.  
  7.  
  8. En MAIN
  9.  
  10. set_tris_a(0b11111111);       // RA0-RA5 (Entradas 6,5,4,3,2,1), (RA6,RA7 OSCAL)
  11. set_tris_b(0b11111111);       // RB0-RB1 (RING,DTR), RB2-RB7 (Entradas 12,11,10,9,8,7)  
  12. set_tris_c(0b10111110);       // RC0-RC1 (TX, RX DEBUG),RC2-RC3 (Piloto, RST_SOFT), RC3-RC4 (libres), RC6-RC7 (TX, RX UART1) set_tris_d(0b10000000);       // RD0-RD5(Salida 1,2,3,4,5,6),RD6-RD7 (TX, RX UART2)
  13. set_tris_e(0b00000000);       // RE0 (libre), RE1-RE2 (Salida 7,8),  RE3 (MCLR)
  14.  
  15.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  16.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);  
  17.    set_timer1 (0x6FA);                                
  18.    setup_timer_2(T2_DISABLED,0,1);    
  19.    setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
  20.    setup_timer_4(T4_DISABLED,0,1);
  21.    setup_comparator(NC_NC_NC_NC);
  22.    setup_ccp1(CCP_OFF);
  23.    setup_ccp2(CCP_OFF);
  24.    setup_ccp3(CCP_OFF);  
  25.    setup_ccp4(CCP_OFF);
  26.    setup_ccp5(CCP_OFF);
  27.    setup_dac(DAC_OFF);
  28.    setup_adc(ADC_OFF | NO_ANALOGS);
  29.    setup_adc_ports(NO_ANALOGS|VSS_VDD);
  30.    setup_wdt(WDT_OFF);


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dudas PIC18F45k22, configurar entradas
« Respuesta #1 en: 04 de Junio de 2016, 02:48:07 »
usa el fast_io si realmente queres usar los tris, sino en standart te lo cambia el mismo compilador, por mas que vos setees los tris

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:Dudas PIC18F45k22, configurar entradas
« Respuesta #2 en: 04 de Junio de 2016, 18:53:45 »
usa el fast_io si realmente queres usar los tris, sino en standart te lo cambia el mismo compilador, por mas que vos setees los tris

Si, error mio.... pero lo puse fast_io...  y  nada, es como si hiciera un corto... pero según el manual de este pic, ese pin es IO.
me acabo de dar cuenta, que incluso con tierra tambien se bloquea.... creo que falta algo en ese pin... o tal vez es un error del compilador...
pero porque con un divisor de voltaje si funciona?... :/
y se supone que este pic funciona a 5V

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dudas PIC18F45k22, configurar entradas
« Respuesta #3 en: 04 de Junio de 2016, 19:55:28 »
probaste con una resistencia de 1k a VDD o una resistencia de 1K a GND ?.

midiendo los extremos podes encontrar si esta funcionando como salida, ademas la resistencia limitaria la corriente que podria ir o salir del pin.

Todo asumiendo que nada de lo que pusiste despues modifique los TRIS!, podrias probar tambien en el programa poner los tris despues de la configuracion de todos los modulos.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:Dudas PIC18F45k22, configurar entradas
« Respuesta #4 en: 04 de Junio de 2016, 20:13:00 »
....

ese esa misma pregunta la hice en el foro CCS y alguien puso este codigo:
Código: C
  1. #include <18F45K22.h>
  2. #device ADC=10
  3. #fuses NOWDT, INTRC_IO, NOPLLEN, NOFCMEN, NOIESO, PUT
  4. #fuses BROWNOUT, BORV29, STVREN, NOLVP, NODEBUG, NOCPB
  5. #fuses NOCPD, NOXINST, NOPBADEN, NOPROTECT
  6. #fuses CCP2C1, CCP3B5, TIMER3C0, CCP2D2
  7. //safe set of fuses for internal oscillator and peripherals set to default
  8.  
  9. #use delay(internal=16MHz)
  10. #use RS232 (UART1, BAUD=9600, ERRORS, PARITY=N, BITS=8)
  11. //default RS232 for debugging
  12.  
  13. void main()
  14. {
  15.    int1 old_input;
  16.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  17.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  18.    set_timer1 (0x6FA);                                  
  19.    setup_timer_2(T2_DISABLED,0,1);    
  20.    setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
  21.    setup_timer_4(T4_DISABLED,0,1);
  22.    setup_comparator(NC_NC_NC_NC);
  23.    setup_ccp1(CCP_OFF);
  24.    setup_ccp2(CCP_OFF);
  25.    setup_ccp3(CCP_OFF);
  26.    setup_ccp4(CCP_OFF);
  27.    setup_ccp5(CCP_OFF);
  28.    setup_dac(DAC_OFF);
  29.    setup_adc(ADC_OFF);
  30.    setup_adc_ports(NO_ANALOGS);
  31.    old_input=input(PIN_A0);
  32.  
  33.    while(TRUE)
  34.    {
  35.       if (input(PIN_A0)!=old_input)
  36.       {
  37.          //input pin has changed
  38.          old_input=input(PIN_A0);
  39.          printf ("Pin is %d\n\r", old_input);
  40.          delay_ms(10);
  41.       }
  42.    } //loop sending to the RS232 when pin changes.
  43. }

simulado funciona genial, pero en el pic no... apenas pongo 5V en ese pin, el pic se bloquea...
y no es un corto o mal coneccion porque ese pin va directo a un cable.... entonces no hay forma .
si pongo este divisor si funciona
RA0-------------¬
+5V (IN)---1k---|---1k---- GND

entonces no tengo ni idea... sera el pic o el compilador? voy a probar poniendo un simple LED como salida en ese pin a ver si trabaja,

EDIT
Que raro, como salida funciona muy bien.
Código: C
  1. output_toggle(PIN_A0);delay_ms(200);

Pero aquí dice que tambien es entrada: http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf
pagina 17

Será que los pines no toleran los +5V?... solo tengo problema con RA0

EDIT2
Código: C
  1. #include <18F45K22.h>
  2. #Device  PASS_STRINGS=IN_RAM  //#ZERO_RAM
  3. #define FASTER_BUT_MORE_ROM                                                               // Variables en memoria      
  4. #fuses HSM, NOWDT, BROWNOUT, PUT, NOPBADEN, NOHFOFST
  5. #fuses NOPLLEN        //HW PLL disabled, PLL enabled in software
  6. #fuses MCLR           //Master Clear pin enabled
  7. #fuses PROTECT        //Code protected from reads
  8. #use delay(clock=12MHz,crystal=12MHz)
  9.  
  10.  
  11. #use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C0,rcv=PIN_C1,ERRORS,stream=debug)  // Configuración debug (Software)
  12. #use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7,ERRORS,stream=uart1)  // Configuración UART1 (Hardware)
  13. #use rs232(baud=9600,bits=8,parity=N,xmit=PIN_D6,rcv=PIN_D7,ERRORS,stream=uart2)  // Configuración UART2 (Hardware)
  14. /***************************************************************/
  15. //default RS232 for debugging
  16.  
  17. void main()
  18. {
  19.    int1 old_input;
  20.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  21.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  22.    set_timer1 (0x6FA);                                  
  23.    setup_timer_2(T2_DISABLED,0,1);    
  24.    setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
  25.    setup_timer_4(T4_DISABLED,0,1);
  26.    setup_comparator(NC_NC_NC_NC);
  27.    setup_ccp1(CCP_OFF);
  28.    setup_ccp2(CCP_OFF);
  29.    setup_ccp3(CCP_OFF);
  30.    setup_ccp4(CCP_OFF);
  31.    setup_ccp5(CCP_OFF);
  32.    setup_dac(DAC_OFF);
  33.    setup_adc(ADC_OFF);
  34.    setup_adc_ports(NO_ANALOGS);
  35.    old_input=input(PIN_A0);
  36.  
  37.    while(TRUE)
  38.    {
  39.       fprintf(debug,"hola\n\r");
  40.       delay_ms(1000);
  41.     // output_toggle(PIN_A0);delay_ms(200);
  42.      output_toggle(PIN_c2);delay_ms(200);
  43.  output_low(PIN_A0);
  44.  
  45.       if (input(PIN_A0))
  46.       {fprintf(debug,"Pin alto\n\r");
  47.       }
  48.       else{fprintf(debug,"Pin bajo\n\r");}
  49.    } //loop sending to the RS232 when pin changes.
  50. }

quite algunos fuses y puse el crystal a 12M sin PLL  y ahora si funciona sin problemas... ¿Ahora porque si funciona? :/
« Última modificación: 04 de Junio de 2016, 21:10:26 por cvargcal »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dudas PIC18F45k22, configurar entradas
« Respuesta #5 en: 04 de Junio de 2016, 22:03:56 »
No tengo la menor idea, no me llevo con CCS, yo te iba a pasar un .hex para que probaras. Era simplemente para que probaras poner algo en RA0 y saliera por RC0

Código: C
  1. void main(void) {
  2.  
  3.     ANSELA = 0;
  4.     ANSELB = 0;
  5.     ANSELC = 0;
  6.     TRISCbits.TRISC0 = 0;
  7.    
  8.    
  9.     while(1)
  10.     {
  11.         LATCbits.LATC0 = PORTAbits.RA0;
  12.     }
  13. }

Usa cristal de 12Mhz como vos tenes y MCLR, LVP off, IESO off.
« Última modificación: 04 de Junio de 2016, 22:07:46 por KILLERJC »

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:Dudas PIC18F45k22, configurar entradas
« Respuesta #6 en: 04 de Junio de 2016, 23:29:59 »
...

Gracias,en realidad funciona y no...  con el código corto de solo leer la entrada... funciona mas o menos pero veo que en realidad lo que pasa es que el pic se reinicia tan rápido que pareciera que si funciona...

Cuando lo implemento en mi programa que tiene muchas funciones, igual el pic se reinicia y puedo ver por el debug que es justamente cuando pongo voltaje...pero, almenos se reinicia solamente he igual queda con el valor leído, antes se quedaba detenido como una especie de MCLR. Y ahora  solo basta con poner un resistencia en serie de 1k para que no se reinicie...  ( no debería pero...)

En conclusión es lo mismo, solo que con estos fuses no se queda pegado...

Aunque ahora me surge otra idea, talvez los 3.3V no es suficiente alimentación, a lo mejor con una alimentación de 5V  no pasa esto...
pero no lo puedo saber, ya estoy programando sobre la PCB.
Es la primera vez que trabajo con 3.3V.

Gracias por el codigo.
¿es PIC C de microchip cierto?


EDIT

Ya encontré el problema ARGGGG :( hay que leer el manual siempre.  :-/

Citar
27.0 ELECTRICAL CHARACTERISTICS
Absolute Maximum Ratings (†)
Ambient temperature under bias...-40°C to +125°C
Storage temperature ... -65°C to +150°C
Voltage on any pin with respect to VSS (except VDD, and MCLR) .................................................. -0.3V to (VDD + 0.3V)

El máximo voltaje en los pin es VCC+ 0.3,  osea que para mi debe 3.6V... Claro!!!!! arggg  ahora entiendo porque con el divisor no hay problema.
Bueno, almenos ya sé el problema.
« Última modificación: 05 de Junio de 2016, 00:05:16 por cvargcal »


 

anything