Autor Tema: PIC BASIC del PIC Simulator IDE Oshonsoft (Índice en página 1)  (Leído 859720 veces)

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

Desconectado 21CURIOSOS

  • PIC12
  • **
  • Mensajes: 56
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #555 en: 16 de Julio de 2009, 19:02:43 »
Desde luego que si, gracias por la informacion

Sal U2

Desconectado hugo777

  • PIC10
  • *
  • Mensajes: 8
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #556 en: 07 de Agosto de 2009, 11:37:15 »
Hola Amigos, les escribo pq tengo la siguiente problematica

construí un circuito que es para saber que valores
se obtienen con la instrucción servoIn, al leer los pulsos desde un
radioreceptor AM de 2 canales (RX), el micro usado es un 16F628A





mi problema es que al encender el RX,  el micro lee solo valores basura glich,
presentando cualquier valor en los leds de salida.
También me percate que al momento de alimentar el circuito con una fuente de
poder independiente de la alimentacion del RX, el servo que esta conectado al
otro canal del RX tiene movimientos producto del glich.


los fuses del micro los tengo configurados así


El codigo del micro es el siguiente:

Código: vb.net
  1. AllDigital
  2.  
  3. Config PORTA = Output
  4. Config PORTB = Output
  5. Config PORTB.3 = Input
  6.  
  7. Dim length As Byte
  8.  
  9. length = 0
  10.  
  11. loop:
  12.         ServoIn PORTB.3, length
  13.        
  14.         PORTA.1 = length.0
  15.         PORTA.0 = length.1
  16.         PORTA.7 = length.2
  17.         PORTA.6 = length.3
  18.         PORTB.7 = length.4
  19.         PORTB.6 = length.5
  20.         PORTB.5 = length.6
  21.         PORTB.4 = length.7
  22.  
  23.         WaitMs 1000
  24.        
  25.         Goto loop
  26.        
  27. End

preguntas:
 ¿al estar alimentando el circuito, con una fuente independiente
 (vieja fuente de computador "ATX") puede que esta este produciendo el glitch?
 
 ¿debo alimentar el circuito desde el RX para evitar el glitch?
 
 ¿pq lee basura desde B3?, ¿puede deberse a que es un pin pensado para PWM?
 
 ¿necesito de algun 4093 o 74LS14 para filtrar los pulsos y asi solucionar el problema de la lectura?
 
¿alguien posee algun ejemplo, en el cual se lean pulsos desde un RX?

Slds Hugo



Desconectado hugo777

  • PIC10
  • *
  • Mensajes: 8
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #557 en: 10 de Agosto de 2009, 10:04:07 »
Jaja ya lo solucione, resultaba que el condensador de 10uf, estaba mal conectado y no hacia el trabajo de evitar interferencias,
lo ajuste y todo resulto ok



sldos hugo

Desconectado hugo777

  • PIC10
  • *
  • Mensajes: 8
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #558 en: 27 de Agosto de 2009, 15:26:18 »
Hola les escribo, para postear obviamente un codigo que desarrolle pensando
en un circuito failsafe para un submarino que estoy construyendo.

bueno y esta es una manera de agradecer la gran cantidad de ejemplos que aquí
se pueden encontrar  de PSI, los cuales en la documentación oficial son muy escuetos.

y que gracias a esos ejemplos pude desarrollar esto.


FE DE ERRATAS
Pd1:modifique el código eliminando las fallas que encontre, del que había posteado.
Pd2:Este código ya esta operativo.

Nuevamente Slds Hugo

