TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: RASS en 10 de Octubre de 2006, 13:15:58

Título: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: RASS en 10 de Octubre de 2006, 13:15:58
 8) 8) 8) 8)
Hola
Bueno soy nuevo en esto asi que por eso necesito su ayuda por favor, les cuento tengo un PIC 16f628 y necesito ingresarle un programa que realize lo siguiente:

- Que tenga cuatro entradas para un codigo binario desde 0000 hasta 1111
- Que tenga a su salida dos displey de 7 segmentos que muestren lo siguiente
          para 0000 mostrar -2
          para 0001 mostrar -1
          para 0010 mostrar  1
          para 0011 mostrar  2
          para 0100 mostrar  3
          para 0101 mostrar  4
          para 0110 mostrar  5
          para 0111 mostrar  6
          para 1000 mostrar  7
          para 1001 mostrar  8
          para 1010 mostrar  9
          para 1011 mostrar 10
          para 1100 mostrar 11
          para 1101 mostrar 12
          para 1110 mostrar 13
          para 1111 mostrar 14

 Es como los digitos de un ascensor, tengo el programador y el programa para grabar el PIC pero no tengo donde crear el programa y si lo tubiera no se como se hace por eso solicito su ayuda de como programar el PIC y si a la vez aprendo a realizar programas mucho mejor. :D
 Si me comentan como puedo empezar con el programa, sugerencias, con que programa puedo  programarlo, etc.  :-/

 [\u]  :-/  Muchas Gracias  :-/ [/u]
 



Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: maunix en 10 de Octubre de 2006, 13:26:57
RASS aquí se viene en gral a consultar sobre cómo hacer una tarea en específica o a buscar consejos pero no a resolver la tarea.

Te propongo que nos digas "qué sabes tu del tema" así te podremos ir guiando a una posible solución, pero tendrás que poner esfuerzo de tu parte.

Saludos
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: RASS en 10 de Octubre de 2006, 14:05:00
Mira lo que sé es lo básico, en cuanto a los PIC los estoy conociendo hace muy poco y me estoy embarcando con un compañero de trabajo en hacer el proyecto mostrado y empesamos con el PIC 16f628.
Lo que no tenemos idea es en programar, y ese es mi proyecto propuesto para que me enseñen por favor, además si me ayudas o recomiendas un software para programar te lo agradeceria mucho.
Bueno tambien te cuento que somos técnicos superiores en electrónica y que tenemos el grabador de pic y el IC-Prog funcionando OK.  :-)
por favor si tu puedes ayudarnos a introducirnos en este fantástico mundo de la electrónica te estaremos muy agradesidos.
Podemos empezar con lo básico.  :-/ que me recomiendas??????? :-/
Gracias

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: navaismo en 10 de Octubre de 2006, 14:12:33
Hola pues podrias decidir entre usar C, Picbasic Pro. MikroBasic o Assembler, una vez que decidas que lenguaje de programacion usar tendrias que conseguir la herramienta de compilacion (MplaB, CCS, HItech, PBP, MKB, PROTON, segun elijas el lenguaje), Despues te recomiendo que leas los manuales y empieces por ejemplos sencillos para que te familiarices con ese lenguaje y sus trucos. Tambien te puedes dar una vuelta por cada subforo del lenguaje que elijas y asi amplies tus ideas, una vez que ya estas mas familiarizado con esto puedes comenzar tu programa postear parte del codigo donde tengas error y con gusto te ayudaremos.


Yo comence asi, uso PBP(PicBasic Pro) ya que es el mas sencillo y es un lenguaje de alto nivel nada que ver con assembler, tiene ventajas y desventajas como todo, y mi primer programa fue hacer andar un LCD sin conocer nada de nada de los micros. Aun sigo aprendiendo mucho pero lo mas importante es que le trabajo duro lo hagas tu.

Saludos espero te sirva de algo
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: maunix en 10 de Octubre de 2006, 15:22:08
Mira lo que sé es lo básico, en cuanto a los PIC los estoy conociendo hace muy poco y me estoy embarcando con un compañero de trabajo en hacer el proyecto mostrado y empesamos con el PIC 16f628.
Lo que no tenemos idea es en programar, y ese es mi proyecto propuesto para que me enseñen por favor, además si me ayudas o recomiendas un software para programar te lo agradeceria mucho.
Bueno tambien te cuento que somos técnicos superiores en electrónica y que tenemos el grabador de pic y el IC-Prog funcionando OK.  :-)
por favor si tu puedes ayudarnos a introducirnos en este fantástico mundo de la electrónica te estaremos muy agradesidos.
Podemos empezar con lo básico.  :-/ que me recomiendas??????? :-/
Gracias


Para comenzar con lo básico les sugiero que se pasen por aquí,

Si prefieren programar en ensamblador (les ayudará a comprender como funciona un pic).

