Autor Tema: 16F628 & PBP  (Leído 9490 veces)

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

Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
16F628 & PBP
« en: 07 de Mayo de 2010, 18:50:09 »
Hola que tal.

  Estoy realizando este programa en BASIC con PICBasic Pro en microcode studio.  El asunto es que en el proteus funciona como siempre a las mil maravillas. Será pq omite cosas que se dan por hecho o no sé, sin embargo a la hora de lo físico pues si influyen mucho.

  En fin, el programa es este:
Código: [Seleccionar]
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 18/03/2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
   
   'INCLUDE "bs1defs.bas"
   seleccion var byte
    'led = 5
    'let b0=5
    'let led=5
    'symbol led=2
    'B0=2
   
inicio:
         
    ' PicBasic program to demonstrate operation of an LCD in 4-bit mode
'
' LCD should be connected as follows:
'       LCD     PIC
'       DB4     PortA.0
'       DB5     PortA.1
'       DB6     PortA.2
'       DB7     PortA.3
'       RS      PortA.4 (add 4.7K pullup resistor to 5 volts)
'       E       PortB.3
'       RW      Ground
'       Vdd     5 volts
'       Vss     Ground
'       Vo      20K potentiometer (or ground)
'       DB0-3   No connect
'  DEFINE LCD_BITS 4
' Set number of lines on LCD


@ DEVICE pic16f628a, INTRC_OSC_NOCLKOUT 'Reloj interno solo
@ DEVICE pic16f628a, WDT_OFF ' Watchdog Timer desconectado
@ DEVICE pic16f628a, PWRT_ON ' Power-On Timer conectado
@ DEVICE pic16f628a, BOD_ON ' Brown-Out Detect conectado
'@ DEVICE pic16f628a, MCLR_OFF ' Master Clear Externo desconectado
@ DEVICE pic16f628a, LVP_OFF ' Low-Voltage Programming desconectado
@ DEVICE pic16f628a, CPD_OFF ' Data Memory Code Protect desconectado


DEFINE LCD_DREG PORTB          ; LCD bits de comunicacion al LCD
DEFINE LCD_DBIT 0              ; Coneccion puerto B (RB0,RB1,RB2,RB3)
DEFINE LCD_RSREG PORTB         ; LCD bit RS conectado a PORTB
DEFINE LCD_RSBIT 4             ; LCD bit RS conectado a puerto B (RB4)
DEFINE LCD_EREG PORTB         ; LCD bit E conectado a PORTB
DEFINE LCD_EBIT 5              ; LCD bit E conectado a puerto B (Rb5)
DEFINE LCD_BITS 4              ; LCD comunicado 4Bits
DEFINE LCD_LINES 2             ; LCD de 2 lineas

        Pause 500       ' Wait for LCD to startup

loop:   Lcdout $fe, 1   ' Clear LCD screen
'pause 500
        Lcdout "   Probador de  "  ' Display Hello
        LCDOUT $FE, $C0
        lcdout "      ECM's    "
        Pause 3000       ' Wait .5 second

        Lcdout $fe, 1   ' Clear LCD screen
       
        'pause 500
       
        Lcdout "Seleccione Marca:"
        LCDOUT $FE, $C0
        LCDOUT "     <-  ->"
        Pause 500       ' Wait .5 second
        'pause 5000

        'Goto loop       ' Do it forever
       again:
       
       IF PortA.2 = 1 THEN
           seleccion=1
           goto menu
         endif 
       IF PortA.3 = 1 THEN
           seleccion=2
           goto menu
          endif
       IF PortA.4 = 1 THEN
           seleccion=3
           goto menu
       else
       goto again
       
       endif
             
  menu:     
        SELECT CASE seleccion
  CASE 1
    HIgh PORTA.0
        pause 2000
        low PORTA.0
  CASE 2
    HIgh PORTA.1
        pause 2000
        low PORTA.1
  CASE 3
    HIGH PORTA.6
        pause 2000
        low PORTA.6
  'CASE IS > 5
    'y = 100
  CASE ELSE
    high PORTA.7
    pause 2000
    low PORTA.7
END SELECT
seleccion = 0
goto again

