Autor Tema: PIC12F675 con Pic Basic del Pic Simulator IDE  (Leído 39570 veces)

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #30 en: 17 de Diciembre de 2008, 20:17:40 »
Nota: Es fudamental proteger la parte inferior de nuestro circuito generador por lo menos con una lamina dieléctrica de cierto grosor para no recibir  descarga eléctrica peligrosas de la red.

.El programa:

Código: QBasic/QuickBASIC
  1. Define CONF_WORD = 0x31c4  'Palabra de configuración Bit (Fuses)
  2. Define CLOCK_FREQUENCY = 4  'Frecuencia del reloj 4 Mhz
  3. '**********************************************************************
  4. 'NOMBRE: 12F675_OSCCAL_TIMER1_RS232_ICSP
  5. 'MICRO: PIC12F675, 4Mhz Interno
  6. 'DESCRIPCION: Circuito para la calibración del oscilador interno OSCCAL
  7. 'FECHA/AUTOR: By COS, 01/08
  8. 'Versión 1.1
  9. 'Lectura de una entrada digital
  10. 'Uso del timer1 como contador
  11. 'Habilitación de un puerto RS232 optoacoplado, por software (simulación)
  12. 'Configuración del hyperterminal del PC: Bit por segundo -> 2400, Bits de datos -> 8,
  13. 'Paridad ->Ninguna, Bits de parada -> 1, Control de flujo -> Ninguno
  14. 'Programación del microcontrolador en placa (ICSP)
  15. '**********************************************************************
  16. Define SEROUT_DELAYUS = 0  'Serout sin demoras entre bytes
  17. '************************ Declaración de variables *************************
  18. DIM db_timer1 AS Word  'Tiempo en uSeg., periodo de la señal 50hz/2
  19. DIM timer1 AS Word  'Contendrá el valor de los registros del timer1
  20. DIM m_timer1 AS Word  'Variable auxiliar
  21. DIM m1_timer1 AS Word  'Variable auxiliar
  22. DIM vosccal AS Byte  'Valor a programar en el registro OSCCAL
  23. DIM m_vosccal AS Byte  'Variable auxiliar
  24. DIM flag AS Byte  'Variable auxiliar
  25. '******************* Asignación de valores a las variables *******************
  26. db_timer1 = 10000  'Periodo/2
  27. vosccal = 0  'Valor inicial de OSCCAL
  28. flag = 0  'según su valor cambia el flujo del programa
  29. '**************** Configuración módulos generales (E/S) *******************
  30. CMCON = 0x07  'comparator off
  31. VRCON = 0x00  'vref off, comparador
  32. ANSEL = %00000000  'pin digitales
  33. OSCCAL = vosccal  '91  'calibración del oscilador interno
  34. TRISIO = 0xff  'tri-state pins, entradas
  35. TRISIO.4 = 0  'GP4 pin, como salida, Tx puerto serie
  36. TRISIO.5 = 1  'GP5 pin, como entrada
  37. '********************* Configuración del Timer1 **************************
  38. T1CON.TMR1CS = 0  'bit de selección de reloj para el timer1, interno Fosc/4
  39. T1CON.T1CKPS0 = 0  'bit de selección del prescaler para el reloj del timer1
  40. T1CON.T1CKPS1 = 0  'bit de selección del prescaler para el reloj del timer1
  41. T1CON.TMR1ON = 0  'parado el contador del TMR1
  42. PIE1.TMR1IE = 0  'desactiva las interrupciones del timer1
  43. '--------------------------------------Main Programa ------------------------------
  44. WaitMs 5000  'espera 5Seg.
  45. main:  'Rutina del programa principal (inicio)
  46.         IF GPIO.2 = 0 THEN GOSUB microchip_osccal  'Si pulsa tecla salto y retorno
  47.         TMR1H = 0x00  'borro el registro alto del timer1
  48.         TMR1L = 0x00  'borro el registro bajo del timer1
  49.         'Sincronizamos la señal externa con la rutina de lectura del programa___
  50.         WHILE GPIO.5 = 1  'mientras GPIO.5 este en estado alto no hago nada
  51.         WEND  'Acota el bucle While, anterior
  52.         WHILE GPIO.5 = 0  'mientras GPIO.5 este en estado bajo no hago nada
  53.         WEND  'Acota el bucle While, anterior
  54.         '_______________________________________________________________
  55.         T1CON.TMR1ON = 1  'activa el contador del TMR1
  56.         WHILE GPIO.5 = 1  'mientras GPIO.5 esta en estado alto no hacemos nada.
  57.         WEND  'Acota el bucle While, anterior
  58.         T1CON.TMR1ON = 0  'para el contador del TMR1
  59.         timer1.HB = TMR1H  'Carga byte alto con valor alto del registro del timer1
  60.         timer1.LB = TMR1L  'Carga byte bajo con valor byte low del reg. timer1
  61.         GOSUB ser_out  'Salto con retorno a la subrutina ser_out
  62.         IF flag > 1 THEN WaitMs 1000  'Lento prog. cuando conoce valor OSCCAL
  63.         IF flag < 2 THEN  'Permite paso 2 del calculo de OSCCAL
  64.                 IF timer1 > db_timer1 THEN
  65.                         flag = 2  'Indica que termina el paso 2
  66.                         timer1 = timer1 - db_timer1  'Se almacena el error del timer1
  67.                         IF timer1 > m_timer1 THEN vosccal = vosccal - 1  'comprar. errores últimos
  68.                         IF timer1 <= m_timer1 THEN vosccal = vosccal  'comparan errores últimos
  69.                 Endif  'Acota if, según tabulado
  70.         Endif  'Acota if, según tabulado
  71.         IF flag < 1 THEN  'Paso uno del calculo de OSCCAL
  72.                 IF timer1 < db_timer1 THEN  'Si se da la condición
  73.                         vosccal = vosccal + 1  'incrementamos vosccal
  74.                         m_timer1 = db_timer1 - timer1  'Se almacena el error del timer1
  75.                 Endif  'Acota if, según tabulado
  76.         Endif  'Acota if, según tabulado
  77.         OSCCAL = vosccal  'Escribe el valor de la variable vosccal en el registro OSCCAL
  78. GOTO main  'Redirecciona el flujo del programa al inicio
  79. END  'Fin del programa                            
  80. '****************************************************************************
  81. ser_out:  'Simulación de puerto serie por software
  82.         'Envía los datos al puerto serie (literales, variables y carácter de control)
  83.         Serout GPIO.4, 2400, CrLf, "Timer1: ", #timer1, " OSCCAL: ", #vosccal, CrLf
  84.         'CrLf, Avance de línea y retorno de carro para el hyperterminal del PC
  85. RETURN  'Acota la rutina y retorna después del salto
  86. microchip_osccal:  'Carga OSCCAL con el valor de microchip
  87.         ASM:        bsf status,rp0
  88.         ASM:        CALL 3ffh
  89.         ASM:        movwf vosccal
  90.         ASM:        bcf status,rp0
  91.         OSCCAL = vosccal  'Carga el registro con el valor de vosccal
  92.         flag = 2  'Indica que se encontró el valor de OSCCAL
  93. RETURN  'Acota la rutina y retorna después del salto
  94. END  'Fin de subrutinas
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #31 en: 17 de Diciembre de 2008, 20:18:41 »
Con el programa anterior obtendremos los siguientes resultados:

El programa va midiendo el ancho de pulso previamente conocido de la señal de onda cuadrada, a la vez  que se producen incrementos de una unidad del registro OSCCAL  partiendo este desde de cero. Su valor es enviado por el puerto serie en base decimal hasta el hyperterminal u otro programa terminal serie que dispongamos. Al principio lo más normal es no divisar ningún dato hasta que el error entre dentro del margen de tolerancia permitido de la UAR del ordenador para 2400Baudios. El valor terminará parándose en el más próximo, muy por de bajo del 1% aproximadamente un 0.15%. Si pulsamos la tecla (para que la tecla sea leída correctamente por el PIC, previamente la resistencia ajustable estará a su máximo recorrido en sentido del movimiento de las agujas del reloj) del mini entrenador (MnEBasic) veremos en la pantalla del PC el valor para OSCCAL que nos suministra el fabricante, siempre y cuando no lo perdiéramos previamente.
« Última modificación: 17 de Diciembre de 2008, 20:22:56 por dogflu66 »
Saludos desde Granada, España.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #32 en: 19 de Diciembre de 2008, 03:50:44 »
Gracias por tomaar la iniciativa y tomarte tiempo para que todos sigamos aprendiendo , felicitaciones por
que esta muy claro todo lo que vas exponiendo y muy didactico ..gracias. :lol:

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #33 en: 20 de Diciembre de 2008, 23:11:39 »
Gracias Chrisbaf