Ejemplos en Assembler PIC16F84A (http://www.todopic.com.ar/foros/index.php?topic=12345.0)

Si quieren programar en C
Ejemplitos en C para 16F648A (http://www.todopic.com.ar/foros/index.php?topic=4530.0)


Algo bastante más avanzado, también en C
Ejemplitos para 16F876A (http://www.todopic.com.ar/foros/index.php?topic=4531.0)
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: microcom en 10 de Octubre de 2006, 21:00:31
caballero mira a ver si pudes hacer este.

LO DEMAS........................................................

#INCLUDE<P16F84A.INC>
   
;DECLARACION DE VARIABLES
MEMORIA   EQU   20
REG1   EQU   21
REG2   EQU   22
REG3   EQU   23
   ORG   00
   GOTO   INICIO




TABLA   RETURN
   ADDWF   PCL,1
   RETLW   B'11000000'  ;ANODO COMUN
   RETLW   B'11111001'
   RETLW   B'10100100'
   RETLW   B'10110000'
   RETLW   B'10011001'
   RETLW   B'10010010'
   RETLW   B'10000010'
   RETLW   B'11111000'
   RETLW   B'10000000'
   RETLW   B'10011000'
   RETLW   B'10111111'
INICIO   
   BSF   STATUS,5
   MOVLW   H'00'
   MOVWF   PORTB
   MOVLW      B'01111'
                MOVWF     PORTA
   BCF   STATUS,5
   CLRF   PORTB
   CLRF        PORTA
GER   
   MOVF   PORTA,0
   XORLW   .0
   BTFSC    STATUS,2
   GOTO      NEGATINO_2
   MOVF   PORTA,0
   XORLW   .1
   BTFSC   STATUS,2
   GOTO    NEGATIVO_1   
   MOVF   PORTA,0
   XORLW   .2
   BTFSC   STATUS,2 
   GOTO   UNO
   MOVF   PORTA,0
   XORLW   .3
   BTFSC   STATUS,2
   GOTO    D0S
   MOVF   PORTA,0
   XORLW   .4
   BTFSC   STATUS,2
   GOTO     TRES.
 RR              GOTO      RR

NEGATIVO_2 
               MOVLW    .2               ; -2
               CALL TABLA
   BCF   PORTA,4
   MOVWF   PORTB
   CALL   RETARDO
   BSF   PORTA,4
   MOVLW   .10
   CALL   TABLA
   MOVWF   PORTB
   BCF   PORTB,7
   CALL   RETARDO
   BSF   PORTB,7
   GOTO        GER

SALUDOS.

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: RASS en 12 de Octubre de 2006, 12:41:31
Gracias amigos por preocuparse.

Estoy intentando con sus ejemplos si tienes mas pues bien recibidos seran.

  :-/  chaito   :-/
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 13 de Octubre de 2006, 15:23:04
Hola! Un saludo a todo el foro.

 Dispongo de un 16F628 y tengo entnedido que es similar al f84A, con el f84 voy haciendo
cositas con leds y poco mas, pero tengo entnedido que el f628 tiene mas memoria y por lo
tanto mas posibilidades.

 Quiero hacer alguna practica con ensamblador que es el lenguaje que siempre he usado y
ya no me da tiempo a aprender otro de mas nivel (ya saben, las neuronas se desgantan).
Pensé en hacer un control de un motor papa que tengo de una vieja impresora pero creo
que este no es el hilo y por ese motivo he pensado en hacer cualquier ejercicio para tomar
experiencia con este bicho y ver los problemas que puede presentar al programarlo, segun
he leido por ahí, parece que hay que decirle que pase a digital o no es así.

 De todas maneras, estoy dispuesto a realizar algun proyecto que me guste, gracias por
vuestro tiempo y las esplicaciones que me deis.

______>
Gracias amigos por preocuparse.

Estoy intentando con sus ejemplos si tienes mas pues bien recibidos seran.

  :-/  chaito   :-/
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: vszener en 13 de Octubre de 2006, 15:56:45
Si lo que quieres es practicar en asm, en el subforo de ASM encontrarás varios post donde hay programas de ejemplo:
Ejemplos de Asembler PIC16F628A - PIC16F648A (http://www.todopic.com.ar/foros/index.php?topic=12659.0)
Ejemplos en Assembler - PIC16F876 (http://www.todopic.com.ar/foros/index.php?topic=12918.0)
Ejemplos en Asembler PIC16F84A (http://www.todopic.com.ar/foros/index.php?topic=12345.0)


Suerte!!! :wink:
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 13 de Octubre de 2006, 20:03:23
O ca, vszener, gracias por los links, pero no es exactamente ejercicios por hacer algo, mas bien lo que
pretendo es realizar algo como un contador o un controlador de pap por ejemplo, con el f628 y en el
ensamblador, para aprender a usar este bicho com una ayuda u orientacion. Comprendes.

 Gracias por responder.

Si lo que quieres es practicar en asm, en el subforo de ASM encontrarás varios post donde hay programas de ejemplo:
Ejemplos de Asembler PIC16F628A - PIC16F648A (http://www.todopic.com.ar/foros/index.php?topic=12659.0)
Ejemplos en Assembler - PIC16F876 (http://www.todopic.com.ar/foros/index.php?topic=12918.0)
Ejemplos en Asembler PIC16F84A (http://www.todopic.com.ar/foros/index.php?topic=12345.0)


Suerte!!! :wink:
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: lord-neo en 19 de Octubre de 2006, 14:33:36
MI ESTIMADO RASS.......... YO AL IGUAL QUE TU ME ARME MI GRABADOR DE PIC CON UN COMPAÑERO DE TRABAJO Y DESPUES DE SUFRIR MUCHO CON LA FALLA 0000H  :(NOS FUNCIONO :-/........
AHORA SUFRIMOS PORQUE NO SABEMOS COMO DISEÑAR UN PROGRAMA BASICO :shock:,,,YAQUE LOS QUE HEMOS BAJADO AN FUNSIONADO ,PERO NO ES LA IDEA ,,,,,PORFAVOR SI ALGUIEN NOS PUEDE GUIARCON UN PROGRAMA FASIL NOSE ENSENDER UN LED O NOS PUEDA ESPLICAR COMO EMPESAR,,YAQUE SOMOS AUTODIDACTAS Y NO CONTAMOS CON ESTUDIOS MUY AVANSADOS PARA MANEJARNOS EN ESTO PERO ESTAN TODAS LAS GANAS............
SI NOS AYUDAN ARAN FELISES A MUCHAS PERSONAS COMO YO O RASS DE ANTE MANO MUCHAS GRACIASSSSS :mrgreen: :mrgreen: :mrgreen:
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: vszener en 19 de Octubre de 2006, 14:44:13
Lord-neo, si lees bien, en mi post (http://www.todopic.com.ar/foros/index.php?topic=14249.msg86282#msg86282) te pongo link's donde hay ejemplos básicos y no tan básicos de programar un pic, ya sea en asm o en c

PD: A ser posible intenta escribir mejor, para que se entienda bien  :mrgreen:


Suerte!!! :wink:
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: microcom en 19 de Octubre de 2006, 16:51:08
caballero rebuscate unas  lineas en esambler y te dire como vas.

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: AABHGA en 20 de Octubre de 2006, 02:09:09
Vuelve y juega como he visto en muchos otros temas durante el poco tiempo que llevo en este foro.

Antes de iniciarte en este mundo, se necesitan 3 cosas de caracter OBLIGATORIO que las mencionaré a continuación.

Un programador: Ya sea uno comprado por la fábrica de los micros (que es lo recomendado) o uno armado de los tantos que hay en este foro y en muchas otras webs.

Un lenguaje de programacion: Este es uno de los mayores fallos de todos los que se quieren iniciar en este mundo y no se toman la mas mínima molestia de averiguar de que va el tema. Con todos los lenguajes se puede hacer lo mismo, pero hay muchas diferencias sobre todo en la sintaxis del programa, así que averiguate cuales son y mira cual te parece mas facil de aprender y te gusta mas, si tienes bases de alguno ese es la mejor elección, en mi caso, de Assembler no tengo ni idea, de C tengo conocimientos pero no me gusta ni poquito y el mejor de todos para mi es Basic el cual use durante 3 años haciendo programas en el PC, así que opte usar este lenguaje con el compilador Pic Basic Pro (Ten en cuenta que con un mismo lenguaje hay muchas diferencias dependiendo el compilador).

Conciencia de que primero se gatea antes de correr (ESTA ES LA MÁS IMPORTANTE DE TODAS): No lleguen con la idea de mostrar cosas en LCD, ni comunicarse con el PC o con otro dispositivo, ni lecturas análogas y ese cuento, vean los programas en los PICS como "si fuesen la evolución de las computadoras, Comenzando desde luces que se prenden y apagan, pasando por suiches y esas cosas, hasta llegar al día de hoy donde las posibilidades son infinitas" no piensen en hacer un auto teledirigido sin siquiera saber encender un led.

Despues que cumplas estos 3 requisitos, planteate una idea de progreso, y trabaja con 1 solo programa, busca algo de ayuda en los códigos que hay puestos en el foro (claro en los simples, no te vayas a mirar en robótica el programa del Sentinel y/ó los otros proyectos que hay ahí), y mira la ayuda del lenguaje de programación que todos los editores la traen buscando cada comando y la explicación de que es lo que hace.  Si durante este proceso algo no entiendes o no te va el programa, te tira error o cualquier cosa no dudes en preguntarla, que para eso están los conocedores (no me incluyo por que soy un simple novato) que hay en este foro, para resolver dudas, no para enseñarte y tomar las decisiones por ti.

Digo usar un solo programa y pongo por ej mi caso: Inicie haciendo que un led se prendiera y permaneciese así, luego agregué un suiche que cuando lo presionaba prendía/apagaba el led, luego puse un segundo que ponía el led a titilar, luego un tercero con el que cambiaba la frecuencia de encendido/apagado del led, luego lo mejoré haciendo que solo funcionara si el led estaba titilando, luego puse un cuarto suiche, que tambien cambiaba la frecuencia, uno la disminuía y el otro la aumentaba, así obtenía mayor control, luego hize otras mejoras mas que no me vienen a la mente, hasta que decidí que había terminado con el aprendizaje de gatear y quería intentar ponerme en pie.

PD: Para aquellos que se piensan iniciar con Basic, usando el compilador PIC Basic Pro, les recomiendo esta web, que con esa duré 2 meses estudiando antes de preguntar por aca Manual Pic Basic Pro en Castellano (http://www.todopic.com.ar/pbp_sp.html)
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 23 de Noviembre de 2006, 18:43:01


Hola! Saludos de nuevo a todos.

 He dilatado la consulta porque estuve de viaje de placer y lo primero es lo primero.
A lo que iba, he realizado algunos ejercicios, pero claro con el F84A y en ensamblador,
lo que me interesa ahora, es empezar a usar el F628, porque no veo el momento de poder
hacer un programa en ensamblador que he estado pensando.

 Es hacer un control de motor sencillo, nada extra, simplemente pulsar un botón y que gire
en un sentido y pulsando otro botón que lo haga en el otro sentido. Dispongo de un motor
de una vieja impresora y funciona bien. Estuve identificando los bobinados y anoté los
resultados, obteniendo que, tiene dos devanados con toma central, los pasos que tiene si no
me equivoqué son 24, pensé esto es ideal, el resto tiene que ser fácil.
 
 Entonces donde está el problema, os preguntareis. Bueno no se si son cosas mías o hay algo
de cierto, pero tengo entendido que antes de empezar con las habituales instrucciones hay que
indicar al dispositivo que queremos trabajar en digital o analógico y esto es lo que me está
poniendo, no se si me explico.

 En pocas palabras, alguno (estoy seguro) puede mostrarme a hacer una cabecera para este
bicho (F628). Otro problema que tengo es que como en mis tiempos de estudiante el inglés era
algo como muy lejano y que a nosotros que más no daba lo que dijeran los ingleses, ya veis
nada más lejos de la realidad, confieso.

 Quedo agradecido por el interés y tiempo dedicados por los maestros.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: Manofwar en 24 de Noviembre de 2006, 05:21:10
Hola Toc_toc:

Para desconectar los comparadores y que los pines sean sólo digitales, al inicio de tu programa debes poner lo siguiente:

   movlw    7
   movwf    CMCON ; CMCON=7 comparadores desconectados

Un saludo
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 24 de Noviembre de 2006, 07:52:24

 Gracias Manofwar, por responder.

 Entre mi consulta y tu respuesta, me dio por hacer una traduccion de las notas del f628 y
realmente me impresiona lo que obtuve, claro que uno ha de 'retocar' los pequeños
disparates que origina una traduccion tecnica, ya se sabe, finalmente pude hacerme una
idea de como se comporta este f628, creo haberlo entendido.

 De todos modos repito, GRACIAS por tu ayuda. Espero poder contribuir en alguna ocasion
en el foro.

 La verdad es que, hay que adaptar todo a los nuevos dispositivos para no perderse los
avances de la tecnologia.

 Voy a empezar el listado que comenté en la anterior nota.

 Saludos a todos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 27 de Noviembre de 2006, 17:36:32

  Hola! Una nueva consulta. A ver si esto es correcto. Porque, al ensamblar
 no muestra errores. Sin embargo, no me muestra los cambios en los puertos A y B

;----------------------------------------------------------------------------
; fecha: 26-11-2006
; Esto solo es una prueba para empezar con el f628

   LIST   P=16F628          ; usar PIC 16F628A
   #include <p16f628.inc>
   __CONFIG   h'3F50'
   errorlevel      -302      ; Eliminar banco atencion

;---- Declarar equs

status      equ   h'0003'
option_reg   equ   h'0001'
trisa      equ   h'0005'   ;
trisb      equ   h'0006' ;
porta      equ   h'0005'   ; define puerto A
portb      equ   h'0006'   ; define puerto B

#define banco0   BCF,RP0   ;
#define banco1   BSF,RP1   ;

   ORG   0x00

   MOVLW   b'00000111'   ; comparadores desactivados,
   MOVWF   CMCON      ; I/O digitales.

   banco1         ; activa la pagina 1
   MOVLW 0x00      ;
   MOVWF 0x06      ; puerto a y b todos salidaS
   banco0         ; volvemos a la pagina 0

;   MOVLW   b'00000111'   ; comparadores desactivados,
;   MOVWF   CMCON      ; I/O digitales.

   CLRF   portb      ; ponemos a 0 portb

INI   BSF   portb,0      ; pone a 1 RB0
   MOVLW   0xF
   MOVWF   portb
   GOTO   INI
   end
   

 Donde está el error, he probado en diferentes puntos el poner
la declaración de los comparadores y ni flores.
 Llevo el finde sin aclararme.

 Gracias anticipadas.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 27 de Noviembre de 2006, 19:29:25
Hola.

#define banco0   BCF,RP0   ;
#define banco1   BSF,RP1   ;

Acabas de inventar algo nuevo poniendo eso.No funcionará.

Lo correcto es declararlos como MACROS

Código: ASM
  1. banco0  macro
  2.         BCF             STATUS,RP0
  3.         endm
  4.  
  5. banco1  macro
  6.         BSF             STATUS,RP0
  7.         endm


Otro detalle: Si incluyes el archivo .inc del PIC que estás usando, una de las ventajas que trae esto es que precisamente no debes andar definiendo los registros especiales(SFR)

status      equ   h'0003'
option_reg   equ   h'0001'
trisa       equ   h'0005'
trisb       equ   h'0006'
porta      equ   h'0005'
portb      equ   h'0006'

El trisa es el h'0085' y el trisb es el h'0086'. Si bien te funcionará igual, puede que tengas problemas si alguna vez te equivocas de banco ya que el ensamblador no te advertirá que estas en el banco incorrecto.

Con el archivo include no necesitas andar declarando todo eso.
Simplemente pones:

por ejemplo:
 BCF         STATUS,C
 BSF         TRISB,2

sin necesidad de declararlos previamente.

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: Kedutpic en 27 de Noviembre de 2006, 20:14:32
  HOLA TOC-TOC
bueno yo tmb estoy comenzando programar te podria ayudar en lo siguiente

INI   BSF   portb,0      ; pone a 1 RB0   
       MOVLW   0xF 
       MOVWF   portb 
       GOTO   INI

bueno la verdad que no entiendo que has querido hacer alli , pero si solo quieres sacar un dato tendrias que hacer esta rutina

MOVLW  0x0F
MOVWF PORTB
GOTO $

si quieres que el dato cambie , para que puedas verlo , tienes que ademas  agregarle  una subrutina de delay

ejm:

         MOVLW 0XFF
         MOVWF PORTB
A1     CALL TIEMPO
         COMF PORTB,F
         GOTO A1

TIEMPO:
                              ;delay de 0.5 segundos
          MOVLW  .5
          MOVWF TEMP3
B3      MOVLW .100
          MOVWF TEMP2
B2      MOVLW .249
          MOVWF  TEMP1
B1      NOP
          DECFSZ TEMP1,F
          GOTO B1
          DECFSZ TEMP2,F
          GOTO B2
          DECFSZ TEMP3,F
          GOTO B3
          RETURN
          END
         
los registros temp1,temp2,temp3 tienes que definirlos al inicio de tu programa ok
ejm

TEMP1        EQU 0X20
TEMP2        EQU 0X21
TEMP3        EQU 0X22

Bueno  espero que con eso te salga.

 saludos

  si en algo me he he equivocado por favor corrijanme 

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: Manofwar en 28 de Noviembre de 2006, 05:38:33
Hola Toc-toc

Este es tu programa una vez compilado:

(http://www.ual.es/~salguero/codigo.jpg)

Si te fijas en la linea 3 y 6, estás cambiando el estado de los bits 6 y 5 del registro cero, por lo no estás cambiando de banco y además cambias bits diferentes.

En cuanto a los define, siento disentir contigo Bruno, en el MPLAB  se pueden utilizar definiciones como tú has hecho, pero las has declarado mal ya que no dices el registro y ante la ausencia de este, el MPLAB escoge el solo el registro cero, por lo que deberían ser así:

#define banco0 bsf  STATUS,RP0
#define banco1 bcf  STATUS,RP0

O como dice Bruno, declarar unas macros.

En cuanto al resto del código, totalmente de acuerdo con lo dicho por los compañeros.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 28 de Noviembre de 2006, 10:00:05
  Un saludo a todos y les agradezco su desinteresada ayuda a todos. He revisado
mi listado y ¡orror! no se como me salte STATUS en la definicion de bancos, pido
disculpas, ni lo vi. Como estaría.
 
  En el post de Monofwar, no he pillado nada, lo siento pero nada. En cuanto a BrunoF,
se nota que usa leguages de alto nivel, por lo de las macros, es bueno, intentaré aprender
de los ejemplo, graciasa todos.
 
  Es cierto, lo que dice Kedutpic, el listado anterior solo era una forma de iniciarme,
 claro, ya que estoy voy a realizar en el f628 algo que ya me funcionaba en el f84A.
 
  Este es el listado en cuestion, espero que no haya problemas y si es correcto, que
 le sirva a algun forero.

;******************************************************************
; Que hace => Debe hacer una pausa o retardo segun volores metidos   
; en los registros 1A y 1B. Para un retardo de 2 milisegundos,     
; cargar el valor 00 02 en 1A y 1B via W.              
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;--------------- Encabezado -------------

   List P=PIC16F628
   #include <p16f628.inc>   ;inclusion de fichero de etiquetas

   __CONFIG   h'3F50'

   errorlevel      -302      ; Eliminar banco atencion

#define   banco0   BCF   STATUS,5
#define   banco1   BSF   STATUS,5

   ORG 0x00      ; Empezamos a escribir el programa

 banco1
   BSF TRISA,0      ; RA0 como entrada
   BCF TRISA,1      ; RA1 como salida que es la inversa de RA0
   BSF TRISA,2      ; RA2 como entrada para pulsador.
 banco0

; Empieza rutina retardo a peticion usuario.
; Poner valor alto en registro 1Ah y el bajo en 1Bh

Pausa   MOVLW h'03'   ;3d = 00000011b =03h
   MOVWF 2Ah
   MOVLW h'03'   ;3d = 00000011b =03h
   MOVWF 2Bh
   CALL Pausa_mS   ;de 33 mS

Pausa_mS
   MOVF 2B,0   ;Move 1B to W
   MOVWF 29h   ;Move W to 19h
Lazo1   MOVLW h'F8'   ;Put 248 cycles in W
   MOVWF 2C   ;Put 248 into 1C
Lazo2   MOVLW h'0B'   ;Put 11 cycles in W
   MOVWF 2D   ;Put 11 into 1D
Lazo3   DECFSZ 2D,1
   GOTO Lazo3
   DECFSZ 2C,1
   GOTO Lazo2
   DECFSZ 29h,1
   GOTO Lazo1
   INCF 2A,1
   DECFSZ 2A,1
   GOTO Lazo4
   RETURN      ;Return a Pausa

Lazo4   MOVLW 64h      ;Put 100 loops into W
   MOVWF 2B      ;Load 1B with 100
Lazo5   MOVLW h'F8'      ;Put 248 cycles in W
   MOVWF 2C      ;Put 248 into 1C
Lazo6   MOVLW 0B      ;Put 11 cycles in W
   MOVWF 2D      ;Put 11 into 1D
Lazo7   DECFSZ 2D,1
   GOTO Lazo7
   DECFSZ 2C,1
   GOTO Lazo6
   DECFSZ 2B,1
   GOTO Lazo5
   DECFSZ 2A,1
   GOTO Lazo4
   RETURN      ;Return a Pausa

   END


 Un saludo a todos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 28 de Noviembre de 2006, 18:18:22
En cuanto a los define, siento disentir contigo Bruno, en el MPLAB  se pueden utilizar definiciones como tú has hecho, pero las has declarado mal ya que no dices el registro y ante la ausencia de este, el MPLAB escoge el solo el registro cero, por lo que deberían ser así:

#define banco0 bsf  STATUS,RP0
#define banco1 bcf  STATUS,RP0

O como dice Bruno, declarar unas macros.

En cuanto al resto del código, totalmente de acuerdo con lo dicho por los compañeros.

Claro que se puede, yo me refería a que estaba mal tal cual lo había puesto el. No me parecio necesario, ya que lo lógico es usar una MACRO si bien el #define tambien funciona.
Preferí mencionarle la MACRO ya que el #define sólo funciona con 1 linea de código y el MACRO con cuantas quieras.

Además, inmediatamente después de mi post, Kedutpic corrigió los #define de toc-toc y los posteó correctamente. Pero luego se ve que se arrepintió y borro su mensaje y lo volvió a postear.

En cuanto a BrunoF, se nota que usa leguages de alto nivel, por lo de las macros, es bueno, intentaré aprender
de los ejemplo, graciasa todos.

Hola toc-toc.

No. El 99% de las veces programo microcontroladores en ASM.
Y no soy partidario de las MACROS. Jamás las uso. Sólo sirven para casos como este de pocas lineas.
Jamás justifico una MACRO de 20 líneas de código. Puede ser reemplazada por una subrutina y se aprovecha mucho mejor la memoria FLASH del PIC.

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 28 de Noviembre de 2006, 19:11:20
 Ok! Gracias por las respuestas. Entiendo que mi último post es algo más correcto
en cuanto a programa, otra cosa es que esté bien, no obstante, lo he probado con
el MPLAB y no me da errores, por lo que quiero entender que está dentro de lo esperado
así que, voy a intentar 'quemar' el pic16f628 y averiguar si es cierto que está bien.

 Vaya, eso es lo que tenía previsto, pero si antes lo pienso, antes me asaltan las
pregunta, veamos. Dispongo de un quemador basado en el TE20-SE que está bien
configurado para mi PC en XP y además está probado con el F84A y funciona bien.

 Primer escollo, la ventana del programador (IcProg) para el F628, muestra otro aspecto
el cual me 'saca' del sueño de poder quemar mi primer F628, vaya que el oscilador RC
no aparece en la corredera que, lo más parecido que aparece es:

 
 IntRC I/O
 IntRC CLKOUT


 Pregunta 1. Ya que pensaba usar el circuito previsto para el F84A con osc. RC, puedo usar
el InRC I/O para no cambiar nada del circuito o nada mas lejos.

 Pregunta 2. Los bits de config. en principio para evitar problemas inesperados, los dejo sin
marcar. Y

 Pregunta 3. En protección de código, es correcto poner la opción: CP OFF, espero que sí.

 No son preguntas dificiles sin embargo para mi tienen una importancia muy elevada. Por
cierto, sabe alguien del uso de este TE20-SE para este PIC16F628 que tenga algún problema.

 Voy a probarlo de todos modos, ya que es Flash, poco puedo perder ???. Ya comentaré como
me ha ido.
 
 Saludos a todos.
 
 

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 28 de Noviembre de 2006, 19:24:43
Hola.
No analice a fondo tu programa pero por lo poco que veo, si lo grabas no te vas a dar cuenta nunca de si realmente esta funcionando o no.

En ningun momento trabajas sobre los puertos de PIC, al menos para encender o apagar un led y corroborar que la demora funciona.

La proteccion de codigo no afecta en nada al programa. La unica diferencia es que si la activas, impedis que el codigo sea leido posteriormente(es para que no te copien el programa)

Saludos
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 29 de Noviembre de 2006, 19:55:23

 Hola BrunoF, es cierto lo que indicas, el caso es que antes de quemar el chip,
como siempre hago una simulación con el MPLAB y de esta forma tan ardua
veo que ocurre en los registros y si cambian como esteraba que lo hicieran.

 Si, es tedioso, aunque como tu bien dices, cuando lo hago con el F84A, le añado
una subrutina con salida a un LED que me indique si funciona y si la cosa se
pone intrincada que a veces se pone, entonces le pongo una subrutina que me
saca un sonido y se que hasta ese punto el programa funciona, luego avanzo un
trozo de programa y le hago un CALL otra vez al sonido y así hasta lograr lo que
me he propuesto.

 Seguro que tu usas otras formas más intuitivas para depurar tus programas y
así ganas tiempo.

 En este inicio, lo que pretendo es tomarle el tranquillo al F628, ya se que no es
lo mismo queel F84, por cierto la tabla de registros SFR es muy grande, imagino
que es cuestión de centrar en lo importante en cada progama.

 Por cierto, en las hojas del fabricante he descubierto como iniciar el puerto A
con un ej. Solo que hay una cosa que no tengo clara, pone:
 
 BCF       STATUS,RP1          ; Esto xq es RP1, es el banco 1
                                         ; xq no hay nada definido aqui
 BSF       STATUS,RP0          ; Esto es el banco 0

 Bueno, el resto del ej. creo que esta claro.

 Vale no me enrollo mas.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: interticio en 29 de Noviembre de 2006, 22:06:44

hola toc-toc, el tema de estos bits, es que el registro status, posee dos bit para selecionar el banco en el cual estas trabajando.
Por eso aca se setea RP0 y se pone a cero RP1, para seleccionar el banco uno, que es donde esta el registro TRISA que es para configurar el puerto.
 
BCF       STATUS,RP1         pone a cero RP1                                       
BSF       STATUS,RP0         pone a uno RP0

bueno espero que te aya servido nos vemos chau
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 29 de Noviembre de 2006, 22:19:58
Hola
Los bits RP0 y RP1 del registro STATUS definen el banco actual del PIC.
El pic 16F84A por ejemplo, posee sólo dos bancos: 0 y 1.
Mientras que otros mas grandes(como el 16F87XX) poseen 4 bancos: 0,1,2,3.

Entonces, en binario:

Si RP1= 0 y RP0= 0, entonces el PIC estará en el banco 0.
Si RP1= 0 y RP0= 1, entonces el PIC estará en el banco 1.
Si RP1= 1 y RP0= 0, entonces el PIC estará en el banco 2.
Si RP1= 1 y RP0= 1, entonces el PIC estará en el banco 3.

En el 16F84A, si bien existen ambos bits RP1 y RP0, sólo está implementado el bit RP0 debido a que sólo posee dos bancos: el 0 y el 1. Entonces con el BIT RP0 alcanza.

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 02 de Diciembre de 2006, 19:02:27
Hola! Saludos a todos.

 He estado realizando unas pruebas con un pequeño programa para entrenarme
con este F628. En este caso, compruebo si funciona este programa, debería encender
un LED de forma intermitente.
 
 Para lo cual, he ido sacando ideas de varios sitios y revisando las instrucciones que
he podido encontrar en las hojas de caracterisitcas del f628. Este es el listado:

;
; Que hace => Debe hacer. Encender un LED en RB0 durante un
; periodo de tiempo, pasado el cual, se apagara y permanece asi
; el mismo tiempo, para volver a empezar.
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;--------------- Encabezado -------------

   List P=PIC16F628
   #include <p16f628.inc>   ;inclusion de fichero de etiquetas

   __CONFIG   h'3F50'

   errorlevel      -302      ; Eliminar banco atencion

reg1   EQU   2CH      ;variables que usaremos  pongo
reg2   EQU   2DH      ; desde 2C porque en 1C no lo admite
            ; supongo que es porque esta usada.

   ORG 0x00      ; Empezamos a escribir el programa
;
CLRF   PORTA         ;inicializa porta para configurar
            ;salida datos latches
   MOVLW 0X07      ;apaga los comparadores y
   MOVWF CMCON      ;habilita pines para funciones i/o

   BCF   STATUS,RP1   ;selecciona banco1
   BSF   STATUS,RP0   ;selecciona banco 0
   MOVLW 0X1F      ;valor usado para inicializar
            ;direccion de datos
   MOVWF TRISA      ;Pone RA<4:0> como entradas
            ;TRISA<5> siempre leera como 1
            ;TRISA<7:6> depende del modo de oscilador
;------- Empieza programa -----

INICIO
   BSF   PORTB,0    ; pone a 1 RB0
   CALL   pausa      ;
   BCF   PORTB,0   ; pone a 0 RB0
   CALL   pausa      ;
   GOTO   INICIO      ; va a inicio


pausa   MOVLW      010H   ;Carga W con el valor 10H (16 en decimal)
       MOVWF      reg1       ;Mueve el contenido del W a reg1
ak1   MOVLW      0FFH   ;carga el acumulador con el valor FFH
     MOVWF         reg2     ;mueve el contenido del W a reg2
ak   DECFSZ           reg2,F    ;decrementa reg2, guarda el resultado en f,
                      ;y si es cero salta la siguiente instrucción
   GOTO      ak       ;va a decrementar mientras reg2 no sea cero.
   DECFSZ          reg1,F    ;decrementa reg1 cada vez que reg2 llega a cero
   GOTO      ak1      ;mientras reg1 no llegue a cero recarga reg2

   RETURN                  ;retorna al programa principal


   END               ;FIN


 Quiero que me digan porque esto no funciona ya que en el MPLAB lo he probado y
no parece que este correcto, el PORTB,0 se pone a 1, siempre está a 0. Lee
la instruccion BSF PORTB,0 y luego salta al retardo, sin haber cambiado el
nivel del puerto, al menos según el MPLAB.

 He probado a poner BSF TRISB,0 y este registro si funciona, luego BCF TRISB,0
y también cambia, pero el PORTB,0 sigue a 0 todo el tiempo. Puede ser la config.
de los puertos?

 Puede alguien decirme que estoy haciendo mal.

 Gracias por la ayuda.



 
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 02 de Diciembre de 2006, 20:51:35
   __CONFIG   h'3F50'

No es recomendable que definas la configuración asi. Será dificil para ti darte cuenta de la configuración utilizada y difícil para nosotros también poder comprenderla.

En cambio, utilizá por ejemplo:

   __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT

Que es lo mísmo pero más legible.

reg1   EQU   2CH      ;variables que usaremos  pongo
reg2   EQU   2DH      ; desde 2C porque en 1C no lo admite
            ; supongo que es porque esta usada.


Mira en el datasheet el mapa de memoria del microcontrolador a utilizar. Fijate que está dividido en dos zonas: SFR  GPR. Todos los registros que quieras utilizar para realizar calculos en tu programa deben estar en una direccion GPR válida.
La primer direccion GPR válida para este uC es la 20H.


   BCF   STATUS,RP1   ;selecciona banco1
   BSF   STATUS,RP0   ;selecciona banco 0

ENTRE AMBAS configuran al PIC en el banco1.
El    BCF   STATUS,RP1 NO ASEGURA QUE EL PIC ESTE EN EL BANCO 1. SIMPLEMENTE ASEGURA QUE NO ESTE NI EN EL BANCO 2 NI 3(no estan implementados en este modelo de PIC)

Ahora si seteamos el banco 1 con la BSF   STATUS,RP0

   MOVLW 0X1F      ;valor usado para inicializar
            ;direccion de datos
   MOVWF TRISA      ;Pone RA<4:0> como entradas
            ;TRISA<5> siempre leera como 1
            ;TRISA<7:6> depende del modo de oscilador
;------- Empieza programa -----

INICIO
   BSF   PORTB,0    ; pone a 1 RB0
   CALL   pausa      ;
   BCF   PORTB,0   ; pone a 0 RB0
   CALL   pausa      ;
   GOTO   INICIO      ; va a inicio


Te faltó configurar el PUERTOB como salidas/entradas y volver al banco 0 del PIC. Estabas en el banco1 y no volves al banco0
Simulalo en el MPLAB y en la ventana watch agrega el registro TRISB. vas a ver que el    BSF   PORTB,0    ; pone a 1 RB0 pone a 1 el bit de TRISB y el     BCF   PORTB,0   ; pone a 0 RB0 lo pone a cero.
Estas trabajando en el banco incorrecto. Lo unico que esta haciendo el programa es configurar como entrada y salida constantemente el pin0 del PUERTOB.



Acá va el programa corregido:


   List P=PIC16F628
   #include <p16f628.inc>   ;inclusion de fichero de etiquetas

   __CONFIG   _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT


   errorlevel   -302      ; Eliminar banco atencion

reg1   EQU   2CH      ;variables que usaremos  pongo
reg2   EQU   2DH      ; desde 2C porque en 1C no lo admite
            ; supongo que es porque esta usada.

   ORG 0x00      ; Empezamos a escribir el programa

   CLRF   PORTA      ;inicializa porta para configurar
            ;salida datos latches
   MOVLW   0X07      ;apaga los comparadores y
   MOVWF   CMCON      ;habilita pines para funciones i/o

   BCF   STATUS,RP1
   BSF   STATUS,RP0   ;selecciona banco1
   MOVLW   0X1F      ;valor usado para inicializar
            ;direccion de datos

   MOVWF   TRISA      ;Pone RA<4:0> como entradas
            ;TRISA<5> siempre leera como 1
            ;TRISA<7:6> depende del modo de oscilador
   CLRF   TRISB      ;PORTB todo como salida
   BCF   STATUS,RP0   ;banco0

;------- Empieza programa -----

INICIO
   BSF   PORTB,0      ; pone a 1 RB0
   CALL   pausa      ;
   BCF   PORTB,0      ; pone a 0 RB0
   CALL   pausa      ;
   GOTO   INICIO      ; va a inicio

pausa   
   MOVLW   010H      ;Carga W con el valor 10H (16 en decimal)
   MOVWF   reg1      ;Mueve el contenido del W a reg1
ak1   MOVLW   0FFH      ;carga el acumulador con el valor FFH
   MOVWF   reg2      ;mueve el contenido del W a reg2
ak   DECFSZ   reg2,F      ;decrementa reg2, guarda el resultado en f,
            ;y si es cero salta la siguiente instrucción
   GOTO   ak      ;va a decrementar mientras reg2 no sea cero.
   DECFSZ   reg1,F      ;decrementa reg1 cada vez que reg2 llega a cero
   GOTO   ak1      ;mientras reg1 no llegue a cero recarga reg2

   RETURN         ;retorna al programa principal

   END         ;FIN
Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 02 de Diciembre de 2006, 21:04:01
  Saludos otra vez.
 Buscando una solución, he tropezado con una cabecera que me funciona.
La he probado y funciona.

    ORG      0
   BSF      STATUS,5   ; activa la pagina 1
   CLRF      TRISA
   CLRF      TRISB      ; puerto a y b todos salidaS
   BCF      STATUS,5   ; volvemos a la pagina 0
   MOVLW      b'00000111'   ; comparadores desactivados,
   MOVWF      CMCON      ; I/O digitales.
   CLRF      PORTB      ; ponemos a 0 portb

 Por lo visto debía limpiar los puertos antes de nada, con eso los fuerzo los
PORTA y PORTB como salidas y luego vuelvo a la pag.0

 Por fin consigo mi primer programa para el F628, espero que cuando lo queme
me siga la euforia, señal inequivoca de que todo ca de cine.

 Saludos a todos y gracias.

 P.D. : Me voy de viaje mas tranquilo.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 02 de Diciembre de 2006, 21:06:53
Hola toc-toc. Te he respondido a los problemas en tu código en este mismo tema explicandote todo. Fijate...

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 02 de Diciembre de 2006, 21:13:05
 Vaya, gracias BrunoF, mira que he terminado de cenar y he enviado el mensage y
en ese momento tu que respondías al anterior mio, se han cruzado.

 Bueno, voy a corregir los que me indicas sobre la configuración de código para mis próximos
listados y espero que me funcione todo bien.

 Por cierto, cuando me dices que al simularlo ponga la ventana Warch, no lo he hecho nunca y
te agradecería me hicieras una demo. para entenderte mejor.

 Gracias por tus esfuerzos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 02 de Diciembre de 2006, 21:35:56
Fíjate en tu perfil.Debes destildar la opción "No advertir de nuevas respuestas mientras se está publicando un mensaje".

Esto hará que aparezca una advertencia de color rojo al intentar publicar tu mensaje o bien al previsualizarlo indicandote que han respondido mientras estabas respondiendo.

(http://ar.geocities.com/brunodini/Menu.JPG)


(http://ar.geocities.com/brunodini/Watch.JPG)


(http://ar.geocities.com/brunodini/TRISB.JPG)



Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 02 de Diciembre de 2006, 21:44:12
 Hola BrunoF, tienes razón con el uso de los registros, para eso estan los Registros de
Proposito General, no debería tener estos fallos tan básicos y mira, empiezo a pensar
que el parkinson se hace camino. ;o)

 Recibido mientras tomaba nota.

 Gracias y mil veces gracias, vaya rapidez la tuya en responder (quien pudiera), creo
que está claro tu ej. demo y además clara. Por otra parte, estoy usando la versión 5.5
del MPLAB, pienso q he de actualizarme y aún no aprendí con el viejo, ;o)

 Bueno, ahora lo que estoy pensando es, encender dos LEDs conectados uno de RB0 a
RB1 y otro de RB1 a RB0. De modo que, cuando uno esté polarizado luzca y el otro se
encuentre en oposición por lo que no lucirá.

 Creo que es un ejemplo sencillo y no debería crearme mayor problema, lo voy a intentar,
pero eso si no lo consigo mañana domingo, creo que será para cuando vuelva de viaje.

 De todos modos agradecido por tu ayuda BrunoF. Saludos desde Valencia.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 02 de Diciembre de 2006, 21:47:56
De nada. :mrgreen:

Te dejo que pruebes hacerlo vos. Si no te sale me avisas.

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 07 de Diciembre de 2006, 17:11:58
 Hola! Un saludo a todos.

 Bueno como he tenido una escapada del hotel, he preparado esta rutina
que como dije en mi anterior mensaje ha de encender un LED conectado
en RB0 y RB1 mientras que el LED que se encuentra conectado al revés
en los mismos registros, al estar en polarización inversa, no debe lucir.

Esto es lo que he probado y al parecer en la simulación con el MPLAB es
correcto. Hechadle un vistazo para confirmarlo.


;
; ESTA ES LA CABECERA PARA EL F628A
;
;******************************************************************
;   Titulo:   2leds.asm            
;   Autor:   toc-toc
;   Fecha:   07-12-06
; Que hace => Enciende un LED en RB0 y otro en RB1
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;--------------- Encabezado -------------

   LIST   P=16F628,                 ; usar PIC 16F648A
   include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT
            ; las tres configuraciones son equivalentes
            ; Code protection         OFF
            ; Data code protection      OFF
            ; Low voltage programming, RB4 I/O   OFF
            ; Brown-out reset         ON
            ; MCLR desctivado, RA5 I/O   OFF
            ; Watchdog timer         OFF
            ; Power-up timer         ON
            ; OSC es Int 4MHz,RA6 y RA7 son I/O

   errorlevel      -302   ; Eliminate bank warning

reg1   equ   0x20      ; siempre se necesitan un par
reg2   equ   0x21      ; de registros auxiliares

;*********************************************************************************

   ORG      0x00

   BSF      STATUS,5   ; activa la pagina 1
   CLRF      TRISA
   CLRF      TRISB      ; puerto a y b todos salidaS
   BCF      STATUS,5   ; volvemos a la pagina 0
   MOVLW      b'00000111'   ; comparadores desactivados,
   MOVWF      CMCON      ; I/O digitales.
   CLRF      PORTB      ; ponemos a 0 portb

INICIO
   MOVLW      .170   ; b10101010
   MOVWF      PORTB
   RRF      PORTB,1   ;
   CALL      pausa
   GOTO       $-2      ; va a inicio

pausa   MOVLW      0xF
   MOVWF      2Ah
   MOVWF      2Ch
pausa1   DECFSZ      2Ah,1      ; Retardo
   GOTO      pausa1
   DECFSZ      2Ch,1
   GOTO      pausa1
   RETURN


   END


 Gracias por los comentarios.

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 07 de Diciembre de 2006, 20:02:58
Hola toc-toc.

Me alegro que hayas logrado la forma de hacerlo. :-/ :-/

Pero si bien en la simulación el código te puede funcionar bien, no te asombres si no se comporta igual cuando enciendas el PIC real.

Mira este post mío: http://www.todopic.com.ar/foros/index.php?topic=14812.msg91216#msg91216

Podes ver el problema que implica desconocer el valor del bit STATUS,C al ejercer una rotación.

Si al momento de ejecutarse la primer rotación STATUS,C = 1 el programa no va a funcionar como queres(PORTB= 11010101). Tampoco lo va a hacer si en el futuro agregas código y utilizás alguna instrucción que afecte el valor del bit STATUS,C entre medio(addwf,subwf,addlw,etc...).

Para asegurarte que la primer rotacion ingrese un 0 en PORTB,7 deberias hacer esto:

INICIO
   MOVLW      .170   ; b10101010
   MOVWF      PORTB
   BCF      STATUS,C ;Asegurar que en la primer rotacion ingrese un 0 en PORTB,7
   RRF      PORTB,1   ;
   CALL      pausa
   GOTO       $-2      ; va a inicio



Hay otras formas de hacer lo mísmo. Y de manera más segura. Ejemplos:

INICIO
   MOVLW      .170   ; b10101010
   MOVWF      PORTB
   COMF        PORTB,F      ;Invierte el valor de los bits de PORTB
   CALL         pausa
   GOTO        $-2      ; va a inicio


INICIO
   MOVLW      .170   ; b10101010
   MOVWF      PORTB
   MOVLW      0XFF    ;Cargar b'11111111' en W
   XORWF      PORTB,F ;La XOR hace la inversion aqui.
   CALL         pausa
   GOTO        $-3      ; va a inicio

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 09 de Diciembre de 2006, 13:35:20
  Hola! BrunoF, cierto, tu comentario es genial, ya había visto el error que se
producía y pensé en la misma solución, si bien es cierto hay otros modos de
conseguir que los LEDs se enciendan según mi enunciado, solo era una forma
de ejercicio para el F628 que como ya comenté me estaba dando problemas
y parece que ya tengo una ligera idea de plantear la cabecera para realizar
un programa.

 Por cierto, con el F84A tengo hecho un programa que maneja un motor de pasos
que me está funcionando bien, es cierto que solo tiene tres opciones con los tres
pulsadores que dispone, uno hace girar en una dirección el otro lo para y el tercero
le hace girar en sentido contrario. No está modulado y la velocidad es casi constante
y digo casi, porque depende de la carga de un condensador ya sabes.
 
 He pensado en usar parte del programa para que haga algo mas que girar en ambas
direcciones. Me gustaría que me orientaras para conseguir que gire un determinado
número de pasos y cómo lograr que sea controlado ese número de pasos, no se si me
explico.

 Si te parece puedo poner el archivo para ver si se aprovecha alguna parte o si lo
prefieres lo empiezo de cero?, igual es lo mejor.

 Bueno, estaré haciendo la cabecera hasta que me vaya y esta vez me voy de viaje y
espero que no me lo estropee nada, espero.

 Un saludo y gracias por tus comentarios Bruno


Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 09 de Diciembre de 2006, 16:17:42
Bueno, pone el código y lo miramos.

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: Radiotecnico en 09 de Diciembre de 2006, 19:17:46
Hola! :)
Estoy bajando ejercicios básicos, simulados en proteus, en la sección de NIPLE.
Creo que podrian ayudar a los menos espertos a programar, mas rapidamente.

No no no...acá piratería no...
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 23 de Enero de 2007, 21:31:44
 Hola! BrunoF, un saludo a todos los foreros. Ya he vuelto de viaje, que ganas tenía.

 He estado buscando en mi PC el programa que menciono en mi último post y
como te decía, funciona bien, gira en ambas direcciones según el pulsador que
apriete o el de parada.

 
Citar
He pensado en usar parte del programa para que haga algo mas que girar en ambas
direcciones. Me gustaría que me orientaras para conseguir que gire un determinado
número de pasos y cómo lograr que sea controlado ese número de pasos, no se si me
explico.

 Es decir, que ahora gira en una dirección sin parar y lo que quiero es que gire hasta
que se active una señal y que tome una decisión según la procedencia de esa señal.
También serviría que girara mientras esté apretado un pulsador, por ejemplo.

 Saludos a todos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 24 de Enero de 2007, 16:22:38
Hola.
Cual es la idea?
Que un pulso en determinado pin haga que comience a girar hacia la izq hasta que reciba otro pulso, el cual dependiendo del pin podra invertir la direccion de giro?

Refrescame un poco el tema porque no me acuerdo...

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 25 de Enero de 2007, 19:24:17
 Hola! Maestro BrunoF y demás colegas.

 Bueno, por ahí van los pasos, la verdad es que estoy en una fase en la que no he tomado
la decisión final, ya que en principio, sólo traté de hacer que girara, esto ya lo he logrado,
después de aplicar partes de rutinas que aún no domino.  :(

 En este momento, necesito dominar el número de pasos que dará el eje y la propia dirección
de giro. Para esta fase, podrías orientarme en que método usar, porque entiendo que habrá
diferentes modos de conseguir que gire ciertos grados el eje del motor.

 Por cierto y sólo por refrescar los datos, el motor es de doble bobinado con toma intermedia en
cada bobinado y dispone de 48 pasos. En el programa que tengo es para el F84A y no tengo
control de los pasos, me parece que salta dos pasos o más por uno y quiero modificar o mejor
realizar un programa nuevo para el F628 que avance paso a paso.

 Luego ya añadiré otras fases que se me ocurran, así que.

 Para empezar, este sería el planteamiento por fases:

 1- Programa para el F628, usando interrupciones, de modo que permanezca dormido hasta un
 pulso o señal (distintos medios, luz, sonido). Para esta fase, lo que quiero es que cuando despierte,
 lo primero que haga es encender dos LEDs y

 2- Control de giro del eje motor, dirección y pasos. Que haga un par de pasos en ambas direcciones,
 esto nos indica que todo está listo.

 3- Seguimiento de unos pasos determinados (avance en la dirección de la luz).

 Esto es a grandes rasgos lo que pretendo, contando con la necesaria ayuda de maestros como BrunoF
y otros que veo postear.

 A todos gracias de toc-toc
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 26 de Enero de 2007, 16:21:51
 Hola! Saludos nuevamente.

 Estoy teniendo un problema al intentar quemar un F628 con el clásico TE-20se, me da el
típico error 0000h!. En alguna parte leí que debía colocarse un nuevo zócalo sin el pin 10
y colocarlo encima del TE-20se. Lo he probado y sin embargo sigue dándome el mismo
error.

 Sabe alguien el motivo o como solucionar el problema. La verdad es que me urge saber
la solución ya que como se ve, voy a tener que tener todo a punto.  :lol:

Un saludo de toc-toc a todos.
 
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: maunix en 27 de Enero de 2007, 14:18:57
toc-toc los motivos pueden ser muchos, te sugiero postees esta pregunta en la sección de programadores ya que es off-topic de este hilo.

Ahí hay muchisima información respecto a estas y otras dudas.

Saludos
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 29 de Enero de 2007, 18:16:03
Hola! Saludos maunix.

  Gracias por tu consejo. La verdad es que con tanto trajín, cambié la configuración del
Ic-prog y se me fastidio todo, me llamó la atención cuando vi que incluso los F84A me
estaban dando problemas de verificación. Anduve revisando las tensiones incluso en el
mismo DB9 y en los distintos pines del quemador. Había algo que no encajaba y pensé
en el config. y ya lo tengo resuelto, nunca tuve problemas y ahora con el F628 me está
funcionando como esperaba. Repito, gracias.

 Tengo un pregunta que hacerte, es que veo en los ejemplos que pones en los post que
en primer lugar defines la pagina1, sigues con los registros necesarios y sales con la
pagina0, hasta aquí todo correcto siempre lo he visto y hecho así, sin embargo con el
F628 y similares, hay que indicarle al PIC que desactive los comparadores, vale.

 La pregunta es porqué en algunos casos he visto que se desactivan los comparadores y
luego se configuran las páginas.

 Desde mi punto de vista, primero se deben config. las páginas y luego se desactivan los
comparadores, es necesario. Cierto?

 Saludos de toc-toc



Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 29 de Enero de 2007, 18:29:40
Hola! Un saludo a todos.

 BrunoF, esto es la cabecera del programa que te comenté. En principio esto
puede servir o habría de hacer alguna modificación.

Citar
;   Fecha:   25-01-07
; Que hace => Controlar giro en motor pap, tiene 2 bobinados con toma
; intermedia en ambos. Usamos el derivador ULN2803. Las salias
; se hacen por RA0, RA1, RA2 y RA3. Usa interrupciones RB4...
;
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;  Las tildes estan omitidas de manera intencionada.
;--------------- Encabezado -------------

   LIST   P=16F628       
   #include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT
            ;

   ERRORLEVEL      -302      ; Elimina banco atencion (warning)

;   Declarar  equs

acum   equ   0x20      ; se declaran acum
stat   equ   0x21      ; y stat
reg1   equ   0x22      ; siempre se necesitan unos
reg2   equ   0x23      ; de registros auxiliares
            ;          "               "
PULSO   equ   0X2A      ;


#DEFINE   BANCO0   BCF   STATUS,5   ; RP0 = 0
#DEFINE   BANCO1   BSF   STATUS,5   ; RP0 = 1


;*********************************************************************************

   ORG      0x00
   GOTO      ini
   ORG      0x04   ;viene cuando hay una interrupcion
   GOTO      rsi   ;salta a la rutina de rsi que atiende la interrupcion
   ORG      0X05   

ini:

   BANCO1         ; selecciona banco1
   CLRF   TRISA         ; PORTA todo SALIDAS
   MOVLW   b'00100111'      ; RB0,1,2,5=ENTRADAS RB7=SALIDA
   MOVWF   TRISB         ; pon PORTB
   MOVLW   b'10000000'      ; RBPU=1 (Pull up) no se usa, flanco desc.
   MOVWF   OPTION_REG      ; pon a 1 OPTION_REG
   BANCO0         ; volvemos a la pagina 0
;   Establece estado comparadores
   MOVLW      b'00000111'   ; comparadores desactivados,
   MOVWF      CMCON      ; I/O digitales.

   CLRF      PORTB      ; ponemos a 0 portb

;---- Activa interrupciones ----
   MOVLW      b'10010000'   ;configura las interrupciones
   MOVWF      INTCON      ;GIE y RB0/INT.

   CLRF   PORTB      ; limpia el puerto B
dormir:   SLEEP
   GOTO   dormir      ; poner a dormir
;
;---- rutina servicio interrupciones
rsi:   BTFSS   INTCON,1   ; es interrupcion RB0?
   GOTO $-1      ; Si no, espera
             ; si lo es comenzamos
            ; guardando el contenido del W
   MOVWF   acum      ; Copia el acumulador al registro acum
   MOVF   STATUS,W   ; Guarda STATUS en el acumulador
   CLRF   STATUS      ; para restaurarlos antes de volver
   MOVWF   stat      ; Copia el acumulador al registro STAT

   ; Empieza activacion de rutina de uso

 Dame tu opinión y si hay que cambiar cosas adelante.

 
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 29 de Enero de 2007, 19:04:43
Hola toc-toc. Perdona la ausencia pero ando con ciertos problemas tecnicos y no puedo conectarme seguido.

No tengo mucha experiencia en motores PAP. Solo he jugado un rato y hace mucho tiempo. Basicamente diria que necesitas primero, sabes que valores enviar a las bobinas para que el motor vaya girando. No se si pensas hacerlo girar por paso o cada medio paso.

En base a eso arrancamos. Por ahora deberias basicamente hacer una tabla o lo que sea con los valores de los voltajes enviados a las bobinas para cada posicion.

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 05 de Febrero de 2007, 10:19:12
 Hola! Saludos a todos los asistentes al foro.

 Bien, respecto a la pregunta que me haces (BrunoF), entiendo que en el caso de medio paso, la
precisión del avance es mayor, por lo que pienso que este debe ser el modo a usar en el proceso.

 Otra cosa, por lo que me dices de tus experiencias al respecto, te diré que siempre serán mas que
las mías ya que lo que he hecho como ya te dije, fue un ejemplo que encontré en la red con el F84A
y que me funcionó a la primera, por lo que no se puede decir que tenga experiencia alguna. Tu me
comentas sobre valores que enviar a las bobinas del motor; entiendo que te refieres al orden en los
terminales a enviar los datos o niveles altos, ya me aclaras este punto.

 Así que, resumiendo, tenemos un motor con dos bobinados y toma intermedia en cada uno, es decir
6 hilos, queremos que el motor avance con saltos de medio paso, además de que avance mientras
una señal esté activa y que el sentido de giro lo determine otra señal, lo de las interrupciones, lo
dejamos para luego.

 Bueno, esto es a grandes rasgos pienso que deberíamos ir por pasos, primero que gire mientras esté
apretado el pulsador A, luego ya añadiremos otros puntos.

 Del listado anterior creo que se puede aprovechar alguna parte. Mira a ver que tal esta cabecera:
 
Citar
;   Fecha:   25-01-07
; Que hace => Controlar giro en motor pap, tiene 2 bobinados con toma
; intermedia en ambos. Usamos el derivador ULN2803. Las salias
; se hacen por RA0, RA1, RA2 y RA3. Usa interrupciones RB4...
;
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;  Las tildes estan omitidas de manera intencionada.
;--------------- Encabezado -------------

   LIST   P=16F628       
   #include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT
            ;

   ERRORLEVEL      -302      ; Elimina banco atencion (warning)

;   Declarar  equs

acum   equ   0x20      ; se declaran acum
stat   equ   0x21      ; y stat
reg1   equ   0x22      ; siempre se necesitan unos
reg2   equ   0x23      ; de registros auxiliares
            ;          "               "
PULSO   equ   0X2A      ;


#DEFINE   BANCO0   BCF   STATUS,5   ; RP0 = 0
#DEFINE   BANCO1   BSF   STATUS,5   ; RP0 = 1


;*********************************************************************************

   ORG      0x00
   GOTO      ini
   ORG      0x04   ;viene cuando hay una interrupcion
   GOTO      rsi   ;salta a la rutina de rsi que atiende la interrupcion
   ORG      0X05   

ini:

   BANCO1         ; selecciona banco1
   CLRF   TRISA         ; PORTA todo SALIDAS
   MOVLW   b'00100111'      ; RB0,1,2,5=ENTRADAS RB7=SALIDA
   MOVWF   TRISB         ; pon PORTB
   MOVLW   b'10000000'      ; RBPU=1 (Pull up) no se usa, flanco desc.
   MOVWF   OPTION_REG      ; pon a 1 OPTION_REG
   BANCO0         ; volvemos a la pagina 0
;   Establece estado comparadores
   MOVLW      b'00000111'   ; comparadores desactivados,
   MOVWF      CMCON      ; I/O digitales.

   CLRF      PORTB      ; ponemos a 0 portb


 Bueno, a parte de BrunoF que está estresado por su trabajo, se que hay más genios que pueden
aportar sus granitos de MG (materia gris), es cuestión de participar y hacer que este proyecto vaya
adelante, no les parece.

 De todas formas gracias por el interés y los aportes.  :lol:

 Saludos de Vicente.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: ESTECA55 en 05 de Febrero de 2007, 11:36:04
Hola, en encabesado se ve bien.

aca te dejo un esquemita de conexion(por las dudas estaba a mano) y las secuencias de exitacion:

(http://www.todorobot.com.ar/informacion/tutorial%20stepper/fig-3.gif)
Conexionado para un motor unipolar.(como el tullo de 6 cables.

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=14249.0;attach=3720;image)  (http://www.todorobot.com.ar/informacion/tutorial%20stepper/normal.gif)

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=14249.0;attach=3722;image)  (http://www.todorobot.com.ar/informacion/tutorial%20stepper/wave.gif)

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=14249.0;attach=3724;image)  (http://www.todorobot.com.ar/informacion/tutorial%20stepper/half.gif)


Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 05 de Febrero de 2007, 14:27:31
 Hola! Saludos de nuevo a todos.
 
 Gracias amigo Esteca55. Te agradezco tu aporte al tema, de veras, en cuanto al esquema
eléctrico, he preparado el que muestro abajo, creo que está algo más concreto aunque no
hay grandes diferencias.
 
 Sin embargo y a pesar de conocer la secuencia de cebado, no había reparado en el modo
y creo que justo a esto se refería el amigo BrunoF y tu me lo has puesto en "solfa" por decirlo
de algún modo, con tu esquema del medio paso me has hecho ver el sentido de "los datos", de
cómo han de presentarse a la salida del puerto B, en este caso (creo que ya está claro).

(http://C:\Temp\empresas\hispavila.com\3ds\chipspic\F628A\crtpap0.jpg)

 Vaya, no se usar el editor para mostrar las imágenes en la misma página ?, dime cómo he de
proceder, he usado la opción "Adjuntar:" y sin embargo con pre-visualizar, no muestra nada.

 En todo caso ya las pondré en el momento que pueda, así que gracias otra vez.

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 05 de Febrero de 2007, 18:46:50
 Hola! Ya estoy aquí otra vez.

 A ver si alguien puede simularme el listado de abajo con un programa como el Proteus,
yo no dispongo de éste y además no se usarlo. El listados es este:

Código: [Seleccionar]
;--------------- Encabezado -------------

   LIST   P=16F628       
   #include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT


   ERRORLEVEL      -302      ; Elimina banco atencion (warning)

;   Declarar  equs

acum        equ        0x20        ; se declaran acum
stat        equ        0x21        ; y stat para interrpciones
reg1        equ        0x22        ; siempre se necesitan unos
reg2        equ        0x23        ; de registros auxiliares
CONTA1 equ        0x24        ; contador de pasos

PULSO        equ        0X2A      ;


#DEFINE   BANCO0   BCF   STATUS,5   ; RP0 = 0
#DEFINE   BANCO1   BSF   STATUS,5   ; RP0 = 1


;*********************************************************************************

        ORG        0x00
        GOTO      ini
;        ORG        0x04   ;viene cuando hay una interrupcion
;        GOTO      rsi       ;salta a la rutina de rsi que atiende la interrupcion
        ORG        0X05   

ini:

        BANCO1                              ; selecciona banco1
        CLRF        TRISA                 ; PORTA todo SALIDAS
        MOVLW   b'00100111'       ; RB0,1,2,5=ENTRADAS RB7=SALIDA
        MOVWF   TRISB                 ; pon PORTB
        MOVLW   b'10000000'       ; RBPU=1 (Pull up) no se usa, flanco desc.
        MOVWF   OPTION_REG   ; pon a 1 OPTION_REG
        BANCO0                              ; volvemos a la pagina 0
        ;   Establecer estado comparadores
        MOVLW    b'00000111'    ; comparadores desactivados,
        MOVWF    CMCON           ; I/O digitales.

        CLRF        PORTB                 ; ponemos a 0 portb
        MOVLW    .8                           ; cargamos el contador
        MOVWF    CONTA1              ;

START:
        CALL        scaner ;verifico pulsos de entrada
        MOVWF   PORTB
        GOTO       START

; Escanea las entradas o pulsadores hasta que se aprieta uno

scaner: BTFSC PORTA,0 ; si el bit 0 del puertoA esta en nivel bajo
GOTO GIRAD ; gira a der.
BTFSC PORTA,1 ; aqui pueden ir otros pulsadores
GOTO GIRAI ; gira a izquierda
GOTO scaner ;repite secuencia

; ------------------  motor ------------
GIRAD: DECFSZ CONTA1,1 ; Comprueba estado contador
GOTO avanzad
MOVLW .8 ;
MOVWF CONTA1

avanzad: MOVF CONTA1,0 ;
CALL TABLA1 ; tabla de medio paso
RETURN

GIRAI: DECFSZ CONTA1,1 ; Comprueba estado contador
GOTO avanzai
MOVLW .8 ;
MOVWF CONTA1

avanzai: MOVF CONTA1,0 ;
CALL TABLA1 ; tabla de medio paso
RETURN


;------------------------ TABLA DE ENCENDIDO SECUENCIA ---------------
;   MEDIO PASO AVANZA

;               Bobina               D C B A
;               PuertoB             0  0  0  1
;               PuertoB             0  0  1  1
;               PuertoB             0  0  1  0
;               PuertoB             0  1  1  0
;               PuertoB             0  1  0  0
;               PuertoB             1  1  0  0
;               PuertoB             1  0  0  1


TABLA1: ADDWF PC,1 ;
RETLW B'00000001' ;1
RETLW B'00000011' ;2
RETLW B'00000010' ;3
RETLW B'00000110' ;4
RETLW B'00000100' ;5
RETLW B'00001100' ;6
RETLW B'00001000' ;7
RETLW B'00001001' ;8

;------------------------ TABLA DE ENCENDIDO SECUENCIA ---------------
;   MEDIO PASO RETROCEDE

TABLA2: ADDWF PC,1 ;
RETLW B'00001001' ;1
RETLW B'00001000' ;2
RETLW B'00001100' ;3
RETLW B'00000100' ;4
RETLW B'00000110' ;5
RETLW B'00000010' ;6
RETLW B'00000011' ;7
RETLW B'00000001' ;8

END

 Espero que me indiquéis los errores y cómo solucionarlos si es posible, ya se que, habrá formas
más simples de lograr lo mismo, no estaría demás hacer sugerencias al tema.

 Por cierto, he usado el icono de "insertar imagen" me presenta unos códigos, entre ellos he puesto l
a ruta del HDD y no los muestra cuando envío el post, me puede decir alguien que hago mal.

 Gracias por anticipado por todo.


Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: Astaroth_25 en 05 de Febrero de 2007, 20:31:24
Quetal... le hice unas modificaciones a tu programa para q pueda funcionar... y bueno aqui te paso el programa y el esquema en PROTEUS....no estabas lejos del proposito.... Revisa el codigo y veras las equivocaciones q tenias..
}Tambien veras q la segunda tabla quedo sobrando...

Saludos...
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: ESTECA55 en 05 de Febrero de 2007, 20:44:44
Amigo, para poner una imagen lo que debes insertar es la ruta, pero de un servidor on-line no de tu disco duro, por ende para colocar una imagen de tu disco primero debes subirla a un server, por ejemplo este (http://img69.imageshack.us/). Eso es lo que pegas entre medio de lo que aparece luego de apretar el boton de "insertar Imagen"

saludos
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 06 de Febrero de 2007, 20:46:41
 Hola! Saludos a todos.

 Esteca55, gracias por tu respuesta sobre el envío de imágenes, así, está claro.

 Gracias también a Astaroth_25 por tu inestimable ayuda, al revisar el código, veo que me
había liado usando dos tablas y no ganaba tiempo ni código. He visto que para cambiar el
sentido de giro usas bien sumar o bien restar el valor contenido en el registro CONTA1, lo
que tiene sentido y usa una única tabla, muy interesante.

 Me surge una pregunta a raíz del código, está claro que la salida de la tabla nos presenta
un valor en el registro W, entiendo que necesito una subrutina que entregue dicho valor al
puerto B donde se conectarán los 4 hilos de las bobina del motor y este sería el código:

 
Código: [Seleccionar]
SALIDA:
        MOVLW        PCL
        MOVWF        PORTB


 Puesto después de la tabla. No será necesario algún tipo de retardo, aunque corto para
consolidar las salidas, igual esta es una pregunta sin sentido ya que cada valor ha de ser leído
de la tabla.

 Aún así, tengo una duda a la hora de programar el escurridizo F628, no encuentro solución al
tipo de valor a poner en el oscilador para usar la frecuencia interna de 4MHz, al poner la
palabra de configuración, las pruebas que he hecho hasta ahora, según el MPLAB parece que
funciona, sin embargo al quemar el chip, no consigo que haga lo que esperaba. Me podéis echar
un cable, ya supongo que llegaría por averiguarlo, claro una ayuda nunca está de más.

 Gracias una vez más a todos por vuestro interés y el afán de ayuda demostrado, con gente así
vale la pena entablar amistad.

 Un abrazo a todos de Vicente.
 

 
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: Astaroth_25 en 07 de Febrero de 2007, 11:40:23
 Quetal... en realidad ya se esta entragando el valor de la tabla al PORT B, ya que el [RETLW k] coloca el valor [k] en el registro [W] y retorna hasta la ultima direccion almacenada en la PILA, y en la PILA.. la ultima direccion es la guardada cuando realizas [CALL scaner]... entonces RETLW retorna a la linea siguiente a esta instruccion.

sobre el tema de retardo si tendrias q colocarlo despues del [MOVWF PORTB].

Con respecto al tema de la seleccion del cristal...me parece q esta bien... al menos cuando cargo en codigo a programar selecciona el cristal interno [INTRC I/O]

Espero haya sido claro.....SALUDOS...

START:   
        CALL        scaner      ;verifico pulsos de entrada
        MOVWF   PORTB      AQUI SE ENTREGA EL VALOR DE LA TABLA AL PUERTO B
        [Llamada a retardo para consolidar las salidas]
        GOTO       START

;   Escanea las entradas o pulsadores hasta que se aprieta uno

scaner:   BTFSS   PORTA,0   ; si el bit 0 del puertoA esta en nivel bajo
   GOTO   GIRAD      ; gira a der.
   BTFSS   PORTA,1   ; aqui pueden ir otros pulsadores
   GOTO   GIRAI      ; gira a izquierda
   GOTO   scaner      ;repite secuencia

; ------------------  motor ------------
GIRAD:   
   movfw      CONTA1
   sublw      0x00
   btfss      STATUS,Z
   goto      $+2
   goto      $+3
   decf      CONTA1
   goto      $+3
   movlw      .7
   movwf      CONTA1
   MOVF      CONTA1,0   ;
   goto      TABLA1   ; tabla de medio paso

GIRAI:
   movfw      CONTA1
   sublw      0x08
   btfsc      STATUS,Z
   decf      CONTA1
   movfw      CONTA1
   sublw      0x07
   btfss      STATUS,Z
   goto      $+2
   goto      $+3
   incf      CONTA1
   goto      $+3
   movlw      .0
   movwf      CONTA1
   MOVF      CONTA1,0   ;
   goto      TABLA1   ; tabla de medio paso

TABLA1: ADDWF PCL,1   ;
   RETLW   B'00000001'   ;1
   RETLW   B'00000011'   ;2
   RETLW   B'00000010'   ;3
   RETLW   B'00000110'   ;4
   RETLW   B'00000100'   ;5
   RETLW   B'00001100'   ;6
   RETLW   B'00001000'   ;7
   RETLW   B'00001001'   ;8
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 07 de Febrero de 2007, 17:19:33
 Hola! Saludos.

 A ver como lo describo. El código que puso Astaroth, lo copié y le hice unos pequeños cambios
mostrados en color:
Citar
GIRAD:   
   MOVWF  CONTA1       ; movfw      CONTA1
   sublw      0x00
   btfss      STATUS,Z
   goto      $+2
   goto      $+3
   decf      CONTA1
   goto      $+3
   movlw      .7
   movwf      CONTA1
   MOVF      CONTA1,0   ;
   goto      TABLA1   ; tabla de medio paso

GIRAI:
   MOVWF  CONTA1       ; movfw      CONTA1
   sublw      0x08
   btfsc      STATUS,Z
   decf      CONTA1
    MOVWF  CONTA1       ; movfw      CONTA1
   sublw      0x07
   btfss      STATUS,Z
   goto      $+2
   goto      $+3
   incf      CONTA1
   goto      $+3
   movlw      .0
   movwf      CONTA1
   MOVF      CONTA1,0   ;
   goto      TABLA1   ; tabla de medio paso

 El motivo, no lo había visto de esta forma [movfw] y pensé que habías cambiado el orden por
motivo de las prisas ?. Lo he pasado por el MPLAB y he visto que me daba un error ya que la
segunda pasada por la subrutina 'scaner' al llegar a la tabla, entraba hasta:  ADDWF PCL,1 y de
ahí no pasaba.

 He sospechado que, algo estaba ocurriendo y simplemente he dejado el código original movfw,
he vuelto a compilar y en la prueba paso a paso todo ha funcionado de forma correcta.

 Pregunta de perogullo, cómo es que en las instrucciones de Microchip no aparece esta forma de instrucción
entiendo que es una excepción a la regla ?. Creo que esto es algo como: 'mueve el contenido del archivo f
al registro W
', pensé que era incorrecto y sin embargo funciona. Me puede sacar alguien de la duda, por
que ocurre esto.

 Gracias por vuestra colaboración, os pido un poco de paciencia, aún tengo muchas preguntas que no
me dejan ver las luz.

 Un saludo de Vicente.


Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 07 de Febrero de 2007, 17:43:01
Hola.

No funcionaba porque movwf y movfw son funciones completamente distintas.

movfw no existe en el set de instrucciones de estos PICs' pero si existe en el set de instrucciones del MPLAB.

Si pones movfw CONTA1
El MPASM lo considerará al ensamblar como:
movf CONTA1,W

Esto significa que el contenido de CONTA1 se copie a W.

Y el movwf hace exactamente lo inverso.

Hacer movwf CONTA1

Significa que el contenido de W se copie a CONTA1.

No soy partidario de usar la instruccion movfw bajo ningun aspecto porque confunde y un pequeño error de tipeo hace estragos. Cuando uno programa, facilmente la mente(valga la semi-redundancia) puede confundir ambos terminos por su similitud y podes poner un movfw en lugar de un movwf o viceversa, por eso, YO ni me acuerdo que existe(ni uso) la instruccion movfw.

Saludos!


Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: maunix en 07 de Febrero de 2007, 18:44:45
Bruno yo sí uso el macro movfw y tengo cuidado al usarlo.  Creo que tu consejo es muy bueno y didáctico y tal vez se preste a confusión pero no lo veo como algo tan grave.

Opino que en ensamblador hay que tener cuidado constantemente!! un bit mal puesto y ya la cosa no anda como uno cree.  Un movff (esto en los 18F) o un movfw o un movwf , se ven todos parecidos cuando uno pasa rápido por el mnemónico.

Lo mismo ocurre con el movf REG,f o movf REG,w  uno debe estar atento a no equivocarse.  También con los 3 parámetros que recibe una instrucción en los 18F la cosa se complica y el mareo también!

También con los cambios de página, de rom y ram, hay que tener cuidado constantemente.

En fin, son tantas las cosas a tener en cuenta que bueno, hacer movfw no es lo ideal pero creo que tampoco es la muerte para nadie y que hay que prestar atención siempre que se programa, no importa el lenguaje

En C , me pasa que a veces algo no me funciona y resulta que hice

if (a = b)

en vez de hacer

if (a == b)

y eso es porque en Delphi (lenguaje que uso casi a diario para la PC) , el operando = es la comparación pero en C es la asignación!

Ojo, no hablo de tener razón ni nada, simplemente es un punto de vista en que de seguro hay que tener cuidado para ciertas cosas cuando uno programa, hoy es el movfw y mañana será la asignación en C o cualquier otro lenguaje.

El debugging es necesario y cotidiano, no importa lo simple o complejo del código.

 :)
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: BrunoF en 07 de Febrero de 2007, 19:10:33
Seguro Mauricio. No es la muerte y no creo haberlo planteado tan drásticamente, ¿o si?. :P
Yo solamente me refería a mi opinión respecto al movfw(creí haberlo aclarado bien cuando puse el "YO" en mayúsculas en mi post).

El asm al igual que cualquier otro lenguaje de programacion son precisos y requieren, por lo tanto, de codigo preciso por parte del usuario programador.

Saludos!
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: maunix en 07 de Febrero de 2007, 19:14:03
Seguro Mauricio. No es la muerte y no creo haberlo planteado tan drásticamente, ¿o si?. :P
Yo solamente me refería a mi opinión respecto al movfw(creí haberlo aclarado bien cuando puse el "YO" en mayúsculas en mi post).

El asm al igual que cualquier otro lenguaje de programacion son precisos y requieren, por lo tanto, de codigo preciso por parte del usuario programador.

Saludos!

No, bruno, para nada lo tomé de esa forma! :) 

Simplemente agregué mi opinión del tema .  8)
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 07 de Febrero de 2007, 20:01:16
 Hola! Saludos.

 Gracias una vez más por la aclaración de Bruno y la interpretación de Maunix la entiendo, sin embargo
(y no es por falta de respeto) me quedo con la descripción de Bruno, es sin duda lo que yo interpretaba
desde un principio, de ahí la pregunta, cuya respuesta intuía pero quería cerciorarme de lo que de alguna
forma interprete.

  Gracias por la inestimable ayuda. Y ya que estamos amigos, en otro post mio anterior, pregunté por el
tema del oscilador, es decir, si quiero que el F628 funcione con el oscilador interno de 4 MHz, cómo he de
poner los bit del código de Palabra para que al insertar el chip en el circuito físico, me funcione, no se si
me he explicado.
 
 Adjunto el esquema de una aplicación simple y no me funciona, para que se me entienda.

 Gracias por todo, saludos Vicente.

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 09 de Febrero de 2007, 19:23:32

 Hola! Saludos a todos.

 Necesito una respuesta a la pregunta que hice. Como ya indiqué, he hecho unos pequeños
programas sencillos y cuando inserto el chip en el zócalo no me funcionan, es el caso de
los dos LEDs que ya comentamos unos post anteriores, los cuales van bien con el MPLAB
y sin embargo en el circuito práctico no van.

 Pensé que se trataba de la configuración de las patillas de oscilador o de la propia orden
en la Palabra de configuración, he probado a cambiar ésta última y ni por esas. Entiendo
que puedo consultar esto en esta sección aunque sea de pasada.
 
 Si alguien puede darme una solución, me sacaría del escollo en el que estoy, esto me
frena bastante ya que no logro centrarme en los pasos que siguen por el dichoso problema
que me causa que no funcione en la práctica.

 Gracias por vuestra ayuda, de veras.

  Saludos de Vicente.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: flacoclau en 09 de Febrero de 2007, 21:10:01
Hola toc toc: ¿Como están configurados los fuses del pic? puede que allí esté el error, ya que aparte del osc interno tambíen falta la conexión del mclr al positivo, por las dudas conectalo al vcc con una r de 1k.
saludos
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 12 de Febrero de 2007, 20:27:11
 Hola! Saludos a todos.

 Flacoclau, los fuses están puestos como sigue:
 
Código: [Seleccionar]
__CONFIG    _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT
 Creo que el equivalente es:  ;   __CONFIG             3F70h
 Esto lo he descubierto en el propio programa del Icprog, he ido toqueteando los distintos verificadores y
el Oscilador y Código de Protección y abajo Valor ID, aparece 'Palabra de config.: ' 3F70h, esta cambia
según los que se active y por ese motivo pensé que estaba correcto.

 El código que he probado entre otros es el de encender un LED en RB0 y RB1 que ya comenté en otro 'post' anterior,
de todos modos este es el listado:
Código: [Seleccionar]
; Que hace => Enciende un LED en RB0 y otro en RB1
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;--------------- Encabezado -------------

LIST P=16F628,         ;
include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT
 ; __CONFIG    3F70h
; Code protection OFF
; Data code protection OFF
; Low voltage programming, RB4 I/O OFF
; Brown-out reset ON
; MCLR desctivado, RA5 I/O OFF
; Watchdog timer OFF
; Power-up timer ON
; OSC es Int 4MHz,RA6 y RA7 son I/O

errorlevel      -302 ; Eliminate bank warning

reg1 equ 0x20 ; siempre se necesitan un par
reg2 equ 0x21 ; de registros auxiliares

;*********************************************************************************

ORG 0x00

MOVLW b'00000111' ; comparadores desactivados,
MOVWF CMCON ; I/O digitales.
BSF STATUS,5 ; activa la pagina 1, banco1
CLRF TRISA
CLRF TRISB ; puerto a y b todos salidaS
BCF STATUS,5 ; volvemos a la pagina 0, banco 0

CLRF PORTB ; ponemos a 0 portb

INICIO
MOVLW .170 ; b10101010
MOVWF PORTB
BCF STATUS,C ;Asegura que en la primer rotacion ingrese un 0 en PORTB,7
RRF PORTB,1 ;
CALL pausa
GOTO $-2 ; va a inicio

pausa MOVLW 0xF
MOVWF 2Ah
MOVWF 2Ch
pausa1 DECFSZ 2Ah,1 ; Retardo
GOTO pausa1
DECFSZ 2Ch,1
GOTO pausa1
RETURN


END

  Supongo que está todo bien ya que lo he pasado por el MPLAB y parece que funciona.
  En cuanto a la patilla 4 (RA5, MCLR) la tengo puesta a +Vcc mediante una resistencia de 1K.

 Gracias por tu interés, un saludo de Vicente.


 
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 15 de Febrero de 2007, 16:06:47
 Saludos a todos.

 Sigo esperando una respuesta que me ayude con el problema que vengo
padeciendo, como dije en el post anterior. Hay algún motivo que no haya
considerado para lograr que el F628 me funcione, cómo puedo saber si
funciona el oscilando interior, he probado a poner oscilador en IntRC I/O
y no parpadean los LEDs que se supone deben intercambiar su estado
uno respecto del otro, en otra prueba he cambiado el oscilador a XT con
idéntico resultado.  :?

 No pienso rendirme, pero no sería más lógico que un colega me echara
un cable indicándome dónde tengo el error, por que lo hay, de eso estoy
seguro, igual es una tontería (para el que ya sabe nadar, el agua no le asusta),
me explico?

 Gracias de antemano y como siempre un saludo de Vicente.  :)

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: flacoclau en 20 de Febrero de 2007, 21:32:58
Hola Toc toc: perdón se me pasó por alto este hilo y veo que nadie te respondió, espero aún poder serte útil o mejor que hayas solucionado tu problema 8)
 bueno el tema es que tenés bien configurados los fuses y aparentemente el circuito está bien.

ahora en tu programa creo ver un par de errores y si soy yo el equivocado por favor que me corrijan.

-Aquí mueves un literal al registro W , yo pondría 0xFF en vez de 0xF para más seguridad, no sé si así como lo pusiste está correcto pero por las dudas...
aparte con solo F osea 16 solo tendrás 256 microsegundos de retardo en ambos bucles por lo que no alcanzarás a percibir el parpadeo, con FF osea 255 tendrás alrededor de 65 milisegundos que es poco pero quizás se vea. Lo mejor sería poner otro bucle más para llevar la cuenta a 1 segundo aproximadamente  8) .

pausa   MOVLW      0xF

Esto que ponés así:

pausa   MOVLW      0xF
   MOVWF      2Ah
   MOVWF      2Ch
pausa1   DECFSZ   2Ah,1      ; Retardo
   GOTO      pausa1
   DECFSZ   2Ch,1
   GOTO      pausa1
   RETURN

Yo lo pondría así:

pausa   MOVLW      0x0F
   MOVWF      2Ah
   MOVWF      2Ch
pausa1   DECFSZ   2Ah,1      ; Retardo
   GOTO      pausa1
   MOVLW      0x0F
   MOVWF      2Ah
   DECFSZ   2Ch,1
   GOTO      pausa1
   RETURN

Saludos.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 21 de Febrero de 2007, 09:23:21
 Gracias amigo Flacoclau, en cierto modo tenías razón, el tiempo de pausa era corto, aunque eso no era
todo. Primero he alargado la pausa a 0xFF como tu me recomiendas, sólo que el código es más corto como
yo lo tengo, ya que, se carga al principio de la subrutina:

 pausa    MOVLW    0xFF      ; Retardo
             MOVWF     2Ah
             MOVWF     2Ch

pausa1   DECFSZ      2Ah,1      ; Lazo interior
             GOTO        pausa1   
             DECFSZ    2Ch,1
             GOTO        pausa1
             RETURN
 
 El caso es que en el protoboard, había puesto los LEDs a masa, cuando lo que debía hacer es ponerlos a +5V
que es como deben estar, me descuidé, el esquema estaba correcto y sin embargo la práctica, ya ves, quien
lo iba a decir.

 De nuevo gracias por colaborar. Ya he programado con éxito un F628,  :-/

 Saludos de Vicente.


Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: micro_cadaver en 21 de Febrero de 2007, 12:45:16
hola disuclpa te queria preguntar si ya lo has grabado el 628A pero utilizando el oscialdor interno.  :-/
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 21 de Febrero de 2007, 13:08:57
 Que hay, un saludo.

 Si, amigo micro_cadaver, efectivamente he quemado el F628 que, es el yo tengo (aquí en mi ciudad no hay otro)
(y esto, si es penoso, ya contaré en otro post, el porque es penoso), y me funciona, espero haber dado respuesta.

 Por cierto, estoy simulando en el MPLAB el listado del motor pap que ya se comentó en un post anterior que, me
funcionaba, ahora, le he hecho unos cambios y no encuentro el por que no me saca por el PORTA el valor que
recoge de la tabla.

 Por partes, el cambio que he realizado es que los RA0-RA3 deben ser la salida al driver del motor, y los RB0-RB2
los 3 pulsadores, de modo que si RB0 se pulsa, gira a D, si RB1 se pulsa, gira I y si RB2 se pulsa se para el motor.
Pues, resulta que al simular paso a paso con el MPLAB, las salidas por PORTA, no cambian y no veo el motivo.

 A ver si alguien con luces, me aclara este problema.

 Saludos de Vicente.


Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 21 de Febrero de 2007, 13:28:49
 Bueno, este es el motivo que en el post anterior comenté que es una pena. Voy a hacer público un hecho
que (tal vez no es el sitio indicado, espero sepan disculpar los mantenedores del foro), en su momento yo
he sido por algún tiempo el Jefe de ventas de la zona de levante en España (en nómina) para la empresa
SAGITRON SA. (sin animo de menos precio a la misma). El caso es que en noviembre pasado se realizó un
seminario en Valencia (Hotel Sidi Saler) sobre los PIC y al que fui invitado a asistir.

 Casualmente, ese día estaba de vacaciones en Benidorm y tuve que desplazarme hasta el Sidi Saler, tome
un bus y con mi coche llegué a la cita. Entre tanto la grúa municipal me costó 250 Euros (vaya costo el dichoso
seminario). Los viejos excompañeros, me recibieron muy efusivamente, en su momento le pedí unas muestras
al encargado de las mismas y me prometió dichas muestras. Luego, des hice el camino hecho y volví a estar
en Benidorm.

 El caso, en resumidas cuentas, es que nunca me enviaron las muestras ( 2-PIC16F628A, 2-PIC18F2550,
2-PIC184550 y 2-PIC16F877A) para mis prácticas. Nadie podrá decir que (en caso de que algún día me las
mandaran), el costo no ha sido elevado, claro que sí.

 Uf!! Ahora me siento mejor. No me importa que no me las envíen, que más da, ya las conseguiré por otros
cauces, seguro!!.

 Y perdón a todos, por esta denuncia pública.

 Saludos de Vicente.
 

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: micro_cadaver en 21 de Febrero de 2007, 14:26:18
añap y dime qprogramador usas para grabar el 628a con oscilador interno?, te lo digo porq yo tenia el picstarplusa antiguo (en realidad no es mio pero lo usaba con el 628 :mrgreen:). y luego aparecio el 628A y ya no puude grabarlo, asi q opte por los grabadores q estan por todas partes repartidos, aisq me he armado hasta la fecha como 5 de esos y ninguno me graba el 628a en modo oscilador interno (cuando le pongo con xtal ahi si funcionan ).
un saludo y gracias por responder  :-/
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 21 de Febrero de 2007, 16:00:37
 Vaya, amigo micro_cadaver, el quemador que uso es el único que tengo, se trata del TE20se, lo cierto es
que en alguna ocasión me ha dado problemas, realmente no son problemas del TE20se, el problema
principalmente radica en la configuración del mismo. Este es el caballo de batalla de este quemador, por
cierto estoy usando el Icprog, naturalmente.

 Respecto a la palabra de configuración del F628, es: 3F70h  o lo que es lo mismo:

  __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT

 Mira, si no tienes claro como has de poner la dichosa 'palabra', yo te digo lo que hago. Inicio el Icprog y le
voy activando las distintas opciones que presenta, de modo que, voy observando como cambia el valor que
muestra debajo del valor de ID:

 En definitiva, en mi caso, en:

  Oscilador: = IntRC I/O
  Cód. Protec. = CP OFF
  PWRT = Act.
  MCLR = Act.
  BODEN = Act.

 Si no te aclaras en su configuración, dímelo y lo describo, aunque es bastante conocido, avísame.

 Saludos de Vicente.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: micro_cadaver en 21 de Febrero de 2007, 16:23:20
pues no entiendo cuando me dices de aclarar la configuracion.... mejor dime nomas  :mrgreen: lo q ibas a escribir
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 22 de Febrero de 2007, 09:13:44
 Saludos a todos.

 Por fin he puesto el Proteus en mi PC y he probado de simular el código del motor paso a paso
que en días pasados discutimos en este hilo. El caso es que me ha costado un poco la susodicha,
pero por fin parece que funciona.

 Y digo que parece porque sólo gira 3/4 del total, creo que es debido a los datos  de la tabla, la cual
consta de 8 pasos, cuando el motor tiene 24 pasos, eso, si no  recuerdo mal. Por lo tanto he recompuesto
la tabla del siguiente modo:
Código: [Seleccionar]
  TABLA1: ADDWF PCL,1   ;
   RETLW   B'00000001'   ;1
   RETLW   B'00000010'   ;2
   RETLW   B'00000011'   ;3
   RETLW   B'00000100'   ;4
   RETLW   B'00000101'   ;5
   RETLW   B'00000110'   ;6
   RETLW   B'00000111'   ;7
   RETLW   B'00001000'   ;8
   RETLW   B'00001001'   ;9
   RETLW   B'00001010'   ;10
   RETLW   B'00001011'   ;11
   RETLW   B'00001100'   ;12
   RETLW   B'00001101'   ;13
   RETLW   B'00001110'   ;14
   RETLW   B'00001111'   ;15

 Supongo que no habrá problemas con aplicar tensión a los cuatro pines RA0-RA3 del PIC, lo digo, por
si hay excesivo consumo.

 Por otra parte, en la simulación, me presenta cierto problema, ya que, si conecto las 4 salidas al motor, no
gira, en cambio si 'suelto' una el motor gira, aunque siempre 3/4.

 Pueden darme alguna idea para solventar el problema. Es necesaria una tabla para que funcione el motor.

 Gracias una vez más por los comentarios.

 Saludos de Vicente.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 03 de Marzo de 2007, 18:17:55
 Saludos a todos,

  Mientras espero una respuesta a mi anterior consulta y para no bajar la guardia, me propuse
hacer un ejercicio de un temporizador de 1 s y para poder controlar su eficacia, cada vez que
pasa el tiempo previsto, envía un cambio al puerto B, donde hay un LED en RB0 y otro en RB1
de esta forma se conmuta su estado.

 He usado una rutina de tiempos y la subrutina del encendido por cambio de estado en las líneas
del puerto B.

Código: [Seleccionar]
; Fecha: 03 Mar 2007 18:01:29 GMT
; Que hace => Enciende un LED en RB0 y otro en RB1 con pausas de 1 segundo
; Delay = 1 segundo : Clock frequency = 4 MHz
;
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;--------------- Encabezado -------------

LIST P=16F628, ; usar PIC 16F648A
include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT

; Code protection OFF
; Data code protection OFF
; Low voltage programming, RB4 I/O OFF
; Brown-out reset ON
; MCLR desctivado, RA5 I/O OFF
; Watchdog timer OFF
; Power-up timer ON
; OSC es Int 4MHz,RA6 y RA7 son I/O

errorlevel      -302, 306 ; Eliminate bank warning

d1 equ 0x20 ; siempre se necesitan un par
d2 equ 0x21 ; de registros auxiliares
d3 equ 0x22

; Actual delay = 1 seconds = 1000000 cycles
; Error = 0 %
ORG 0x00

;*********************************************************************************

MOVLW b'00000111' ; comparadores desactivados,
MOVWF CMCON       ; I/O digitales.
BSF STATUS,5 ; activa la pagina 1
CLRF TRISA
CLRF TRISB   ; puerto a y b todos salidaS
BCF STATUS,5 ; volvemos a la pagina 0

CLRF PORTB ; ponemos a 0 portb
INICIO:
MOVLW .170 ; b10101010
MOVWF PORTB
CALL pausa
BCF STATUS,C ; Asegura que en la primer rotacion ingrese un 0 en PORTB,7
COMF PORTB,1
CALL pausa
GOTO $-2    ; va a inicio


pausa: MOVLW 0x07 ; Retardo
MOVWF d1 ;2Ah
MOVWF 0x2F
MOVWF d2
MOVWF 0x03
MOVWF d3

pausa1:
        DECFSZ   d1,1 ; Lazo interior
GOTO pausa1
DECFSZ   d2,1
GOTO pausa1
DECFSZ   d3,1
GOTO pausa1
RETURN
 
        END

 Lo expongo en este lugar por tratarse de un ejercicio que funciona y como está en ensamblador que mejor lugar.

 En cuanto al control de motor paso a paso, estoy  pensando de empezar con otro planteamiento
por lo visto, ??, está muerto el tema.

 Saludos a todos de Vicente.  :)

 
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 26 de Marzo de 2007, 09:17:51
 Hola! De nuevo por aquí.

 Al fin he podido hacer que me funcione el código del control para el motor pap, aprovechando parte del código que tan
amablemente me paso el amigo Astaroth en [respuesta 53] ya que he añadido una pausa para control de la velocidad.
Este es el código usado:
Código: [Seleccionar]
;--------------- Encabezado -------------
TITLE "pap01.asm" ; MPLAB solo admite nombres de 9 letras
SUBTITLE "Revision Nº 2"


LIST   P=16F628       
                #include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT


   ERRORLEVEL      -302      ; Elimina banco atencion (warning)

;   Declarar  equs

acum   equ        0x20        ; se declaran acum
stat   equ        0x21        ; y stat para interrpciones
reg1   equ        0x22        ; siempre se necesitan unos
reg2   equ        0x23        ; de registros auxiliares
CONTA1 equ        0x24        ; contador de pasos
PULSO  equ        0X2A      ;
D0     equ 0x25 ; siempre se necesitan un par
D1     equ 0x26 ; de registros auxiliares
d2     equ 0x27
d3     equ       0x28

#DEFINE   BANCO0   BCF   STATUS,5   ; RP0 = 0
#DEFINE   BANCO1   BSF   STATUS,5   ; RP0 = 1


;*********************************************************************************

        ORG        0x00
        GOTO      ini
;        ORG        0x04   ;viene cuando hay una interrupcion
;        GOTO      rsi       ;salta a la rutina de rsi que atiende la interrupcion
        ORG        0X05   

ini:
        BANCO1                              ; selecciona banco1
        MOVLW    b'00001111'
        MOVWF   TRISA                 ; PORTA todo SALIDAS
        MOVLW    b'11110000'      ; RB0,1,2,5=ENTRADAS RB7=SALIDA
        MOVWF   TRISB                 ; pon PORTB
        MOVLW    b'10000000'      ; RBPU=1 (Pull up) no se usa, flanco desc.
        MOVWF   OPTION_REG   ; pon a 1 OPTION_REG
        BANCO0                              ; volvemos a la pagina 0
        ;   Establecer estado comparadores
        MOVLW    b'00000111'      ; comparadores desactivados,
        MOVWF    CMCON             ; I/O digitales.

        CLRF        PORTB          ; ponemos a 0 portb
        MOVLW    .8                ; cargamos el contador
        MOVWF    CONTA1              ;


START:   
              CALL        scaner      ;verifico pulsos de entrada
              MOVWF   PORTB      ;AQUI SE ENTREGA EL VALOR DE LA TABLA AL PUERTO B
                                  ; [Llamada a retardo para consolidar las salidas]
              CALL     pausa
              GOTO     START

;   Escanea las entradas o pulsadores hasta que se aprieta uno

scaner:   BTFSC   PORTA,0   ; si el bit 0 del puertoA esta en nivel bajo
              GOTO   GIRAD      ; gira a der.
              BTFSC   PORTA,1   ; aqui pueden ir otros pulsadores
              GOTO   GIRAI      ; gira a izquierda
              GOTO   scaner      ;repite secuencia

; ------------------  motor ------------
GIRAD:   
            movf      CONTA1,W
            sublw      0x00
            btfss      STATUS,Z
            goto      $+2
            goto      $+3
            decf      CONTA1,1
            goto      $+3
            movlw      .7
            movwf      CONTA1
            MOVF      CONTA1,0   ;
            goto      TABLA1   ; tabla de medio paso

GIRAI:
            movf      CONTA1,W
            sublw      0x08
            btfsc      STATUS,Z
            decf      CONTA1,1
            movf      CONTA1,W
            sublw      0x07
            btfss      STATUS,Z
            goto      $+2
            goto      $+3
            incf      CONTA1,1
            goto      $+3
            movlw      .0
            movwf      CONTA1
            MOVF      CONTA1,0   ;
            goto      TABLA1   ; tabla de medio paso

TABLA1: ADDWF PCL,1   ;
   RETLW   B'00000001'   ;1
   RETLW   B'00000011'   ;2
   RETLW   B'00000010'   ;3
   RETLW   B'00000110'   ;4
   RETLW   B'00000100'   ;5
   RETLW   B'00001100'   ;6
   RETLW   B'00001000'   ;7
   RETLW   B'00001001'   ;8

; una pausa para que se estabilice el dato

pausa:  movlw     .11        ; 1 set numero de repeticion  (B)
         movwf     D0        ; 1 |
Loop1:  movlw     .110      ; 1 set numero de repeticion  (A)
         movwf     D1        ; 1 |
Loop2:  clrwdt              ; 1 clear watchdog
         clrwdt              ; 1 ciclo delay
         decfsz    D1, 1     ; 1 + (1) es el tiempo 0  ? (A)
         goto      Loop2    ; 2 no, loop
         decfsz    D0,  1    ; 1 + (1) es el tiempo 0  ? (B)
         goto      Loop1    ; 2 no, loop
L1:     goto L2         ; 2 ciclos delay
L2:     clrwdt              ; 1 ciclo delay
         return              ; 2+2 Fin.

        END

 He logrado quemar el F628 y lo he puesto en marcha. El resultado es lo esperado, la velocidad de rotación es constante y
la dirección es la elegida en cada caso con el pulsador, uso pulsadores para que sólo gire durante el tiempo de contacto y
de esa forma consigo que pare al terminar la presión sobre el pulsador.

  No puedo adjuntar imagen del proyecto, si alguien está interesado se lo paso por e-mail.

 Saludos de Vicente. :-/

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: maunix en 26 de Marzo de 2007, 11:53:33
Recién leo el hilo.

¿Al final, era el simulador o tu código lo que no hacía andaba bien ?

Te lo pregunto porque hace tiempo tuve problemas con el Proteus simulando la grabación/lectura de una memoria i2c.  no lo pude simular, siempre me daba algún error o directamente no veía nada en la memoria 'grabada'.  Cansado de simular y algo convencido de que tan mal no estaba mi código, lo grabé y lo cierto es que en la vida real funcionaba!! así que esa fue una de las razones por las cuales le comencé a tener desconfianza al Proteus (o al menos a esa versión que yo tenia en mis manos). 

Es muy probable que haya sido que yo no lo supiera usar bien y sacarle el jugo, pero bueno, tal vez en tu caso te pasó algo similar y sería bueno saberlo.

Saludos
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 29 de Marzo de 2007, 04:45:45
 Saludos Mauricio, no se a que te refieres, creo que te saltaste al hilo que no era, yo he presentado el código del control del
motor paso a paso que, tanto me ha costado de poner en forma. Primero lo simulé con el Proteus y finalmente lo pasé al PIC
vi que iba muy lento y probé distintas opciones hasta que encontré la velocidad que considero idónea para muestra aunque
todo esto, me ha servido para gestionar el retardo que, es de lo que me he servido para modificar la velocidad del motor pap.

 Ahora pretendo iniciar un nuevo proyecto, con el cual entiendo que me puedes ayudar, se trata de un control PWM para
controlar la velocidad de un motor de CC, del que no tengo ninguna característica. Sólo se que aplicándole tensión en sus dos
polos gira en un sentido y cambiando los polos cambia el sentido de giro, la tensión que le aplico es de 5V =.

 Por mi parte, respecto de los PWM, sólo se que se trata de pulsos modulados mediante los cuales se consigue variar a
voluntad la velocidad de giro de un motor y hasta aquí mi experiencia (o sea rien de rien que diría un francés).

 Espero que entre tu y el resto de amigos como Bruno y Gio entre otros me echéis una ayudita.

  Saludos de Vicente.
 
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 21 de Mayo de 2007, 19:50:52
 Hola! Saludos a todos.
 
 Hace algún tiempo que no podía ponerme en contacto con el foro, a pesar de haber tenido conexión,
cosas que pasan. Ahora, ya estoy de nuevo por aquí, dando la tabarra.

 Mauricio, dime si puedes ayudarme en el tema del PWM. En este momento pretendo abordar el control
PWM de un motor de CC, bueno, los datos que tengo del mismo son escasos, es de un desguace de una
impresora y lo unico que se es que funciona a 5V, el par motor es relativamente bueno ya que presenta
bastante fuerza a la tracción.

 Vereis, he leido algo sobre una fresadora y como he visto las posibilidades de hacer los circuitos impresos
con tanta calidad, la verdad, me ha impresionado y como tengo tiempo, he pensado en iniciarme en el
tema.

 Que te parece Mauri

 Saludos

Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 08 de Junio de 2007, 09:18:30
 Saludos a todos.

 Mauricio, he estado proyectando una plaquita pcb para el control de 8 servos con el PIC16F84A, con un RS232 para manejarlo
desde el PC. Todo ha ido bien hasta que he tropezado con un imprevisto, el 'Hiperteminal' de Microsoft, el problema surge cuando
tengo que configurar el 'Hipeterminal', me esta dando problemas para poder ejecutar las ordenes a transmitir a la plaquita, ésta
se comunica mediante el SR232 para indicarle que servo ha de moverse y hasta donde en su recorrido.

 Más abajo adjunto una foto de la pcb. Si alguien me puede ayudar a configurar el 'Hiperterminal' le agradecería el detalle ya que
no encuentro la forma, llevo como 4 días haciendo pruebas y no puedo seguir por este problema.

(http://www.hispavila.com/chipspic/servos/4servos84a_files/f-servocrtl.jpg)
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: jfh900 en 08 de Junio de 2007, 09:45:20
¿Que problema tienes con el hiperterminal?, puedes dar más datos.

Un saludo
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 08 de Junio de 2007, 11:38:13
  Vamos a ver si me explico Jesús. Voy a Inicio/todo los Programas/Accesorios/Comunicaciones/Hiperterminal y Enter.
Me presenta la Ventana del Hiperterminal. Ahora, voy a Nueva conexión, le doy un nombre y elijo COM1, y me
muestra la ventana Configuración de puerto, pongo:
 
  Velocidad del puerto serie a 2400 baudios, ocho bits de datos y un bit de parada, sin paridad y en control de
flujo 'Hardware'. Que es lo que se debe poner y Acepto.

 En ese momento sólo muestra la ventana del terminal y ya no hay forma de escribir ni seguir, o eso es lo que me
parece.

  Cómo puedo enviar un dato, debería poder enviar un dato como: 0 (16, 32, 48, 64, 80, 96) para resetear o poner
en un punto el servo correspondiente.

 A todo esto, he comprobado que la tensión le llega a cada punto de los zócalos tanto del PIC16F84A como del
MAX232, las tensiones en la patilla 6 de -10 V y en la patilla 2 de +10 V son correctas, a expensas de la propia
transmisión que es donde me quedo atascado.

 No se si estos datos son los que me pides amigo Jesús.

  Gracias por todo.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: jfh900 en 08 de Junio de 2007, 13:08:09
Yo sigo los mismos pasos que tú y al final despues de aceptar los parámetros de transmisión me queda la pantlla del hyperterminal en la cual puedo escribir sin ningún problema y al dar el enter lo transmite. Podrias poner una imagen o mejor un video del proceso que sigues?.

Un saludo.

(http://img87.imageshack.us/img87/8031/hyperterminalbg1.jpg)
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 09 de Junio de 2007, 08:24:22
 Saludos de nuevo. Hola Jesús.

 Vaya, no sabría decir como ha ocurrido, el caso es que no estaba conectando la alimentación a la pcb, sólo había conectado
el cable DB9 al PC y un servo para intentar moverlo. Vale, pongo el cable de la alimentación y cuando hago la prueba con dos
puentes para simular el intercambio de datos entre el PC y el PIC, todo parece que funciona, sin embargo, cuando sustituyo
los puentes por  el PIC, resulta que no funciona ni el Hiperterminal ni se mueve el servo.

 He pensado si será problema del archivo hex, ya que al conectar todo, en el terminal debería aparecer un mensaje y no lo
presenta.

 No se que puede ser, voy a seguir indagando y simular el código para depurar en lo posible el mismo.

 Gracias por la ayuda.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: jfh900 en 09 de Junio de 2007, 08:35:57
Has repasado haber si los cables los tienes bien conectados, el RX con el TX de cada uno de los lados (2-3 y 3-2) y si las masa están bien puestas en los conectores.

Un saludo.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: toc-toc en 14 de Junio de 2007, 17:24:14
 Hola! Amigo jfh900 y todos los demás.

 A lo que iba, puede que tengas razón, estoy usando el mismo cable que normalmente uso para el TE20se y ahora
que leo tu mensaje he caído en la cuenta.

 Voy a probarlo, bueno, eso será en tener un poco de tiempo, ya que he tenido problemas con mi PC y el XP que se
me ha escoñado, voy recuperando cosas y otras... bueno lo dicho, lo probaré y ya os cuento.

 Gracias por todo.
Título: Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
Publicado por: maunix en 15 de Junio de 2007, 08:57:46
Revisa también si tienes control de flujo por hardware o ninguno.  Si no haces uso de las señales DSR, DTR, RTS y CTS, usa ninguno.

Saludos
Título: Programa de ascensor de 4 pisos con motor de DC.
Publicado por: ottanawa en 03 de Septiembre de 2012, 23:10:57
Elevador de 4 Pisos con pic y motor de DC.
Hola a todos son nuevo en este foro y bueno les quería comentar que estoy iniciándome en pic, en donde bueno estoy haciendo un elevador para un proyecto de 4 pisos con un motor de DC, el cual va a contener un teclado matricial 4x3.
Decidí iniciar un nuevo tema, debido a que no encontré realmente en la búsqueda, y además en temas ya iniciados no pude obtener una respuesta.
Espero poder tener una solución.
El programa que he realizado hace la secuencia correcta cuando pulso solamente un pulsador, pero no puedo hacer que sean pulsados mas de un pulsador y que el ascensor recorra una secuencia determinada.
ejemplo: si la cabina se encuentra en el piso 1, y es llamado del 4, el elevador comienza a subir, pero si antes de llegar al 3 se pulsa el mismo, en su viaje, va a parar primero en el 3 y luego va a seguir subiendo hacia el 4. Eso es lo que realmente deseo.
Además otra de las cosas que me falta es que una vez pulsado una tecla, que se encienda un led hasta que llegue al piso correspondiente.
Les quiero comentar lo que hice y funciona, sensores de detección de la cabina, de puerta, luz de la planta, alarma, mostrar piso en display de siete segmentos.

Les adjunto la parte del programa hasta donde tengo hecho en ccs pic y el circuito en proteus.
Desde ya muchas gracias. Saludos