end

Basicamente el programa enciende una de las salidas del puerto A en base a una entrada del puerto A. Tal vez ese es el problema?¿?¿ :? Estuve leyendo por ahí de una instrucción CONM o algo así que es lo que permitía utilizar el puerto A puramente digital, pero esa instruccion al parecer no está incluida en el microcode. Espero le hechen un vistazo y me hechen la mano. Thanks.

PD: Al montarlo solo me enciende la salida RA6 pero las demás no las respeta.
PD2: Parecera que no tiene sentido el lcd con lo que hace el programa pero solo es parte de algo mas grande que ehmm.... en CCS nomas no me kiso salir  :? y lamentablemente nadie me supo decir porqué  :(

  (O será que era obvio y les da weba  :D) See ya.

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: 16F628 & PBP
« Respuesta #1 en: 08 de Mayo de 2010, 00:10:47 »
Citar


Basicamente el programa enciende una de las salidas del puerto A en base a una entrada del puerto A. Tal vez ese es el

problema?¿?¿

No es el problema ;si  puedes leer y escribir en el mismo puerto

Citar
Estuve leyendo por ahí de una instrucción CONM o algo así que es lo que permitía utilizar el puerto A puramente digital,

De momento no lo recuerdo pero si es algo así considera que algunos pic cuentan con módulos adicionales comparadores, convertidores etc. que generalmente comparten un mismo pin por lo cual para poder utilizar un puerto como digital hay que deshabilitar los módulos que compartan algún pin del puerto

Citar
pero esa instruccion al parecer no está incluida en el microcode. Espero le hechen un vistazo y me hechen la mano. Thanks.

Pues claro que no algunas veces tendrás que actuar directamente sobre los registros del pic algo así como conm=000011111 :mrgreen: :mrgreen:


Citar
y lamentablemente nadie me supo decir porqué  

  (O será que era obvio y les da weba   ) See ya.

seeeeeeeeee  :D :D :D :D :D

« Última modificación: 08 de Mayo de 2010, 15:21:32 por septiembre_negro »

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: 16F628 & PBP
« Respuesta #2 en: 08 de Mayo de 2010, 00:59:17 »
Hola muchachos,

No  puedes leer y escribir en el mismo puerto

Si se puede; puedes manejar el puerto bit a bit o todo en conjunto.

Citar
Estuve leyendo por ahí de una instrucción CONM o algo así que es lo que permitía utilizar el puerto A puramente digital,
De momento no lo recuerdo pero si es algo así considera que algunos pic cuentan con módulos adicionales comparadores, convertidores etc. que generalmente comparten un mismo pin por lo cual para poder utilizar un puerto como digital hay que deshabilitar los módulos que compartan algún pin del puerto
Citar
pero esa instruccion al parecer no está incluida en el microcode. Espero le hechen un vistazo y me hechen la mano. Thanks.
Pues claro que no algunas veces tendrás que actuar directamente sobre los registros del pic algo así como conm=000011111 :mrgreen: :mrgreen:

Tiene razon el pic 16f628 tiene modulos comparadores que comparten pines con el puertoA, debes setear los pines como digitales, mira el datasheet y cheka que registro debes modificar para lograrlo.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado flacomaida

  • PIC10
  • *
  • Mensajes: 17
Re: 16F628 & PBP
« Respuesta #3 en: 08 de Mayo de 2010, 10:56:26 »
Hola. Por que no pruebas con esto:
alldigital        ' Todas las entradas digitales
TRISA = %00011100 ' 1 Entadas, 0 salidas
PORTA=0           ' Poner a cero el puerto A
Debes declarar al comienzo. También puedes darte un paseo por el manual de Picbasic, de onda, ami me ayudo bastante.
Saludos.-

Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
Re: 16F628 & PBP
« Respuesta #4 en: 08 de Mayo de 2010, 18:33:56 »
Hola. Por que no pruebas con esto:
alldigital        ' Todas las entradas digitales
TRISA = %00011100 ' 1 Entadas, 0 salidas
PORTA=0           ' Poner a cero el puerto A
Debes declarar al comienzo. También puedes darte un paseo por el manual de Picbasic, de onda, ami me ayudo bastante.
Saludos.-

mmm, Gracias a dios contestaron  ;-)

   jeje, ke bueno ke contestaron pq ultimamente me habían estado kedando mal; o nuevamente mis preguntas no eran muy inteligentes  :D en fin.

Gracias por sus respuestas. Les cuento:

  De momento deje el programa como estaba por 'default', es decir manipulando el LCD con el puerto A (y solo RB3). De está forma extrañamente (para mí) si me ha salido bien aunque obviamente no es la versión final del programa así que espero sigan echandome la mano :mrgreen: . Y bueno, me preocupa que mis .hex están pesando mucho. Sé ke el 16f628 tiene 2K de memory pero como han visto no soy un experto así que no sé hasta que punto el programa va a caber en el pic ya que estan pesando mas que solo 2K. En fin.

  PD: el winpic me está tildando el 'error de escritura en dirección 0x00000' etc. No es la proxima pregunta pq sé que ni me van a responder cosas tan lógicas; aunque eso fué el motivo para que desistiera de aprender ensamblador  :D y pues dejé moverle a los pics. En fin, eso ya es conversación poco interesante vdd?

PD2: Gracias por sus respuestas y sorry por el choro mareador;-)

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: 16F628 & PBP
« Respuesta #5 en: 08 de Mayo de 2010, 21:01:43 »
mmm, Gracias a dios contestaron  ;-)

   jeje, ke bueno ke contestaron pq ultimamente me habían estado kedando mal

Disculpame sonic si no te quede bien, pero es que tu debes aprender a hacer las cosas, con lo que te dije y una misera busqueda en el foro encontrabas la solucion. Sí, este tema ha sido tratado muchas veces, pero creo que no quieres "perder tu tiempo" (como si nosotros si tuvieramos el suficiente como para responderte) debes aprender a buscar las cosas y no pensar en que te den la tarea resuelta.

Mis mas sinceras disculpas.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
Re: 16F628 & PBP
« Respuesta #6 en: 08 de Mayo de 2010, 21:47:59 »
sorry KALLITOS, no fué personal la pedrada  :oops:  jeje :P al contrario, gracias a todos por su ayuda y valioso tiempo, si te fijas reconocí varias veces que tal vez no me respondían por ser cosas simples y lógicas, así que 'don't worry'  ;-)

  PD: A decir vdd si he progresado en mi programa por mi cuenta pq nomas no supe pq no jaló en CCS  :? a eso me refería con lo de 'me han kedado mal' ya que pregunté y nomas nada; por eso cambié a BASIC. Así que hasta ahorita voy bien y me siento orgulloso 8) aunque se que es un insignificante pasó para ustedes (sabios entre sabios) pero un gran salto para 'markitos' (osea yo)  :mrgreen: jeje

  En fin, perdón pq ya parece sala de chat vdd?

   Gracias.

Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
Re: 16F628 & PBP
« Respuesta #7 en: 19 de Mayo de 2010, 15:34:44 »
Hola,

  Comentarles que el programa ya kedó  :mrgreen: gracias a todos y cada uno.
Lo que ahora me trae es un error al usar ADCIN del PBP; en realidad estoy pasando el código de PICAXE a PBP y tengo los siguientes problemas al compilar:

Código: [Seleccionar]
' Definir los parametros del ADCIN
DEFINE  ADC_BITS 8       ' Setear el numero de bits del resultado
' Defenir variables de los resultados de la conversion
'ADC1   VAR BYTE   


TRISA = %11111111   ' Setear el puerto A como entrada
ADCON1 = %00000100   ' Setear el puerto A como analogico
Pause 500

El código completo es:

Código: [Seleccionar]
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 18/05/2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

'INCLUDE "bs1defs.bas"

'INCLUDE "bs2defs.bas"

'DEFINE ADC_BITS 8       ' Set number of bits in result
'DEFINE ADC_CLOCK 3     ' Set clock source (rc = 3)
'DEFINE ADC_SAMPLEUS 50 ' Set sampling time in microseconds

'TRISA = 255 ' Set PORTA to all input
'ADCON1 = 4  ' PORTA is analog
 'TRISB=%11110000


 ' Definir los parametros del ADCIN
DEFINE  ADC_BITS 8       ' Setear el numero de bits del resultado
' Defenir variables de los resultados de la conversion
'ADC1   VAR BYTE   


TRISA = %11111111   ' Setear el puerto A como entrada
ADCON1 = %00000100   ' Setear el puerto A como analogico
Pause 500                       ' Espera de .5 segundos


 pins var byte
 b0 var byte
 b1 VAR byte
 b2 var byte
 w4 var word
 w5 var word
 w6 var word
 ckp con 0
 cmp con 1
 ref con 0
 sync con 1
 pip con 2

  symbol cont = b1 ; Variable del ciclo de repeticion
symbol tiempo = b0 ; Tiempo del estado ya sea alto o bajo
symbol t2 = w6
symbol aux = b2
'symbol ckp = 0 ; Pin de salida
'symbol cmp = 1 ; Pin de salida
symbol t3 = w4
symbol t4 = w5
'symbol ref = 0
'symbol sync = 1
'symbol pip = 2



;************* MENU DE SEÑALES  ******************

inicio:

select case pins

case 2
goto ford
case 1
goto chevrolet
case 3
goto sbec2_5
case 128
goto sbec_y_pcm3_0
case 130
goto sbec3_3
case 129
goto sbec3_9
case 131
goto sbec4_0
case 64
goto sbec5_2_y_5_9
case 66
goto pcm2_4
case 65
goto pcm2_5
case 67
goto pcm3_3
case 192
goto GA16DE
case 194
goto GA16DNE
case 193
goto vw1_6
case 195
goto vw1_8
case else

end select
goto inicio



;***********  SEÑAL DE CHRYSLER 2.4L *******************
;*******************************************************



pcm2_4: adcin 2,tiempo
portB = 2
t2 = tiempo*6
pause t2
aux = 4
gosub reloj
pause t2
high ckp
t2 = tiempo*3
pause t2
low cmp
t2 = tiempo*2
pause t2
gosub reloj
t2 = tiempo*5
pause t2
high cmp
t2 = tiempo*6
pause t2
gosub reloj
pause tiempo
pause tiempo
low cmp
t2 = tiempo*4
pause t2
high ckp
t2 = tiempo*5
pause t2
gosub reloj
pause t2
goto pcm2_4


;**************    SUBRUTINA


reloj: for cont = 1 to aux
high 0
pause tiempo
low 0
pause tiempo
next cont
return



;***********  SEÑAL DE CHRYSLER 2.5L 6 Cilindros *******************
;*******************************************************************


pcm2_5:

portB = 0
ini: adcin 2,tiempo
toggle cmp
t2 = tiempo * 12
pause t2
t2 = tiempo * 8
for cont = 1 to 4
high ckp
pause tiempo
low ckp
pause t2
next cont
t2 = tiempo * 4
pause t2
goto ini


;***********  SEÑAL DE CHRYSLER 2.5L 4 Cilindros *******************
;*******************************************************************


sbec2_5:

adcin 2,tiempo

portB = 3
pause tiempo
low ckp
pause tiempo
high ckp
pause tiempo
t3 = tiempo * 3
t4 = tiempo * 4
for cont = 1 to 3
portB = 0
pause t4
portB = 3
if cont = 2 then
pause tiempo
low cmp
pause tiempo
high cmp
pause tiempo
goto aqui
else
endif
pause t3
aqui: next cont
portB = 0
pause t3
goto sbec2_5

;***********  SEÑAL DE CHRYSLER 3.3L 6 Cilindros *******************
;**************************************

sbec3_3: portB = 2
for cont = 1 to 119
adcin 2,tiempo
pause tiempo
select case t2
case 4,7,10,13,24,27,30,33,48,51,54,57,65,69,72,75,86,89,92,95,107,110,113,116
high ckp
case 5,8,11,14,25,28,31,34,49,52,55,58,66,70,73,76,87,90,93,96,108,111,114,117
low ckp
case 16,20,36,40,44,60,78,82
high cmp
case 2,18,22,38,42,46,62,80,84
low cmp
case else
end select

next cont

goto sbec3_3



;***********  SEÑAL DE NISSAN GA16DE *******************
;*******************************************************************

GA16DE: portB = 3
ga: for t3 = 1 to 360

adcin 2,tiempo
high ref
pause tiempo
low ref
pause tiempo

select case t3
case 90,180,270,360
high sync
case 92,182,272,8
low sync
case else

end select
next t3
goto GA


;***********  SEÑAL DE NISSAN GA16DNE *******************
;*******************************************************************


GA16DNE: adcin 2,tiempo
t4 = tiempo * 5
t3 = tiempo * 7
high ref
pause t4
low ref
pause tiempo
high ref
pause tiempo
low ref
pause t4
for cont = 1 to 3
high ref
pause t4
low ref
pause t3
next cont
goto GA16DNE


;***********  SEÑAL DE FORD MERCURY 4.6L 8 Cilindros *******************
;*******************************************************************


ford: adcin 2,tiempo
high pip
pause tiempo
low pip
pause tiempo
goto ford


;***********  SEÑAL DE CHEVROLET TBI 5.7L 8 Cilindros *******************
;*******************************************************************



chevrolet:

        adcin 2,tiempo
t2=tiempo*3
high ref
pause tiempo
low ref
pause t2
goto chevrolet


sbec_y_pcm3_0:
sbec3_9:
sbec4_0:
sbec5_2_y_5_9:
pcm3_3:
vw1_6:
vw1_8:

end

 :? No puedo copiar los errores del compilador pero dicen:

ERROR Picaxe.ASM 66: (255) undefined symbol 'adcon1'
ERROR C:/pbp/pbppic14.lib 5865 undefined symbol 'ADRESH'
ERROR C:/pbp/pbppic14.lib 5858 undefined symbol 'ADCON0'
ERROR C:/pbp/pbppic14.lib 5858 undefined symbol 'GO_DONE'

   y así se repiten.

     Espero me orienten de como sustituir el comando READADC o bien utilizar bien el comando ADCIN del PBP, Gacias totales ;-)

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: 16F628 & PBP
« Respuesta #8 en: 19 de Mayo de 2010, 19:54:07 »
disculpa este progama es para 16f628, si es asi te cuento que este pic no tiene convertidores analogico digitales, lo que tiene es comparadores. y por eso te saca esos
errores

Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
Re: 16F628 & PBP
« Respuesta #9 en: 22 de Mayo de 2010, 16:06:16 »
disculpa este progama es para 16f628, si es asi te cuento que este pic no tiene convertidores analogico digitales, lo que tiene es comparadores. y por eso te saca esos
errores

Hola que tal.

    Pues si tiene entradas analógicas no? Estas son: RA0/AN0, RA1/AN1, RA2/AN2, que serían 17,18 y 1 respectivamente. Es decir, en picaxe es fácil leer la señal proveniente por ejemplo de un potenciometro usado como divisor de voltaje y ya el pic lo interpreta con una escala de 8 bits. Pues bien, el picaxe 18X es precisamente el 16F628 así que debería ser posible, no???

     Gracias.

Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
Re: 16F628 & PBP
« Respuesta #10 en: 22 de Mayo de 2010, 16:59:47 »
disculpa este progama es para 16f628, si es asi te cuento que este pic no tiene convertidores analogico digitales, lo que tiene es comparadores. y por eso te saca esos
errores

Hola que tal.

    Pues si tiene entradas analógicas no? Estas son: RA0/AN0, RA1/AN1, RA2/AN2, que serían 17,18 y 1 respectivamente. Es decir, en picaxe es fácil leer la señal proveniente por ejemplo de un potenciometro usado como divisor de voltaje y ya el pic lo interpreta con una escala de 8 bits. Pues bien, el picaxe 18X es precisamente el 16F628 así que debería ser posible, no???

     Gracias.



    Ehmm, citandome a mi mismo :P

   Efectivamente no tiene ADC, el PIC que debo usar es el 16F88  :mrgreen: ya lo cambié en el Microcode studio y me lo compiló sin problemas, solo me falta calarlo en físico y antes en simulación  ;-) Muchas gracias.


 

anything