Autor Tema: el assambler me crea sarpullido!!  (Leído 2860 veces)

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

Desconectado Glamorgan

  • PIC10
  • *
  • Mensajes: 6
el assambler me crea sarpullido!!
« en: 27 de Mayo de 2005, 10:19:00 »
holas!!!

Soy nuvo en todo esto y he estado intentando crear un programa para el 16F628 primo hermano del 16f84, para una aplicacion que tengo en mente, pero no consigo programar el pic.

Me he puesto a crear un codigo sencillito a ver que pasa, solamente programar un puerto como salida y poner las patillas a "1" y nada!!!

A ver si alguien me da una idea de que es lo que puedo estar haciendo mal, el pic lo programo con la T-20. Y una cosa curiosa cuando simulo el codigo con el MPLAB solo me pone los cuatro bits altos del puertoA a "1". Que esta pasandoLlorando

Poner el puerto A a"1":

STATUS   EQU   03H      ;STATUS registro
TRISA   EQU   05H      ;modo para el puerto A
PORTA   EQU   05H      ;registro del puertoA

PCON   EQU   0CH      ;reloj interno a 4MHz


;********** inicio programa   ************************************

   ORG   00H

   BCF   STATUS,7
   BCF   STATUS,6
   BCF   STATUS,5                   ;selecciono el banco0  
               
   CLRF   PORTA      ;pongo a cero el registro puertoA   
      
   BCF   STATUS,7   
   BCF   STATUS,6
   BSF   STATUS,5                    ;Selecciono el banco1

   BSF   PCON,3      ;reloj a 4MHz
         
   MOVLW   H"00"      ;input 1, output 0
   MOVWF   TRISA            
         
   BCF   STATUS,7
   BCF   STATUS,6
   BCF   STATUS,5                    ;selecciono el banco0   

   MOVLW   H"0FF"
   MOVWF   PORTA                       ;EN TEORIA PONDRIA LAS PATILLAS DEL
                                                                 ;PUERTOA A 5V (ESTADO ALTO)

   END

Gracias de antemano!! El codigo que quiero hacer es bastante mas complejo y si no puedo conseguir que funcione esteLlorica la hemos cagao luis!!

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: el assambler me crea sarpullido!!
« Respuesta #1 en: 27 de Mayo de 2005, 21:14:00 »
Buenas.

En principio te falta antes de la etiqueta END un "fin goto fin". Esto se hace para que el micro se quede ahy y no te ejecute toda la memoria de programa (que está vacía).

Tu problema es que el puerto A tiene 5 bits si no me equivoco. Se te encienden los bits PA0 a PA3 pero el PA4 no se te enciende. Esto te pasa porque este bit del puerto A es "open drain", que significa que sólo tiene transistor a masa, por lo que jamás tendrás 5V a la salida a menos que pongas una resitencia de pull-up entre esta patilla y los 5V. Haz lo mismo con el portB verás como se te encienden todos. Este fallo nos ha dado a más de uno un dolor de cabeza, pero no te preocupes que es normal en todos los PIC.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: el assambler me crea sarpullido!!
« Respuesta #2 en: 27 de Mayo de 2005, 21:17:00 »
Perdon.
Codigo:
Haz lo mismo con el portB verás como se te encienden todos.

Con esto me refiero a que en el portB todas las salidas son normales y que si haces el mismo prgrama para el puerto B se te encenderán todos

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: el assambler me crea sarpullido!!
« Respuesta #3 en: 28 de Mayo de 2005, 10:23:00 »
Tienes definido el TRISA en la dirección 05h,que es exclusiva para el PORTA.
La direccion del TRISA es la 85h

Desconectado Glamorgan

  • PIC10
  • *
  • Mensajes: 6
RE: el assambler me crea sarpullido!!
« Respuesta #4 en: 01 de Junio de 2005, 09:33:00 »
Pues resulta que el pic estaba chungo!! despues de darle muchas vueltas y tomar en consideracion vuestros consejos, me decidi a ir a la tienda y comprar otro micro y ahora este funciona gracias por los consejos!!!!

La idea que tengo en mente es controlar dos motores de continua con el pic, mediante una senal PWM, onda cuadrada que nos permite variar el tiempo que permanece esta en estado alto. Por si alguien, como yo hace cuatro dias, no lo sabia.
Pues bien el 16F628 incorpora un modulo para hacer una salida por hardware y yo he programado otro por software, ahora bien lo simulo con MPLAB y el PWM por hardware no lo simula, la salida del puerto correspondiente siempre esta a cero.
El PWM por software si, pero cuando lo cargo en el pic no me canvia de estado la patilla, alquien tiene idea de que puede estar pasando.

Agradeceria mucho vuestra ayuda en este proyecto!!!

Perdon por la acentuacion y algunas cosas mas, pero este teclado es ingles y tiene sus peculiaaridades jej!! Gracias de antemano!!

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: el assambler me crea sarpullido!!
« Respuesta #5 en: 01 de Junio de 2005, 19:22:00 »
El MPLAB no simula ningún periférico del PIC(Conversor Analógico-Digital, Comparadores, Comunicación serie, etc.). Para eso debes hacerte con otro simulador, Proteus por ejemplo.

Si el PIC lo puedes programar con otro código más simple y funciona, y este código no te funciona, pon aqui el código para que veamos en que falla.

Desconectado Glamorgan

  • PIC10
  • *
  • Mensajes: 6
RE: el assambler me crea sarpullido!!
« Respuesta #6 en: 02 de Junio de 2005, 07:12:00 »
Vamos al tema!!! jeje gracias Antoniof:

Aqui estoy inicializando una salida de PWM por Hardware y nada mas!!! Simplemente le doy los valores para obtener una senal de 244hz al 50%, pero algo se me escapa porque grabo el pic y en la patilla RB3 que es la salida, solo tengo unos pocos mV.
El pic como puedes ver en el codigo es el 16F628.
La rutina de interrupciones solo la he puesto para ver si en algun momento es que me saltaba la interrupcion, pero no salta porque la patilla que pongo a uno en la interrupcion siempre esta a cero.

;***********   Label Definition   *********************************
list            p=pic16f628      ; list directive to define processor
        include         p16f628.inc   ; processor specific variable definitions
       __config _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

        errorlevel      -302    ;Suppress bank warning



T2CON   EQU   12H      ;TIMER2 Control register
STATUS   EQU   03H      ;STATUS register
TRISA   EQU   85H      ;Mode set for PORTA
PORTA   EQU   05H      ;PORTA register
TRISB    EQU   86H      ;Mode set for PORTB
PORTB   EQU   06H      ;PORTB register
CCP1CON   EQU   17H      ;CCP Module
CCPR1L   EQU   15H      ;PWM register (LSB)
PIR1   EQU   0CH      ;
PR2   EQU   92H      ;TMR2 module´s period register



#DEFINE   BANK0   BCF   STATUS,5;BANK0 select
#DEFINE   BANK1   BSF   STATUS,5;BANK1 select

;**********   Program Start   ******************************************
   ORG   00H      ;Reset vector
   GOTO   INIT
   ORG   04H      ;Interrupt Vector
   GOTO   NADA_QUE_HACER   



;********   Initial Proces   **********************************
NADA_QUE_HACER   
   BSF   PORTA,7
   RETFIE

INIT            ;***Port initialization

   BCF   STATUS,7   
   BCF   STATUS,6   

   BANK0                             ;voy al banco0, en este pic manejas tres bits.

   CLRF   PORTA
   CLRF   PORTB
   
   BANK1         ;Selection Bank1
   MOVLW   B"00001111"   ;AN0 AN1 AN2 AN3 to input mode
   MOVWF   TRISA      ;Set TRISA register
   MOVLW   B"11110110"   ;RB0 interrupt input,RB1 RB2 trolley control
   MOVWF   TRISB      ;Set TRISB register
            ;(salida PWM por hard es el bit tres del PuertoB)
   BANK0         ;Change to Bank0

;***PWM initialization2 HARD

   CLRF   CCP1CON                
   CLRF   TMR2      ;Clear TMR2 register
   CLRF   CCPR1L                    ;pongo a cero estos registros
   BANK1
   MOVLW   0FFH
   MOVWF   PR2      ;Set the PWM2 period (244Hz)
   BANK0
   MOVLW   03H   
   MOVWF   CCPR1L
   MOVLW   0CH      ;CCP1XY=1 CCP1M=1100(PWM)
   MOVWF   CCP1CON      ;Set the PWM mode & Duty Cicle
   MOVLW   06H      ;Pst=1:1 TMR2=ON Pre=1:16
   MOVWF   T2CON      ;Set T2CON register
   
MainLoop

   NOP
   GOTO MainLoop                               ;el lazo principal no hace nada solo   quiero ver la senal cuadrada
   
   END


Algo no estoy haciendo bien Enfurruñado, la salida RB3 tiene dos funciones, pero yo creo que diciendo en el trisB que sea salida ="0", y poniendo el modulo CCP, en modo PWM es suficiente no??
Esto es una locura, gracias por cualquier consejo que podais darme los que teneis esto un poco mas por la mano!!!
PD: Lo siento por tener los comenterios en ingles, si teneis alguna duda al repecto o sobre el codigo que no este muy clrao, solo decirmelo ok!!

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: el assambler me crea sarpullido!!
« Respuesta #7 en: 02 de Junio de 2005, 09:08:00 »
En principio lo veo todo bien, excepto que el duty cicle lo tienes muy bajo. Según las fórmulas del datasheet, tienes:

Periodo PWM = (PR2+1)*4*Tosc*TMR0prescaler

Con tus datos:

Periodo PWM = (255 + 1)*4*0.25us(suponiendo un rejoz de 4MHz)*16=4096us

El duty cicle se calcula como:

Duty = (CCPR1L:CCP1CON<5:4>Giño*Tosc*TMR0prescaler

Con tus datos:

Duty = (00000011:00 = 12)*0.25us*16= 48us

Te sale un duty cicle del 48/4069*100 = 1.17%, es decir, casi cero.

Carga en el registro CCPR1L un 0x80 y te saldrá:

Duty = (10000000:00 = 512)*0.25us*16= 2048us, lo que te dará un duty cicle del 50%, es decir, medirás los 2.5V a la salida de la patilla RB3.

Desconectado Glamorgan

  • PIC10
  • *
  • Mensajes: 6
RE: el assambler me crea sarpullido!!
« Respuesta #8 en: 02 de Junio de 2005, 10:08:00 »
Pues eres un fiera!!!
Si si tienes toda la razon ese es el fallo!! Estaba repasando el codigo una vez mas, y me he dado cuenta que soy mas tonto que...Llorando. Pero es que lo calcule en su dia y daba por echo que estaba bien, y me centraba en repasar los registros y no los valores!!! Brrrrrrrrr!!
Ahora ya se mueve el motor!! jajajaja
Pues muchas gracias de todos modos!!!
PD: A ver si algun dia puedo postear alguna fotico del robot que estoy haciendoGiño
en parte gracias a tu ayuda!! jeje