Dejo el enlace al video en el que se ve los resultados del programa anterior.
Al principio la mini entrenadora esta bloqueada por la señal Vpp que nos genera el programador, cuando se desactiva esta tensión la placa mini entrenadora se pone a trabajar y podemos ver un tiempo en el que el hyperterminal no muestra nada, esto es porque los valores que se van cargando en el registro OSCCAL todavía no permiten que el reloj interno trabaje dentro del margen de tolerancia de la UAR del PC. A los pocos segundos ya podemos ver información en la pantalla mostrándonos valores validos para el registro. Podremos ver que al final queda estabilizado en el mejor valor, en este caso 84 en decimal (54h).

« Última modificación: 20 de Mayo de 2010, 20:16:28 por dogflu66 »
Saludos desde Granada, España.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #34 en: 13 de Enero de 2009, 00:30:01 »
no se si continuaras  con proyectos para este micro.. saludos

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #35 en: 13 de Enero de 2009, 16:24:42 »
no se si continuaras  con proyectos para este micro.. saludos

Por supuesto que voy a seguir el tema, tengo ya varios artículos medio armados a ver si puedo dedicarle un poco de tiempo. Gracias por el interés.
Saludos desde Granada, España.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #36 en: 13 de Enero de 2009, 17:34:19 »
gracias por tu pronta respuesta :o

Desconectado willie_rosario_salsa

  • PIC12
  • **
  • Mensajes: 75
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #37 en: 13 de Febrero de 2009, 12:42:17 »
Hola estimado dogflu
Ante todo gracias por tus interesantes aportes, de verdad quiero que me ayudes con una duda que tengo, es la primera vez que tranbajo con el 12F675 y aque por cuestiones de diseño he tenido que optimizar espacio y me vi obligado a utilizar el baby pic..
Las lineas de configuración creo que están bien ya que en Proteus esto va de maravilla como lo he programado y en realidad es la primera vez que tengo problemas con 1 pic, debe ser porque es la primera vez que lo uso y es un poco diferente a los 877..

La configuración es la siguiente:
Setear
               BCF            RP_0
      BCF      RP_1
            clrf            GPIO       ;Inicio GPIO
      movlw    07h               ;Set GP<2:0> to
      movwf    CMCON       ;digital IO
      BSF            RP_0              ;bank_1
      clrf            ANSEL       ;Digital I/O
      movlw    b'00001000'       ;
      movwf    TRISIO       ;set solo el mclr ya que el resto las necesito como salidas
        movlw   b'11001111'
      movwf   OPTION_REG   ;programación para WDT y pull ups
      call            3FFh               ;Agarra el valor para
      movwf    OSCCAL       ;Calibrar el oscilador interno (segun las notas de este pic)
               BCF            RP_0              ;bank_0

De veras este programa lo he analizado :ni) hasta la saciedad y lo he configurado de muchas maneras, inclusive quitando el osc int y colocando el RC, pero nada.. No se si sea 1 detalle que se me escape o algo así..

Agradeceré millón sus valiosísimos comentarios..
Con SaLsa,


 
"Es chévere ser grande, pero... Más grande es ser chévere." --- Héctor Lavoe.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #38 en: 13 de Febrero de 2009, 17:59:24 »
disculpa la pregunta, que tiene que hacer tu programa,pues solo miro el principio.

Desconectado willie_rosario_salsa

  • PIC12
  • **
  • Mensajes: 75
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #39 en: 13 de Febrero de 2009, 18:29:56 »
En realidad estoy haciendo un reseteador, el cual arranca con una lampara de encendido (bsf  lamp_on) que no es mas que un indicador que nos dice si esta vivo el pic y luego hace la rutina normal que funciona correctamente en el simulador(Reset general de una red de pics) pero el problema es que no enciende, el bit de configuración que estoy metiendo es el 3F84 al grabar el pic pero no me funca esa vaina..

Alguna sugerencia especial para este pic agradecera su ayuda!!!!!!!! :-/
"Es chévere ser grande, pero... Más grande es ser chévere." --- Héctor Lavoe.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #40 en: 18 de Febrero de 2009, 21:27:10 »
El código maquina no es precisamente mi lenguaje favorito, pero le estoy echando un vistazo a ver. Es que estos últimos días voy con muy poco tiempo.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #41 en: 06 de Marzo de 2009, 20:07:23 »
Hola estimado dogflu
Ante todo gracias por tus interesantes aportes, de verdad quiero que me ayudes con una duda que tengo, es la primera vez que tranbajo con el 12F675 y aque por cuestiones de diseño he tenido que optimizar espacio y me vi obligado a utilizar el baby pic..
Las lineas de configuración creo que están bien ya que en Proteus esto va de maravilla como lo he programado y en realidad es la primera vez que tengo problemas con 1 pic, debe ser porque es la primera vez que lo uso y es un poco diferente a los 877..

La configuración es la siguiente:
Setear
               BCF            RP_0
      BCF      RP_1
            clrf            GPIO       ;Inicio GPIO
      movlw    07h               ;Set GP<2:0> to
      movwf    CMCON       ;digital IO
      BSF            RP_0              ;bank_1
      clrf            ANSEL       ;Digital I/O
      movlw    b'00001000'       ;
      movwf    TRISIO       ;set solo el mclr ya que el resto las necesito como salidas
        movlw   b'11001111'
      movwf   OPTION_REG   ;programación para WDT y pull ups
      call            3FFh               ;Agarra el valor para
      movwf    OSCCAL       ;Calibrar el oscilador interno (segun las notas de este pic)
               BCF            RP_0              ;bank_0

De veras este programa lo he analizado :ni) hasta la saciedad y lo he configurado de muchas maneras, inclusive quitando el osc int y colocando el RC, pero nada.. No se si sea 1 detalle que se me escape o algo así..

Agradeceré millón sus valiosísimos comentarios..
Con SaLsa,


 

A ver si te sirve algo de esto:

; oscilador interno a 4Mhz
   BSF STATUS,RP0
   MOVLW 0x38
   MOVWF 0x10
; vref off (power off the comparator voltage)
   CLRF 0x19
; Pin digitales
   CLRF 0x1F
; comparator off
   BCF STATUS,RP0
   MOVLW 0x07
   MOVWF 0x19
; Enable PORT pullups
   BSF STATUS,RP0
   BCF 0x01,7
; tri-state pins, are inputs
   MOVLW 0xFF
   MOVWF 0x05
; GP4 pin, is output
   BCF 0x05,4
; GP5 PIN, is output
   BCF 0x05,5
; maniobra invertida, activa a cero
   BCF STATUS,RP0
   BSF 0x05,5
; GPIO.4 = 0 'Uart por soft
   BCF 0x05,4
Saludos desde Granada, España.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #42 en: 14 de Marzo de 2009, 15:13:57 »
amigo dogflu hace tiempo, mucho tiempo, que no te pregunto nada, y ya lo echaba de menos  8) 8)

nunca he llegado a saber con certeza la influencia del bandgap y nunca encontré información que me lo aclarara lo suficiente. según el datasheet son bits preprogramados de fábrica y no se deben alterar, y también se dice en el datasheet que sirven como configuración para BOD y POR... y ahí me quedo.

y la pregunta:
- leyendo un 12F675 'virgen' con el GTP-USB+ y Winpic800 me da un valor de bandgap '00 = Lowest'
- configuro el registro Configuration Word con las mismas opciones que usas y me da un valor de 0x01C4 ( %00000111000100 )

sin embargo, y creo que lo hace siempre, PSI escribe el valor 0x31C4 en este registro con las mismas opciones seleccionadas, correspondiente a un valor de bandgap '11 = Highest' ( %11000111000100 ) y me gustaría saber que influencia puede tener y porqué lo hace así

GTP-USB+ y Winpic800 se encargan de guardar este valor (al igual que el valor del oscilador local) para restaurarlos posteriormente al PIC cuando se graba.

y eso es todo y no es poco.

un saludo

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #43 en: 18 de Marzo de 2009, 20:56:41 »
Perdona Joaquin, pero di como leídos los hilos el otro dia sin querer y no me di cuenta que estabas por aqui.
La verdad es que no me he planteado nada de esto, pero voy a ver que averiguo.
Saludos desde Granada, España.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #44 en: 19 de Marzo de 2009, 14:52:22 »
no te preocupes...

es como una espina que tengo clavada y no doy con la información que me ayude a quitarla  8) 8)

un cordial saludo


 

anything