Autor Tema: Ayuda inicio  (Leído 32954 veces)

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

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #45 en: 16 de Junio de 2006, 06:50:21 »
Pibe, eso es perfecto, así también aprendo a organziar bien el programa.

Lo que quiero hacer es el antirrebotes en la electrónica.

Mirad, he empezado lo de pulsar y encender RA0, pulsar otra vez y poner RA0 y RA1 ON,etc...

Sería hasta RC3, pero seguro existe otra opción menos larga.
Citar
      btfss    PORTE,0            ;si RE0 es 1 saltara a enciende si es 0 salta a espera_apaga
      Goto     espera_apaga      ;salta a la etiqueta ESPERAR
      GOTO   enciende

enciende
      movlw    b'00000001'      ;cargo a 1 en W
      movwf    PORTA   ;pongo a 1 RA0 del puerto A
      btfss   PORTE,0       ;si RE0 es 1 saltara a enciende2 si es 0 salta a enciende
      goto enciende
      GOTO enciende2

enciende2
      movlw b'00000011'
      movwf   PORTA
      btfss   PORTE,0   ;si RE0 está a 1 saltara a enciende3 si es o a enciende2
      goto    enciende2
      goto   enciende3
      
enciende3
      movlw b'00000111'
      movwf   PORTA
      btfss   PORTE,0    ;si RE0 está a 1 saltara a enciende4 si es o a enciende3
      goto    enciende3
      goto   enciende4

enciende4
      loop goto loop

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda inicio
« Respuesta #46 en: 16 de Junio de 2006, 08:28:23 »

   btfss    PORTE,0            ;si RE0 es 1 saltara a enciende si es 0 salta a espera_apaga
      Goto     espera_apaga      ;salta a la etiqueta ESPERAR (no veo la etiqueta espera_apaga)
      GOTO   enciende ; esto es innecesario , ya que salta a la linea que sigue

enciende
      movlw    b'00000001'      ;cargo a 1 en W (aqui es mas corto BSF PORTA,0)
      movwf    PORTA   ;pongo a 1 RA0 del puerto A
      btfss   PORTE,0       ;si RE0 es 1 saltara a enciende2 si es 0 salta a enciende
      goto enciende
      GOTO enciende2 ; innecesaria

enciende2
      movlw b'00000011'
      movwf   PORTA
      btfss   PORTE,0   ;si RE0 está a 1 saltara a enciende3 si es o a enciende2
      goto    enciende2
      goto   enciende3 innecesaria
      
enciende3
      movlw b'00000111'
      movwf   PORTA
      btfss   PORTE,0    ;si RE0 está a 1 saltara a enciende4 si es o a enciende3
      goto    enciende3
      goto   enciende4 innecesaria

enciende4
      loop goto loop
[/quote]

Sube el programa completo porque no sé si todo el resto está correcto.
Otra cosa, te paso un programa que te genera demoras en asembler. Solo ponle la frecuencia de trabajo y la demora en milisegundos. Copias y pegas a tu programa. Tendras que definir algunas variables (PDel0 , PDel1 etc etc) al principio del programa. Mira el programita que te genere y que variables te pide que definas.
Si no lo haces el mismo MPLAB te dirá cuales son las variables sin definir cuando ensambles.

Ejemplo:


PDel0 equ 20h ;registro para variable del contador de la pausa
PDel1 equ 21h ; registro para variable del contador de la pausa

org 00h
goto Inicio
...
.....

end

Vas bien, aunque te has liado un poco con el programa, a ver si me hago tiempo y te lo modifico.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda inicio
« Respuesta #47 en: 16 de Junio de 2006, 09:39:00 »

      LIST p=16f877a      ;list directive to define processor
      #include <p16f877a.inc>   ;processor specific definitions
       __config  _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _BODEN_OFF
   ERRORLEVEL -302      ;suppress "not in bank 0" message
   ERRORLEVEL -203      ;suppress  message
   ERRORLEVEL -305      ;suppress  message
   ERRORLEVEL -205      ;suppress  message

temp_1 equ 20h
temp_2 equ 21h





