Autor Tema: problemas con 12f629  (Leído 3626 veces)

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

Desconectado ginkgo

  • PIC10
  • *
  • Mensajes: 8
problemas con 12f629
« en: 25 de Marzo de 2007, 15:50:53 »
Bueno, despues de varios intentos me estoy rindiendo.
Alguien podria pasarme o publicar algun ejemplo con oscilador interno que use como salida todas las gp.
Porque tengo 2 problemas y no ya que hacer, uno es que no se vaya el numero de la direccion 0x03ff. Que pongo el codigo ese en asm, pero parece que no va.
Y otro problema es que la salida gp3 y gp4 hagan lo que yo les digo.

Muchas gracias de antemano, espero que alguien pueda ayudarme.

Saludos.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: problemas con 12f629
« Respuesta #1 en: 26 de Marzo de 2007, 00:35:49 »
El PIN 4 o GP3 es solo entrada, echale una hojeada al datasheet del 629
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: problemas con 12f629
« Respuesta #2 en: 26 de Marzo de 2007, 04:06:18 »
Esta es una lista de los registros que tienes que tomar en cuenta cuando quieres usar los GPIO s  :-/
Checa que tienes que desactivar todas las funciones que no utilices en los pines para que puedan ser usados como salida de proposito general.
Tambien como te dijo navaismo no puedes usar GP3 de salida, solo entrada, por lo cual su tris es inservible.
Tienes que desactivar las entradas analogicas en el registro ANSEL, bueno creo que la imagen dira mas que mil palabras  :D, espero sirva nos vemos luego :-/
No SUEÑES tu vida, VIVE tu sueño

Desconectado ginkgo

  • PIC10
  • *
  • Mensajes: 8
Re: problemas con 12f629
« Respuesta #3 en: 26 de Marzo de 2007, 04:30:34 »
Ok, muchas gracias por vuestras respuestas. Pero, y en cuanto a configurar el OSCCAL, exactamente que codigo hay que poner.
Yo estoy usando:

#byte INTCON = 0x0b
#byte OSCCAL = 0x8f
#byte STATUS = 0x03
//#ROM 0x03ff ={0x347C}

..............

#asm
  movlw 0x20
  movwf STATUS
  call 0x03ff
  movwf OSCCAL
#endasm

¿lo estoy haciendo bien? o hay que añadir algo a este código.

SALUDOS

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: problemas con 12f629
« Respuesta #4 en: 26 de Marzo de 2007, 04:54:56 »
No entiendo bien veamos :-/

Tienes un programa en la EEPROM supongo que mandas a llamar con call ???

Bueno olvidando eso cuando usas la directiva #byte lo que haces es darle un nombre a una localidad de memoria por lo cual estarian mal tus definiciaones ya que para este pic

OSCCAL  0x090

Despues debes formar un valor con los bits de configuracion

y utilizar

   movlw 0x(valor que formaste)
   movwf OSCCAL

A otra cosa tambien nos serviria saber para que usas esto ya que la calibracion es solo un ajuste fino para la velocidad del reloj por lo regular no se utiliza, posiblemente lo que tu nececitas es un fuse

#FUSES INTRC_IO

Que configura la oscilacion interna sin salida para que puedas utilizar los pines osc1 y osc2

Espero te sirva sino pues lo resolveremos juntos  :-/
« Última modificación: 26 de Marzo de 2007, 05:15:34 por RiBerZerO »
No SUEÑES tu vida, VIVE tu sueño

Desconectado ginkgo

  • PIC10
  • *
  • Mensajes: 8
Re: problemas con 12f629
« Respuesta #5 en: 26 de Marzo de 2007, 06:08:22 »
Me estas ayudando mucho, porque estaba estancado y parece que me voy enterando y solucionando los problemas.

Pues mi aplicacion debe tener la mayor velocidad de reloj posible. No obstante de momento solo estoy haciendo pruebas, ya veremos que saco.

Despues de tu ultimo post tengo esto:

//#fuses INTRC
#fuses INTRC_IO

.......

#byte INTCON = 0x0b
//#byte OSCCAL = 0x8f
#byte OSCCAL = 0x90
#byte STATUS = 0x03
//#ROM 0x03ff ={0x347C}

..............

#asm
  movlw 0x20
  movwf STATUS
//call 0x03ff
  movlw 0x347C
  movwf OSCCAL
#endasm


No obstante creo que me cambiare al 12f675 o al 12f683 ya que lo mas probable es que use algun conversor analogico digital, que ya preguntare por aqui como va.

saludos. Voy a probar a ver si funciona.

Desconectado ginkgo

  • PIC10
  • *
  • Mensajes: 8
Re: problemas con 12f629
« Respuesta #6 en: 26 de Marzo de 2007, 07:20:13 »
Nada, que no consigo que funcione. Ahora no se me activa ni una sola salida.

Este es el codigo que estoy usando. A ver si alguien ve el error.

*********************************
#include <12f629.h>

#fuses NOWDT,INTRC_IO,NOCPD,NOPROTECT,NOMCLR,NOPUT
#use delay(clock=4000000)
#use FAST_IO(a)

#byte  STATUS=0x03
#byte  INTCON=0x0b
#byte  WPU=0x95
#byte  OSCCAL=0x90

//#ROM 0x3ff={0x3428}

void main()
{

 #asm
 movlw 0x20
 movwf STATUS
 movlw 0x3428
 movwf OSCCAL
 #endasm

 OUTPUT_A(0X01);
 DELAY_MS(500);
 OUTPUT_A(0X00);
}

****************************************

Ya, solo pretendo que se active la salida GP0. Pero ni eso. Alguna sugerencia.
Edito: he probado con 2 pic y en un circuito que esta testado en el que deberia de funcionar perfectamente, y nada.
saludos.
« Última modificación: 26 de Marzo de 2007, 07:30:10 por ginkgo »

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: problemas con 12f629
« Respuesta #7 en: 26 de Marzo de 2007, 15:10:55 »
 :-/ bueno vamos por buen camino  :-/

otros fuses que podemos agregar ya que lo mas seguro es que el problema este en los fuses son:

#FUSES NOBROWNOUT
#NOPUT

Ademas creo que el problema principal es que estas usando FAST_IO(X) la cual no cambia los tris

Affects how the compiler will generate code for input and output instructions that
follow. This directive takes effect until another #use xxxx_IO directive is
encountered. The fast method of doing I/O will cause the compiler to perform I/O
without programming of the direction register. The user must ensure the
direction register is set correctly via set_tris_X(). When linking multiple
compilation units be aware this directive only applies to the current compilation
unit.


Eso es lo dice el manual por lo cual tendras que cambiar TRIS que es el byte de configuracion para el puerto de salida, en este caso como CCS lo maneja como puerto A debes usar set_tris_a(0x00); para activar todos los pines como salida, tambie seria bueno agregar un delay para cuando esta apagado y si quieres que parpade un ciclo infinito asi se podra ver mejor el efecto

Código: C
  1. while(TRUE){
  2.    OUTPUT_A(0X01);
  3.    DELAY_MS(500);
  4.    OUTPUT_A(0X00);
  5.    DELAY_MS(500);
  6. }

y ademas por lo menos al principi te aconsejo olvidar lo de la calibracion del oscilador, segun veo puedes quitar todas las lineas en ensablador que no estan aportando por el momento nada al programa
No SUEÑES tu vida, VIVE tu sueño

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: problemas con 12f629
« Respuesta #8 en: 26 de Marzo de 2007, 21:56:49 »


           
Citar
Alguien podria pasarme o publicar algun ejemplo con oscilador interno que use como salida todas las gp.


                 
Código: CSS
  1. #include <12F675.h>
  2. #fuses NOPROTECT,NOMCLR,NOWDT,INTRC_IO,NOBROWNOUT
  3. #use delay( clock = 4000000)
  4. #use fixed_io(a_outputs=PIN_A0,PIN_A1,PIN_A2,PIN_A4,PIN_A5)
  5. #define osccal 0x90
  6. #define status 0x03
  7.     void main()
  8.     {
  9. #ASM
  10.    bsf status,5
  11.    movlw 35
  12.    movwf osccal
  13.    bcf status,5
  14. #ENDASM
  15.             set_tris_a(0B00001000);
  16.        while (1)
  17.        {
  18.             delay_ms(100);
  19.             output_a(0xFF);
  20.             delay_ms(100);
  21.             output_a(0x00);
  22.        }
  23.     }

   Es para el 12F675 pero igual cambias el #include <12F675.h>  por #include <12F629.h> y debera funcionar


             