Código: Visual Basic
  1. '||===============================================================================||
  2. '||* Nombre Rutina: FAILSAFE_HUGO.BAS                                            *||
  3. '||* Entradas     : GPIO.5 switch indicador de lectura de posicion de falla      *||
  4. '||*                GPIO.4 potenciometro 10kohm indicador de posicion            *||
  5. '||*                GPIO.3 RXin                                                  *||
  6. '||*                                                                             *||
  7. '||* Salidas      : GPIO.0 POT INDICADOR DE LECTURA POSICION DE FALLA.           *||
  8. '||*                GPIO.1 LED INDICADOR DE FALLA(GLITCH).                       *||
  9. '||*                GPIO.2 RXout                                                 *||
  10. '||*                                 PIC12F675                                   *||
  11. '||* .                                ________                                   *||
  12. '||*                 5v             =|Vdd  Vss|= GND                             *||
  13. '||*                 switch         =|gp5  gp0|= led indicador de lectura.       *||
  14. '||*                 POT 10Kohm.    =|gp4  gp1|= led indicador de falla          *||
  15. '||*                 RXin           =|gp3  gp2|= RXout                           *||
  16. '||* .                                --------                                   *||
  17. '||*                                                                             *||
  18. '||* Objetivo     : procesar y determinar cuales señales estan fuera de los      *||
  19. '||*                parametros y tomar acciones correctivas para evitar un       *||
  20. '||*                fallo catastrofico.                                          *||
  21. '||*                                                                             *||
  22. '||* Autor        : Hugo Sagardía Aguilera.                                      *||
  23. '||* Proyecto     : FAILSAFE                                                     *||
  24. '||*                                                                             *||
  25. '||* Micro        : 12F675                                                       *||
  26. '||* Oscilador    : IntOSC GP4                                                   *||
  27. '||* Velocidad    : 4Mhz                                                         *||
  28. '||* Flags        : WDT     OFF                                                  *||
  29. '||*                PWRT    OFF                                                  *||
  30. '||*                MCLR    OFF                                                  *||
  31. '||*                BODEN   OFF                                                  *||
  32. '||*                CP      OFF                                                  *||
  33. '||*                CPD     OFF                                                  *||
  34. '||*                                                                             *||
  35. '||* ----------- ------- ------------------------------------------------------- *||
  36. '||* Fecha       Versión Descripción Cambio                                      *||
  37. '||* ----------- ------- ------------------------------------------------------- *||
  38. '||* 26/Ago/2009   1.0.0 (Version Original)                                      *||
  39. '||* 27/Ago/2009   1.0.1 (Manejo de interrupcion por desbordamiento              *||
  40. '||*                      de timer a los 20.2ms)                                 *||
  41. '||* 28/Ago/2009   1.0.2 1.-Se Eliminaron los pasos 1 y 2 por producir           *||
  42. '||*                      comportamientos erraticos al tener el stick en el      *||
  43. '||*                      centro y el trim no en centro, este comportamiento     *||
  44. '||*                      erratico es debido a que cada vez que inicia el micro, *||
  45. '||*                      este calcula la posicion central del stick y sus       *||
  46. '||*                      maximos y minimos posibles)                            *||
  47. '||*                     2.- Se agrego un potenciometro para indicar la posicion *||
  48. '||*                      de falla que poseera en servo                          *||
  49. '||* 02/Sep/2009   1.0.3 (Lectura y Uso de la calibracion de fábrica.)           *||
  50. '||* 25/Sep/2009   1.0.4 (Ajuste del voltaje de 2.3V a 5V.)                      *||
  51. '||* 28/Sep/2009   1.0.5 (Ajuste del voltaje de 2.2V a 5V. y correciones menores)*||
  52. '||* 06/Oct/2009   1.0.6 (Se corrigio lectura del potenciometro y lectura del    *||
  53. '||*                      switch.)                                               *||
  54. '||* 07/Oct/2009   1.0.7 (se elimino la vibracion del servo al producirse la     *||
  55. '||*                      interrupcion que alargaba la frecuencia de 50hz.)       *||
  56. '||===============================================================================||
  57. 'CONFIGURO PUERTOS Y ADC
  58. TRISIO = 1
  59.  
  60. Define ADC_CLOCK = 3
  61. Define ADC_SAMPLEUS = 50
  62.  
  63. 'COMPARATOR OFF
  64. CMCON = 0x07
  65.  
  66. 'VREF OFF
  67. VRCON = 0x00
  68.  
  69. 'GPIO.4 A/D
  70. ANSEL = %00001000
  71.  
  72. Config GPIO.5 = Input
  73. Config GPIO.4 = Input
  74. Config GPIO.3 = Input
  75. Config GPIO.2 = Output
  76. Config GPIO.1 = Output
  77. Config GPIO.0 = Output
  78.  
  79. 'ACTIVA EL CONVERSOR ANALOGO DIGITAL
  80. ADCON0 = 0
  81.  
  82. 'PINES USADOS DEL MICRO
  83. Symbol pin_debe_leer_valor = GPIO.5
  84. Symbol pin_posicion_falla = GPIO.4
  85. Symbol pin_entrada = GPIO.3
  86. Symbol pin_salida = GPIO.2
  87. Symbol pin_led_falla = GPIO.1
  88. Symbol pin_led_lectura = GPIO.0
  89.  
  90. 'CONSTANTES USADAS EN EL PROGRAMA
  91. Const k_cero = 0
  92. Const k_uno = 1
  93. Const k_tres = 3
  94. Const k_cinco = 5
  95. Const k_nueve = 9
  96. Const k_diez = 10
  97. Const k_cien = 100
  98. Const k_periodo_ms = 20000
  99. Const k_voltaje_cero = 429
  100. Const k_divisor = 4
  101.  
  102.  
  103. 'INTERVALOS MAXIMOS Y MINIMOS
  104. Const k_pulso_min = 86  '96
  105. Const k_pulso_max = 212  '202
  106. Const k_pulso_mid = 149  '202
  107. Const k_nro_max_pulsos_erroneos = 25
  108.  
  109. 'PARA DETERMINAR EL PULSO PARA FAIL SAFE
  110. Dim pulso As Byte
  111. Dim pulso_off As Word
  112. Dim pulso_de_falla As Byte
  113.  
  114. 'PARA CONTAR EL NUMERO DE GLITCHS
  115. Dim contador_glitch As Byte
  116.  
  117. 'CONTIENE EL VALOR DEL ADC
  118. Dim valor_pot As Word
  119.  
  120. 'VARIABLE PARA CICLO USO GENERAL
  121. Dim i As Byte
  122.  
  123. 'ALMACENA EL RESULTADO DE LA CALIBRACION
  124. Dim resultado_calibracion As Bit
  125.  
  126. 'PARA 20MS DE PAUSA
  127. 'NOTA: PARA 20.1 DEBE USAR 45435
  128. Dim v20ms_normal As Word
  129. v20ms_normal = 44535  '-->21000     '20000-->45535    '20050-->45485     '20700-->44835
  130.  
  131.  
  132.  
  133. '---------------------------------
  134. 'PARA DEPURACION SOLAMENTE
  135. 'Define SIMULATION_WAITMS_VALUE = 1
  136. 'Define SEROUT_DELAYUS = 0
  137. '---------------------------------
  138. inicio:
  139.  
  140.         resultado_calibracion = carga_calibracion()
  141.  
  142.         'APAGA LOS LED
  143.         pin_led_falla = k_cero
  144.         pin_led_lectura = k_cero
  145.  
  146.         If resultado_calibracion = True Then
  147.                
  148.                 '-----------------------------------------------------------------------
  149.                 '----------------------------- P A S O   1 -----------------------------
  150.                 '-----------------------------------------------------------------------
  151.                 '--AQUI AL PRENDER EL RECEPTOR TIENE PRESIONADO EL SWITCH, TOMA EL    --
  152.                 '--VOLTAJE QUE ESTA DEJANDO PASAR EL POTENCIOMETRO DE 10Kohm Y ESTE LO--
  153.                 '--INTERPRETA COMO PULSO Y LO TRADUCE EN EL SERVO COMO POSICION,      --
  154.                 '--SINO ESTA PRESIONADO EL SWITCH VE LA POSICION QUE TIENE EL         --
  155.                 '--POTENCIOMETRO Y CALCULA EL PULSO SOLAMENTE                         --
  156.                 '-----------------------------------------------------------------------
  157.                 If pin_debe_leer_valor = k_uno Then
  158.                         pin_led_lectura = k_uno
  159.                         While pin_debe_leer_valor = k_uno
  160.                                 Adcin k_tres, valor_pot
  161.                                
  162.                                 'pulso_de_falla = (valor_pot / k_diez) + k_cien
  163.                                 pulso_de_falla = ((valor_pot - k_voltaje_cero) / k_divisor) + k_pulso_min
  164.                                
  165.                                 If pulso_de_falla > k_pulso_max Then
  166.                                         pulso_de_falla = k_pulso_max
  167.                                 Endif
  168.                                
  169.                                 If pulso_de_falla < k_pulso_min Then
  170.                                         pulso_de_falla = k_pulso_min
  171.                                 Endif
  172.                                
  173.                                 pulso_off = k_periodo_ms - (pulso_de_falla * k_diez)
  174.                                                
  175.                                 ServoOut pin_salida, pulso_de_falla
  176.                                 WaitUs pulso_off
  177.                         Wend
  178.                         'pin_led_lectura = k_cero
  179.                 Else
  180.                         'SI NO ESTA PRESIONADO EL BOTON SOLO LEO EL POTENCIOMETRO Y CALCULO LA POSICION DE FALLA
  181.                         Adcin k_tres, valor_pot
  182.  
  183.                         'pulso_de_falla = (valor_pot / k_diez) + k_cien
  184.                         pulso_de_falla = ((valor_pot - k_voltaje_cero) / k_divisor) + k_pulso_min
  185.  
  186.  
  187.                 Endif
  188.  
  189.                 '-----------------------------------------------------------------------
  190.                 '----------------------------- P A S O   2 -----------------------------
  191.                 '-----------------------------------------------------------------------
  192.                 '--MARCA CON EL PARPADEO DE LUCES EL FIN DE LA CONFIGURACION DE FALLO --
  193.                 '--Y CENTRA EL SERVO ANTES DE PROCESAR LAS SEÑALES DE ENTRADA         --
  194.                 '-----------------------------------------------------------------------
  195.                 For i = k_uno To k_cinco
  196.                         pin_led_lectura = k_uno
  197.                         WaitMs k_cien
  198.                         pin_led_lectura = k_cero
  199.                         WaitMs k_cien
  200.                 Next i
  201.  
  202.  
  203.                 'CENTRA EL SERVO
  204.                 pulso_off = k_periodo_ms - (k_pulso_mid * k_diez)
  205.                 For i = k_uno To k_cinco
  206.                         ServoOut pin_salida, k_pulso_mid
  207.                         WaitUs pulso_off
  208.                 Next i
  209.  
  210.  
  211.                 '-----------------------------------------------------------------------
  212.                 '----------------------------- P A S O   3 -----------------------------
  213.                 '-----------------------------------------------------------------------
  214.                 '--CONFIGURA EL TIMER1 PARA DETECTAR LA FALTA DE PULSOS               --
  215.                 '--PASADO LOS 20ms                                                    --
  216.                 '--hex     =  dec                                                     --
  217.                 '--0xaf23  =  44835                                                   --
  218.                 '--DONDE 44835 ES EL RESULTADO DE 65535 - 20700, DONDE 65535          --
  219.                 '--EL MAXIMO VALOR PARA EL TIMER1 DE 16 BITS, PARA QUE EJECUTE        --
  220.                 '--LA INTERRUPCION                                                    --
  221.                 '-----------------------------------------------------------------------
  222.                 T1CON.TMR1CS = k_cero
  223.                 T1CON.T1CKPS0 = k_cero
  224.                 T1CON.T1CKPS1 = k_cero
  225.                
  226.                 'CARGA EL TIMER1 CON UN VALOR TAL QUE DESBORDE A LOS 20ms
  227.                 TMR1H = v20ms_normal.HB
  228.                 TMR1L = v20ms_normal.LB
  229.                
  230.                 T1CON.TMR1ON = k_uno
  231.                 PIE1.TMR1IE = k_uno
  232.                 INTCON.PEIE = k_uno
  233.                
  234.                
  235.                 '-----------------------------------------------------------------------
  236.                 '----------------------------- P A S O   4 -----------------------------
  237.                 '-----------------------------------------------------------------------
  238.                 '--PROCESA LOS PULSOS Y DETERMINA CUAL ES ERRONEO                     --
  239.                 '-----------------------------------------------------------------------
  240.                 While pulso = pulso
  241.                
  242.                         pulso = k_cero
  243.                        
  244.                         Enable
  245.                         ServoIn pin_entrada, pulso
  246.                         Disable
  247.  
  248.                         'SI EL PULSO ES VALIDO LO COPIA EN EL PIN DE SALIDA
  249.                         If pulso > k_pulso_min And pulso < k_pulso_max Then
  250.                                 pin_led_falla = k_cero
  251.                                 contador_glitch = k_cero
  252.                                 ServoOut pin_salida, pulso
  253.                         Else
  254.                                 pin_led_falla = k_uno
  255.                                 contador_glitch = contador_glitch + k_uno
  256.                                
  257.                                 If contador_glitch > k_nro_max_pulsos_erroneos Then
  258.                                         'ESTO ES PARA EVITAR UN DESBORDAMIENTO Y PARA QUE NO SE REINICIE contador_glitch EN 0
  259.                                         contador_glitch = k_nro_max_pulsos_erroneos
  260.                                         ServoOut pin_salida, pulso_de_falla
  261.                                 Endif
  262.                                                
  263.                                 pin_led_falla = k_cero
  264.                         Endif
  265.                 Wend
  266.         Else
  267.                 'SI HUBO FALLA EN LA CALIBRACION CAE ACA Y HACE PARPADEAR EL LED ROJO
  268.                 For i = k_uno To k_cinco
  269.                         pin_led_falla = k_uno
  270.                         WaitMs k_cien
  271.                         pin_led_falla = k_cero
  272.                         WaitMs k_cien
  273.                 Next i
  274.         Endif
  275.  
  276. End                                              
  277.  
  278.  
  279. '-----------------------------------------------------------------------
  280. '----------------------------- P A S O   5 -----------------------------
  281. '-----------------------------------------------------------------------
  282. '--LEE LA CALIBRACION DEL CHIP                                        --
  283. '-----------------------------------------------------------------------
  284. Function carga_calibracion() As Bit
  285.         ASM:        bsf status,rp0 ;bank 1
  286.         ASM:        call 3ffh ;get the cal value
  287.        
  288.         'SOLAMENTE PARA DEPURACION
  289.         'ASM:        movlw 0x3c
  290.         ASM:        movwf osccal ;calibrate
  291.         ASM:        bcf status,rp0 ;bank 0
  292.         carga_calibracion = True
  293.         WaitMs k_diez
  294. End Function                                      
  295.  
  296.  
  297. '-----------------------------------------------------------------------
  298. '----------------------------- P A S O   6 -----------------------------
  299. '-----------------------------------------------------------------------
  300. '--INTERRUPCION POR TIMER1 QUE VERIFICA QUE HAYAN PASADO MAS DE 20MS  --
  301. '--SI DESPUES DE 20MS pulso ESTA EN CERO QUIERE DECIR QUE NO HA LEIDO --
  302. '--NADA Y EJECUTA EL PASO SIGUIENTE                                   --
  303. '-----------------------------------------------------------------------
  304. On Interrupt
  305. Save System
  306.         'CARGA EL TIMER1 CON UN VALOR TAL QUE DESBORDE A LOS 20ms
  307.         TMR1H = v20ms_normal.HB
  308.         TMR1L = v20ms_normal.LB
  309.        
  310.         'LIMPIA EL FLAG QUE SEÑALA QUE SE EJECUTO LA INTERRUPCION
  311.         PIR1.TMR1IF = k_cero
  312.        
  313.         'SI NO HA HABIDO UN PULSO DURANTE 20.2ms LO CONSIDERA GLITCH E INCREMENTA EL CONTADOR DE ESTOS
  314.         If pulso = k_cero And pin_entrada = k_cero And pin_salida = k_cero Then
  315.                 contador_glitch = contador_glitch + k_uno
  316.                
  317.                 'SI EL NUMERO DE PULSOS ERRONEOS O AUSENCIAS DE ESTOS ES
  318.                 'MAYOR AL NRO PERMITODO ASUME LA POSICION DE FALLA A LA SALIDA
  319.                 If contador_glitch > k_nro_max_pulsos_erroneos Then
  320.                         pin_led_falla = k_uno
  321.                         'ESTO ES PARA EVITAR UN DESBORDAMIENTO Y PARA QUE NO SE REINICIE contador_glitch EN 0
  322.                         contador_glitch = k_nro_max_pulsos_erroneos
  323.                         pulso_off = v20ms_normal + (pulso_de_falla * k_diez)
  324.                         ServoOut pin_salida, pulso_de_falla
  325.                         TMR1H = pulso_off.HB
  326.                         TMR1L = pulso_off.LB
  327.                 Endif
  328.         Endif
  329.  
  330. Resume

« Última modificación: 08 de Octubre de 2009, 12:32:34 por hugo777 »

Desconectado valentin

  • PIC10
  • *
  • Mensajes: 10
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #559 en: 29 de Agosto de 2009, 20:25:55 »
Buenas tardes a todos, quisiera por favor me informaran si existe alguna funcion en el micro mediante la cual el microprocesador mantenga el estado de las salidas luego de un corte de energia o de alimentacion del mismo. me explico mejor, tengo en proyecto hacer un sistema para proteccion de mi vehiculo con el cual active la salida del pic para activar un relay que me corte la corriente del vehiculo y por consiguiente se apague, el detalle esta en que si el ladron desconecta la bateria del vehiculo y la conecta nuevamente se desactivara la salida del pic y a su vez el relay de cortacorriente.

Gracias de antemano

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #560 en: 30 de Agosto de 2009, 08:56:22 »
Para restablecer valores después de un corte de alimentación se utiliza la EEProm interna del PIC, también se puede utilizar una externa. Mediante un simple divisor de tensión se monitoriza la alimentación de la batería y, antes que el propio PIC se quede sin alimentación se guardan los valores del estado de los pin en la EEProm. Cuando vuelva la alimentación lo primero que se hará es buscar esos valores en la EEProm interna y, restaurarlos en el puerto de salida que controla los pin. Normalmente los condensadores del circuito de la fuente de alimentación del PIC son suficientes para mantener la alimentación durante el tiempo necesario, hasta que el micro realice esta operación que solo ocupará unos pocos mSeg. Este tiempo en el que el micro sigue operando aun que la alimentación principal este cortada, se puede incrementar aumentando las capacidades de los condensadores de la fuente del micro. Incluso se puede incorporar un diodo en serie con la entrada de nuestro circuito, después del divisor de tensión de muestreo de la alimentación, esto incrementa el efecto tanque de los condensadores.