;************************ RESET Y VERCTORES INT *******************************
        org     00h
         goto    Inicio           ;Reset vector 0
        org     0x05            ;Interrupcion vector



Inicio   ;------------------------ INICIALIZA MICROPOCESADOR ---------------------------
;Inicializa puertos
IniPorts
      clrf    PORTA
       clrf    PORTB                    ;Outputs low
        clrf   PORTC
        clrf    PORTD                  ;       /
       clrf    PORTE                   ;       /
          bsf STATUS,RP0               ;Selecciona Bank 1
      movlw   0x06                 
         movwf   ADCON1
      clrf   TRISA
      clrf   TRISB
      clrf    TRISC
      clrf    TRISD                   
          MOVLW b'11101111'   ;ojo que TRISE tambien actua sobre puerto D y
      movwf TRISE         ; es analógico
      bcf STATUS,RP0         ;Selecciona Bank 0


Main
clrf PORTA         ;inicio puerto A
call demora80ms      ; espera antirrebote
btfss PORTE,0      ;pin 0 a +?
goto $-1         ;aun no, volvemos a la instrucción anterior
bsf PORTA,0         ; si, activa led 0

call demora80ms
btfss PORTE,0
goto $-1
bsf PORTA,1

call demora80ms
btfss PORTE,0
goto $-1
bsf PORTA,2

call demora80ms
btfss PORTE,0
goto $-1
bsf PORTA,3

call demora80ms   ; espera
btfss PORTE,0   ; y testeo para volver a empezar
goto $-1

goto Main

; Demora 80ms a 4mhz
demora80ms   movlw   0xFF
      movwf   temp_1
      movlw   .105
      movwf   temp_2
      decfsz   temp_1,f
      goto   $-1
      clrwdt
      decfsz   temp_2,f
      goto   $-4
      return   
      end


He puesto 80ms porque no tengo pulsadores a mano y tuve que pulsar con un cablecito :P
Si ves que es demasiado, baja el .105 de la demora a .27 (20ms).
Obviamente se puede reducir código con un contador y comparando resultados pero
para esta aplicación no lo veo necesario liarse tanto.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #48 en: 16 de Junio de 2006, 09:54:11 »
Pibe, pero lo has simulado en realidad?  :-)

Estoy haciendo pruebas para que empieze a pulsar hasta RA3. Te copio el código.

Por cierto, veo simbolos que no conozco... $-1?


Por cierto ejecutando el programa en circuito el led se queda encendido, peroen realidad se apagan y encienden muy rápido...

Es como si el programa no se parara. Yo de momento quiero que cuando pulse 4 veces encienda hasta RA3 y si pulso otra vez vuelta a empezar.

Luego colocaré el programa en el pic a ver que hace (el tuyo).
Código: [Seleccionar]
LIST p=16f877      ; Indicamos que se utiliza el PIC16F877
   
#include <p16f877.inc>  ;y esto también

__config  _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF

; Esto es para suprimir los mensajes de warning del MPLAB ( a veces son molestos)
   ERRORLEVEL -302      ;suppress "not in bank 0" message
   ERRORLEVEL -203      ;suppress  message
   ERRORLEVEL -305      ;suppress  message
   ERRORLEVEL -205      ;suppress  message


        org     00h              ; Vector de reset (aqui viene el micro cuando arranca)
        goto    inicio            ; Y inmediatamente lo mandamos a Inicio
        org     04h              ; Vector de interrupciones             
        goto interrupciones ; para uso futuro si usas interrupciones
        org     05h              ; Aqui le dices al micro en que posicion de memoria comienza lo que sigue

   
inicio

bsf STATUS,RP0 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
bcf STATUS,RP1 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
Movlw 07h ; pongo en digital el puerto A
movwf ADCON1 ; pongo en digiatl el puerto A
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISA ; puerto A todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISB ; puerto B todos salidas
MOVLW 0X00   ; carga 00000 en W
MOVWF TRISC ; puerto C todos salidas
MOVLW b'11101111' ; carga 1111 en W
MOVWF TRISE ; puerto E todo entradas digitales
bcf STATUS,RP0 ; volvemos al banco 0 poniendo RP0 a 0 y RP1 a 0
bcf STATUS,RP1 ; volvemos al banco 0 poniendo RP0 a 0 y RP1 a 0