Citar
No obstante creo que me cambiare al 12f675 o al 12f683 ya que lo mas probable es que use algun conversor analogico digital, que ya preguntare por aqui como va.


       Pues si, te recomiendo mas el 12F683 y corre hasta 8Mhz con oscilador interno.

            Saludos  :-)

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: problemas con 12f629
« Respuesta #9 en: 27 de Marzo de 2007, 02:59:35 »
 :-/
No entiendo para que cambian el bank y por que lleban el oscilador a la maxima frecuencia, se perdera la exactitud del reloj y no se podra controlar la velocidad exacta.

Me podrian explicar :lol:

de hay en fuera Rulo termino el programa perfecto para esta aplicacion  :D :-/
No SUEÑES tu vida, VIVE tu sueño

Desconectado ginkgo

  • PIC10
  • *
  • Mensajes: 8
Re: problemas con 12f629
« Respuesta #10 en: 27 de Marzo de 2007, 08:34:18 »
Fijaros que cosas pasa.

He probado el programa de Rulo. (muchas gracias Rulo) Y si ponia la libreria del 12f629 no iba, pero usando la libreria del 12f675 si que iba. Eso si, quitando el codigo de asm, que si no tampoco iba. Tambien tengo que decir que solo iba, si ponia el pic en el zocalo con la alimentacion encendida, ya que se pongo primero el pic y luego la alimentacion tampoco va. En resumen, esto es muy raro.

saludos. Ya no se que hacer.


Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: problemas con 12f629
« Respuesta #11 en: 27 de Marzo de 2007, 17:58:11 »
 :-/ Parece que esta listo  :-/

Lo he probado en MPLAB, no tienes que poner la resistencia a positivo de MCLR ya que esta desactivado, el problema estaba en los comparadores, que no se habian desactivado pagina 35 del manual 8)

Bueno aqui esta el programa espero funcione tambien en la realidad por que le he invertido algo de tiempo  :P y no lo puedo probar por que no estoy en casa bueno aqui va

Código: C
  1. #include <12F629.h>
  2.  
  3. #FUSES NOWDT                    //No Watch Dog Timer
  4. #FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
  5. #FUSES NOCPD                    //No EE protection
  6. #FUSES NOPROTECT                //Code not protected from reading
  7. #FUSES NOMCLR                     //Master Clear pin enabled
  8. #FUSES NOPUT                    //No Power Up Timer
  9. #FUSES NOBROWNOUT               //No brownout reset
  10.  
  11. #use delay(clock=4000000)
  12.  
  13. void main(){
  14.   set_tris_a(0B00001000);
  15.   setup_comparator(NC_NC);
  16.   while (TRUE){
  17.    delay_ms(500);
  18.    output_a(0x37);
  19.    delay_ms(500);
  20.    output_a(0x00);      
  21.   }
  22. }

Bueno pruebalo y nos cuentas
No SUEÑES tu vida, VIVE tu sueño

Desconectado ginkgo

  • PIC10
  • *
  • Mensajes: 8
Re: problemas con 12f629
« Respuesta #12 en: 28 de Marzo de 2007, 10:22:24 »
Bueno ya lo he probado, y le pasa lo mismo que al programa de Rulo. Es decir, funciona, pero si pongo el pic cuando la alimentacion esta puesta. SI pongo el pic y luego pongo alimentacion no va. Por lo que me figuro que es un problema hardware. Quizas algo relacionado con el reset inicial. No se, alguna idea.

SALUDOS

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: problemas con 12f629
« Respuesta #13 en: 29 de Marzo de 2007, 04:01:28 »
Bueno por que no intentas poner un capacitor para quitar el ruido uno de 1nF puede estar bien, tambien debes de quitar la resistencia de la patita MCLR del micro ya que en el programa que te di esta desactivado.

Yo creo que el problema tiene que ver con ruido de la fuente, espero se solucione, oye y ya esta funcionando con el 12F629 
o todavia tienes que cambiar la libreria?

 :-/
No SUEÑES tu vida, VIVE tu sueño