Hay varios ejemplos en el índice del hilo para restablecer valores anteriores al apagado de circuito, busca en el índice “USO DE LA EEPROM INTERNA DEL PIC”

Desde aquí puedes descargar un articulo con esquema para que te sea más grafico.
http://www.todopic.com.ar/foros/index.php?topic=24123.msg195217#msg195217
« Última modificación: 30 de Agosto de 2009, 09:16:13 por dogflu66 »
Saludos desde Granada, España.

Desconectado 21CURIOSOS

  • PIC12
  • **
  • Mensajes: 56
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #561 en: 28 de Septiembre de 2009, 06:33:47 »
Hola de nuevo


Una pregunta: ¿se puede hacer un reset por software para borrar todas las variables y volver a empezar?, ¿o es mejor poner un pulsador externo y cortar la alimentacion para hacer el reset?. Pues si yo desconecto el mando y lo vuelvo a conectar si que me acepta los cambios del potenciometro


Sal U2

NOTA: He editado el mesaje y eliminado el programa, pues he encontrado bastantes errores y cuando los tenga arreglados lo volvere a colgar, pues con los errores solucionados sigue dando los mimos errores que comentaba

« Última modificación: 05 de Octubre de 2009, 06:42:26 por 21CURIOSOS »

Desconectado hugo777

  • PIC10
  • *
  • Mensajes: 8
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #562 en: 14 de Octubre de 2009, 12:37:09 »
Hola nuevamente,

acá les posteo el esquema del circuito correspondiente al post #558.

Los materiales que use fueron
R1,R2,R3,R4   1KOhm
R5                  6.8KOhm
POT                10KOhm
C1                  100uF
C2                  0.01uF
CI                   SOCALO DIP 8



Descarga PCB


slds Hugo

« Última modificación: 14 de Octubre de 2009, 12:47:50 por hugo777 »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #563 en: 14 de Octubre de 2009, 17:01:42 »
Hola de nuevo


Una pregunta: ¿se puede hacer un reset por software para borrar todas las variables y volver a empezar?, ¿o es mejor poner un pulsador externo y cortar la alimentacion para hacer el reset?. Pues si yo desconecto el mando y lo vuelvo a conectar si que me acepta los cambios del potenciometro


Sal U2

NOTA: He editado el mesaje y eliminado el programa, pues he encontrado bastantes errores y cuando los tenga arreglados lo volvere a colgar, pues con los errores solucionados sigue dando los mimos errores que comentaba



Bueno, borrar unas variables no es hacer un reset, un reset es algo más profundo y complicado. Cuando al micro se le da alimentación o se le provoca un reset por los medios que dispone se genera un forzamiento a una serie de registros internos a tomar unos valores predeterminados que harán que el micro comience a trabajar desde un modo preestablecido que llamaremos “inicio”, es decir desde unos valores programados en fabrica que permiten que toda la circuitería interna se sincronice y el núcleo del pic pueda tomar el mando. De todas formas el reset no borra las variables, recordamos que son posiciones de memoria, las deja igual, tan solo el apagado del micro garantiza un relativo borrado, en realidad tomaran valores aleatorios. La única forma de borrar las variables es igualándolas a un valor determinado por nosotros, normalmente se establece como estándar = 0 para la mayoría de tipos de variables.

¿Cómo hacer un reset en tiempo de ejecución?, pues la verdad nunca me lo he planteado me imagino que en el datasheet tiene que estar explicado algún sistema especial para hacerlo, seguramente escribiendo algún valor determinado en algún registro determinado. De todas formas se puede hacer de una manera u otra, por ejemplo si se activa el Watchdog del micro y este se deja de actualizar a consecuencia de general un evento externo como pulsar tal tecla o interno por ejemplo cuando una variable llega a un valor determinado, pues esta acción provoca un reset generado por nuestra programación, en fin, nuestro código.

Y volviendo al tema directo del reset, desde luego lo mejor es quitar la alimentación o generar una reinicio mediante el pin establecido para ello.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #564 en: 14 de Octubre de 2009, 17:03:56 »
Hola nuevamente,

acá les posteo el esquema del circuito correspondiente al post #558.

Los materiales que use fueron
R1,R2,R3,R4   1KOhm
R5                  6.8KOhm
POT                10KOhm
C1                  100uF
C2                  0.01uF
CI                   SOCALO DIP 8



Descarga PCB


slds Hugo



Permiteme que te felicite por tu trabajo, llevo unas semanas ocupado, pero cuando pueda lo añadire al idice del hilo.
Saludos desde Granada, España.

Desconectado hgp_2611

  • PIC10
  • *
  • Mensajes: 8
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #565 en: 17 de Octubre de 2009, 19:01:14 »
Que tal,exelente tema:D..y comos etrabaja con el PIC SIMULADOR IDE tengo una pregunta al respecto para como programar mi oscilador interno, trabajo con PIC SIMULADOR IDE y en CONFIGURACION DE BITS activo q tabaje con el oscilador interno, y automaticamente me configura los bits (mclr,etc) pero solo activa el oscilador mas no tiene para que yo lo programe a 2,4, u 8 mhz,aunq por default al activarlo este corre a 4mhz. cuando lo cargo con mi programa para programar el pic no me aparece ningun error en la CONFIGURACION DELOS BITS!,. lo que deseo saber escon que comando puedo cambiar el valor paraq ademas de activar mi osciulador interno en CONFIGURE BITS pueda yo cambiar su frecuencia de trabajo...espero algien me pueda ayudar. Gracias

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #566 en: 17 de Octubre de 2009, 22:05:53 »
Con la configuración de bit lo que se hace en general es indicarle unas pautas de trabajo diferentes al micro, es decir,
se pueden activar módulos que normalmente están deshabilitados. En tu caso particular quieres trabajar con el oscilador
interno del pic. Pero esto solo lo habilita como oscilador por defecto, después hay que programarlo modificando un registro
interno desde el programa, esto hará que trabaje con la frecuencia deseada, dentro de las posibles.

Resumiendo hay dos pasos a seguir:

1º Mediante la opción del PSI “CONFIGURACION DE BITS” activamos por defecto el oscilador interno.
2º Mediante la modificación de un registro especial durante el programa especificamos a que frecuencia oscilara.

Por ejemplo para el PIC16F88 se configura para 8Mhz añadiendo la siguiente línea al principio de nuestro programa:
OSCCON = 0x7e 'Se usara reloj interno a 8Mhz

Tienes que mirar en el datasheet de tu micro como se hace para el micro utilizado.
De todas formas normalmente al activar el oscilador interno, si no se le indica nada suele trabajar a 4Mhz por defecto como bien indicaste.
« Última modificación: 17 de Octubre de 2009, 22:20:17 por dogflu66 »
Saludos desde Granada, España.

Desconectado hgp_2611

  • PIC10
  • *
  • Mensajes: 8
COnfigurando OScilador Interno
« Respuesta #567 en: 18 de Octubre de 2009, 15:07:30 »
GRacias pro tu ayuda amigo DogFlu66,ya logre configurar mi oscilador interno, y aca coloco como fue q lo configure por si algien maneja el mismo:


segun la datasheet para el pic 16f887 solo hay q cambiar los bits 4, 5 y 6(contando de derecha a izquerda).

asi:                 

                        bit6          bit5       bit4
Para 1Mhz           1             0           0
Para 2Mhz           1             0           1
Para 4Mhz           1             1           0
Para 8Mhz           1             1           1


Entonces para 1Mhz qda asi:

OSCCON = 0x46  'Se configura reloj interno a 1Mhz %0100-0110