espera_apaga ;etiqueta
CLRF PORTA ;inicializamos a 0 el puerto A
CLRF PORTB ;inicializamos a 0 el puerto B
CLRF PORTC ;inicializamos a 0 el puerto C
btfss PORTE,0      ;si RE0 es 1 saltara a enciende si es 0 salta a espera_apaga
Goto  espera_apaga ;salta a la etiqueta espera_apaga

enciende1
movlw b'00000001' ;cargo a 1 en W
movwf PORTA ;pongo a 1 RA0 del puerto A
btfss PORTE,0      ;si RE0 es 1 se saltara el goto si es 0 hace el goto
goto enciende1 ;salta a enciende1
enciende2
movlw b'00000011' ;movemos el valor 00000011 a W
movwf PORTA ;colocamos a 1 las salidas RA0 y RA1
btfss PORTE,0      ;si RE0 está a 1 se saltará el goto si es 0 hace el goto
goto enciende2 ;salta a enciende 2
enciende3
movlw b'00000111' ;movemos el valor 00000111 a W
movwf PORTA ;pasamos a 1 las salidas RA0,RA1 y RA2
btfss PORTE,0      ;si RE0 está a 1 se saltará el goto, si es 0 hace el goto
goto enciende3
enciende4
movlw b'00001111' ;movemos el valor 00001111 a W
movwf PORTA ;pasamos a 1 las salidas RA0,RA1,RA2 y RA3
btfss PORTE,0      ;si RE0 está a 1 se saltará el goto, si es 0 hace el goto
goto enciende4
clrf PORTA
goto espera_apaga
interrupciones

; Aqui escribes tu programas de interrupciones si lo tienes, sino no pasa nada. Es para usos
;futuros.
retfie


end ; aqui termina el programa       
 
 
 


Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Ayuda inicio
« Respuesta #49 en: 16 de Junio de 2006, 12:41:24 »
Hola picto un saludo, antes que nada felicitarte por el empeño que le has puesto al ensamblador y en hora buena por los avances que has logrado. Ademas de  comentar que he modificado los errores que habian quedado en el programa que he subido anteriormente :D (una disculpa, pero andaba un poco despistado :mrgreen:).

Con respecto a lo que has comentado en el mensaje anterior estoy seguro que es por lo del antirrebotes, se aconseja que cuando a un solo pulsador se asignen dos o más tareas diferentes en un programa se de be considerar el efecto de rebote.

Por eso creo que sería conveniente lo del antirrebote, como te ha comentado BrunoF anteriormente.

Saludos LabPIC
¡¡¡Viva México cabrones!!!

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #50 en: 16 de Junio de 2006, 20:15:19 »
Hola picto un saludo, antes que nada felicitarte por el empeño que le has puesto al ensamblador y en hora buena por los avances que has logrado. Ademas de  comentar que he modificado los errores que habian quedado en el programa que he subido anteriormente :D (una disculpa, pero andaba un poco despistado :mrgreen:).

Con respecto a lo que has comentado en el mensaje anterior estoy seguro que es por lo del antirrebotes, se aconseja que cuando a un solo pulsador se asignen dos o más tareas diferentes en un programa se de be considerar el efecto de rebote.

Por eso creo que sería conveniente lo del antirrebote, como te ha comentado BrunoF anteriormente.

Saludos LabPIC

Labpic, todo es gracias a vosotros, que me estais enseñando y ayudando, y poco a poco voy entendiendo algo sobre assembler. Sé que me queda muchisimo por aprender, pero espero que poco a poco y con vuestros consejos, algún día puedo yo ayudar a algún novato.

Os prometo que cuando termine lo que quiero hacer os colgaré una foto del circuito.

Lo que estoy haciendo ahora es ir probando, ya que es la primera vez que me embarco en este tipo de tareas. Una vez tenga un poco más claras las cosas y aprenda funciones nuevas, intentaré hacer el programa final desde 0 y depurandolo hasta tenerlo listo.