Entonces solo hay q cambiar los bits que corresponden por el valor al que se quiera hacer trabajar al oscilador interno, por cierto se pueden poner en hex como lo puse (OSCCON = 0x46) o en binario como esta en el comentario (%01000110) claro sin el guion que solo puse para poder separar en 4 bits y asi sea mas facil convertirlo y entenderlo del hex.Ademas COmo dijo el amigo Dogflu66 es basico configurar los bits en OpTIOS- COnfigure Bits del Pic simulador ide,y poner q se va a trabajar con el oscilador interno en mi caso es: OSCILLATOR SELECTION: INTOSC (Aclaro,para pic 16F887)

Y por si a algien le interesa para q sirven los otros bits aca esta:

Igual contando de derecha a izquierda:
                                                              bit7                 bit0

                                                                  0 1 0 0 0 1 1 0


Bit 0: SCS: System Clock Select bit
1 = Internal oscillator is used for system clock
0 = Clock source defined by FOSC<2:0> of the CONFIG1 register

 
Como ven yo selecione un "0" ya que por lo que entiendo, con el 0 lo que indico es que no voy a trabajar con el oscilador interno que trae por deafault configurado (q es el de 4mhz) si no que yo lo voy a determinar con los bits que cambio del OSCCON. Aunq tengo la duda de que si sirve asi como yo dije(SI ESTOY MAL ESPERO ME CORRIJAN).

Bit 1 LTS: LFINTOSC Stable bit (Low Frequency – 31 kHz)
1 = LFINTOSC is stable
0 = LFINTOSC is not stable

Aqui yo asigne un "1" ya que le digo que este estable. (aunq en realidad supongo no me sirve en este caso ya que no estoy trabjando con Low Frequency, asiq es lo mismo si pongo un 0)

Bit 2 HTS: HFINTOSC Status bit (High Frequency – 8 MHz to 125 kHz)
1 = HFINTOSC is stable
0 = HFINTOSC is not stable


Seleccione un "1" por que aqui si selecciono una frecuencia estable y como trabajo dentro del rango q indica si debe llevar un 1.


Bit 3 OSTS: Oscillator Start-up Time-out Status bit(1)
1 = Device is running from the external clock defined by FOSC<2:0> of the CONFIG1 register
0 = Device is running from the internal oscillator (HFINTOSC or LFINTOSC)


Creo q aqui selecciono o se configura para trabajar con oscilador externo = 1 o para trabajar con el interno = 0, por eso puse 0

Bit 6-4 IRCF<2:0>: Internal Oscillator Frequency Select bits

ESto ya estaba aclarado al principio.

Bit 7 Unimplemented: Read as ‘0

Como lo indican,debe llevar un 0 siempre,no tiene uso.


BUeno espero mi colaboracion haya servido de algo! AL menos para algien mas que trate de hacer lo mismo q yo. y no haya podido,o no haya entendido como se hace. Colo que un tema en el foro que se llama Comenzando con PIC16F887 http://www.todopic.com.ar/foros/index.php?topic=27913.0 ai tambien coloque la info. SAludos!

Desconectado hugo777

  • PIC10
  • *
  • Mensajes: 8
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #568 en: 20 de Octubre de 2009, 12:14:09 »
Gracias dogflu66, no me quedo solamente ahí, como ya termine el failsafe, ahora estoy trabajando en un acelerador electronico con reversa, para eso estoy trabajando con un 16F628A, que es lo que he encontrado por acá(Chile), aunque preferiría un 12F683 porqué el 16F6... es muy delicado cuando lo tenga terminado lo posteare acá.

Mi idea es implementar los diversos sistemas para un submarino RC, usando para esto PSI.

ESC                                (75% AVANCEaprox.)
FAILSAFE                        (Terminado).
GIROSCOPO DE 2 EJES   (0%)
SENSORES DE AGUA       (0%)
SENSORES DE BATERIAS (0%)


Slds Hugo

Desconectado hgp_2611

  • PIC10
  • *
  • Mensajes: 8
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #569 en: 02 de Noviembre de 2009, 03:37:13 »
Q tal:d..como estamos?..pues solo vuelvo por aqui para consultar si podrian explicarme como usar un vector...uso este compilador, o si hay algun ejemplo q incluya uno para ver como usarlo,mas bien ya se como declararlo pero a la hora de seleccionar cada byte del vector es dodne tengo duda..pues en el manual del pic simulador ide no hay mucha info!..:D