Como ya dije al final lo que quiero es un probador para conectarlo a una electrónica y poder ver si la electrónica funciona o nó gracias a un circuito probador hecho con pic.

También espero poder añadirle un LCD que vaya mostrando mensajes, y cuando haya terminado de probar la electr´noca muestre Pruebas Ok, etc.

De momento no sé 100% seguro como será pero si sé que más o menos será con un par d epusladores y que el display vaya guiando: Pulsa el puslador y observa la salida X , Salida X OK, etc.

Por cierto dar las garcioas a todos en especial a Labpic, pibe, BrunoF, maunix,  PAOLA09,

ME gustarñia poder compensaro de alguna manera por la ayuda y las molestias, sin vosotros estaría muy perdido aún... :-/
« Última modificación: 16 de Junio de 2006, 20:17:50 por picto »

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Ayuda inicio
« Respuesta #51 en: 16 de Junio de 2006, 20:22:54 »
Hola picto pues yo soy de Querétaro, México. Una pregunta a que te refieres:

Citar
Como ya dije al final lo que quiero es un probador para conectarlo a una electrónica y poder ver si la electrónica funciona o nó gracias a un circuito probador hecho con pic.

No te molestes por lo de la compensación, dijo para ayudar es el foro :mrgreen:. "Hoy por ti, mañana por mi :mrgreen:.

Saludos LabPIC
¡¡¡Viva México cabrones!!!

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #52 en: 16 de Junio de 2006, 21:16:52 »
Hola picto pues yo soy de Querétaro, México. Una pregunta a que te refieres:

Citar
Como ya dije al final lo que quiero es un probador para conectarlo a una electrónica y poder ver si la electrónica funciona o nó gracias a un circuito probador hecho con pic.

No te molestes por lo de la compensación, dijo para ayudar es el foro :mrgreen:. "Hoy por ti, mañana por mi :mrgreen:.

Saludos LabPIC

Me refiero a que el primer programa que haga con assembler, me refiero al terminado 100% será un circuito al que yo le conectaré unas electrónicas estropeadas y que gracias al pic y su programa, me sirva para comprobar las entradas y salidas de la eletrónica a reparar comprendes?

Un ejemplo, tengo una tarjeta eletrónica que si por el pin1 recibe 5v por el pin 2 saca 25v por ejemplo. Pues bien yo haré un circuito probador con el pic, al cual se le conectará esa electrónica que quiero verificar y yo pulsando el pulsador enviará 5v a la entrada de esa electróncia y confirmará si a la salida hay 25v (en este caso la tarejta funcionaría) y si a la salida no dá 25v el pic me mostraría ERRO EN ELETRONICA EN SALIDA 2 entiendes? Por ejemplo.

Yo soy de España!

Saludos!

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Ayuda inicio
« Respuesta #53 en: 16 de Junio de 2006, 21:22:28 »
OK, ahora entiendo :mrgreen:, me parece una buena idea de tu parte, pues a ehcarle kilos de ganas. Luego nos dices como vas.

Por cierto que aguante de tu parte, pues en el momento de publicar este mensaje en España son las 2:27 AM, demasiado temprano para estar despierto :D, o demasiado tarde para empezar a dormir :D :D.

Saludos LabPIC
« Última modificación: 16 de Junio de 2006, 21:25:47 por LabPIC »
¡¡¡Viva México cabrones!!!

Desconectado PAOLA09

  • Moderador Local
  • PIC18
  • *****
  • Mensajes: 332
Re: Ayuda inicio
« Respuesta #54 en: 16 de Junio de 2006, 21:35:09 »
Hola picto

gracias por tenerme en cuenta lastima que no he podido seguir ayudandote ultimamente, ya que me han tenido algo ocupada intentare seguir pendiente para ayudar en lo que pueda. Te aseguro que mas adelante seras tu quien termine enseñandos.  :) Siempre se empieza en ceros cuando menos se ve yahasta le enseñas a los que te ayudaron al principio intentare poder colaborarte mas  :)

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #55 en: 16 de Junio de 2006, 21:55:39 »
OK, ahora entiendo :mrgreen:, me parece una buena idea de tu parte, pues a ehcarle kilos de ganas. Luego nos dices como vas.

Por cierto que aguante de tu parte, pues en el momento de publicar este mensaje en España son las 2:27 AM, demasiado temprano para estar despierto :D, o demasiado tarde para empezar a dormir :D :D.

Saludos LabPIC

Jajaja  :D Ahora mismo son las 2:50... tengo un sueño... esto del assembler...  :D


PAOLA09, piensa que yo he empezado desde 0 y he podido seguir gracias a lo que vosotros me habeis explicado... no tenía ni idea de lo de cambiar de banco 0,1,2,, etc y eso ahora ya lo tengo claro. Si por ejemplo nadie me hubiera hechado un cable, estaría perdido...  :D Tampoco es cuestión de leerme un manual entero, siempre se entienden mejor las cosas cuando te las explica un amigo.

Ahora sí que me voy a la cama :mrgreen:

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda inicio
« Respuesta #56 en: 17 de Junio de 2006, 07:01:44 »
Holas:

El programa lo he grabado en un 877 y funciona perfectamente.
Te comento que tuve el mismo problema que me dices: cuenta sin parar , y eso se debe a que el puerto E no está con su resistencia a masa.
En resumen: Ponle una resistencia al del pin E0 de entrada a masa de 10k y el pulsador entre este pin y positivo. Entonces ese pin siempre será 0 volts y cuando pulses le entrará los +5v .

La instrucción goto $-1 le dice al micro que vaya una instrucción atrás. Si le pones goto $-2 irá 2 renglones atrás. Si pones goto $+2 irá dos renglones por delante. Es mas facil que ir poniendo etiquetas y llamándolas con el goto , no?

Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #57 en: 17 de Junio de 2006, 09:01:44 »
Holas:

El programa lo he grabado en un 877 y funciona perfectamente.
Te comento que tuve el mismo problema que me dices: cuenta sin parar , y eso se debe a que el puerto E no está con su resistencia a masa.
En resumen: Ponle una resistencia al del pin E0 de entrada a masa de 10k y el pulsador entre este pin y positivo. Entonces ese pin siempre será 0 volts y cuando pulses le entrará los +5v .

La instrucción goto $-1 le dice al micro que vaya una instrucción atrás. Si le pones goto $-2 irá 2 renglones atrás. Si pones goto $+2 irá dos renglones por delante. Es mas facil que ir poniendo etiquetas y llamándolas con el goto , no?



Pibe, gracias por la ayuda enserio.

Te cuento, el interruptor que tengo puesto en RE0 lo tengo puesto con resistencias y condensador. Durante el fin de semana no puedo probar el circuito, pero sí simularlo en proteus.

Hice un antirrebotes con condensador y rsistencia, pero aparte ccomo bien decis creo que tambien hay que hacer una demora en assembler...

Probé tu programa en el circuito y funcionaba correctamente, lo únicoque como biend ecías tendría que aumentar un poco el tiempo de demora, poque el puslador según le dabas de rápido contaba de dos en dos  :D

Pensaba que con solo el antirrebotes con condensador ya estaba, pero veo que hay que poner una demora aparte.



Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda inicio
« Respuesta #58 en: 17 de Junio de 2006, 09:36:09 »
Pero hazme caso tal y como te dije que lo conectaras: PIN E0 con resistencia a masa de 10k y pulsador entre el mismo pin y +. Ni condensador ni leches  :mrgreen:
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Ayuda inicio
« Respuesta #59 en: 17 de Junio de 2006, 10:03:40 »
Pero hazme caso tal y como te dije que lo conectaras: PIN E0 con resistencia a masa de 10k y pulsador entre el mismo pin y +. Ni condensador ni leches  :mrgreen:

Sí sí, si lo tenía desde un principio así  :-/ Tanto en Proteus como en el circuito montado en placa.

Tengo ganas de que sea lunes y puedo ponerme manos a la obra de nuevo  :lol: