Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
20/02/2013 #2361

Avatar de ferdy575

isaiasjea dijo: Ver Mensaje
Buenas Noches ferdy575!!

ya cheque tu Código y tenias algunas cosas que te faltaron como asignar los RA0,RA1,RA2 entradas
ya modifique el Código para que pruebes en el simulador y posteriormente grabando en el PIC16F628A:
Código:
'*******************************************************************************
' DEFINICIÓN DE FUSES Y OSILADOR
@ device  pic16F628A, intrc_osc, pwrt_on, wdt_off, mclr_off, lvp_off, protect_off
DEFINE OSC 4
'*******************************************************************************
CMCON = 7                               'Comparadores Apagados
TRISA = %00000111                       'Puerto RA0,RA1,RA2 Entradas Digitales
TRISB = 0                               'Puerto B Como Salidas
PORTA = 0                               'Limpiamos el Puerto A
PORTB = 0                               'Limpiamos el Puerto B
'*******************************************************************************
derecha var porta.0
izquierda var porta.1
centrar var porta.2
salida var portb.1
centro var byte 
'*******************************************************************************
centro=150 'inicio variable en 150 
'*******************************************************************************
inicio:
pulsout salida,centro  
gosub pulsadores    
goto inicio

pulsadores:
if  centrar=0 then gosub centrado
if derecha=0 then gosub DER
if izquierda=0 then gosub IZQ
return

centrado:
pause 100
centro=150 
return

DER:
pause 100
centro=centro+1
return

IZQ:
pause 100
centro=centro-1
return
end
Saludos y seguimos en contacto.
hola isaiasjea hoy tuve la oportunidad de probar el código que me revisaste pero igualmente siguen sin funcionarme los servos hasta creí que estaban malos pero los probé con un 555 y funcionan perfectamente no logro encontrar por que me estará fallando este código por fa ayúdame
ó si puedes sugiereme otro código que haga lo mismo...gracias...
20/02/2013 #2362


mecatrodatos dijo: Ver Mensaje
Que tal amigos uno de los lenguajes mas facil para programar micros es el basic pro sin despreciar el C por lo que abierto este hilo para empezar a ejecutar programas sencillos hasta llegar a los mas complejos.

miren lo facil que es prender un led con un pic 16f84A :

Código:
@ device xt_osc  ; oscilador externo XT
define osc 4     ; especifica que se va a utilizar uno de 4 Mhz

led var portb.0                       ; asignamos led a puerto RB0

inicio:

HIGH  led                               ;asigna  un 1 logico 
PAUSE 500                              ; tiempo de espera de 500mls
LOW  led                                ; apaga led
este es un ejemplo sencillo ire anexando el codigo fuente y su respectiva simulacion en proteus de todos los realizados en este hilo.


buenas noches hermano
hermano ya que le veo cierto entuciasmo me podria usted decier o esplicarme como tomo el voltaje de referencia del pic para un conversol analogico digital adc para suministrarlo al sensor en cuestion ya que no entiendo muy bien lo que presenta la hoja de datos del pic para construir el diseño en proteus de la pcb me refiero a la medicion de temperaturas
21/02/2013 #2363

Avatar de isaiasjea

estará fallando este código por fa ayúdame
Buenas Dias ferdy575
lo que pasa es que te esta faltando el tren de pulsos para que lo puedas posicionar.


Código:
'*******************************************************************************
' DEFINICIÓN DE FUSES Y OSILADOR
@ device  pic16F628A, intrc_osc, pwrt_on, wdt_off, mclr_off, lvp_off, protect_off
DEFINE OSC 4
'*******************************************************************************
CMCON = 7                               'Comparadores Apagados
TRISB = %00000110
PORTB = 0
'*******************************************************************************
Control var portb.0
incrementar var portb.1
disminuir var portb.2
x var byte
r var byte
x = 150

inicio:
pulsout control,x
gosub timer
goto inicio

timer: 
if incrementar = 0 then gosub mas
if disminuir = 0 then gosub menos
return

mas:
pause 10
x=x+1
if x > 250 then x = 250
return

menos:
pause 10
x=x-1
if x < 50 then x = 50
return
end
te dejo la simulacion y los archivos para que los pruebes
este codigo esta probado en un PIC16F628A real y trabaja sin problemas.
Saludos y seguimos en contacto.
Archivos Adjuntos
Tipo de Archivo: zip Servo-01.zip (14,3 KB (Kilobytes), 93 visitas)
21/02/2013 #2364

Avatar de ferdy575

isaiasjea dijo: Ver Mensaje
Buenas Dias ferdy575
lo que pasa es que te esta faltando el tren de pulsos para que lo puedas posicionar.
http://s5.postimage.org/8n87mq7gn/Mo...posiciones.gif

Código:
'*******************************************************************************
' DEFINICIÓN DE FUSES Y OSILADOR
@ device  pic16F628A, intrc_osc, pwrt_on, wdt_off, mclr_off, lvp_off, protect_off
DEFINE OSC 4
'*******************************************************************************
CMCON = 7                               'Comparadores Apagados
TRISB = %00000110
PORTB = 0
'*******************************************************************************
Control var portb.0
incrementar var portb.1
disminuir var portb.2
x var byte
r var byte
x = 150

inicio:
pulsout control,x
gosub timer
goto inicio

timer: 
if incrementar = 0 then gosub mas
if disminuir = 0 then gosub menos
return

mas:
pause 10
x=x+1
if x > 250 then x = 250
return

menos:
pause 10
x=x-1
if x < 50 then x = 50
return
end
te dejo la simulacion y los archivos para que los pruebes
este codigo esta probado en un PIC16F628A real y trabaja sin problemas.
Saludos y seguimos en contacto.
excelente funciona perfectamente y agradezco mucho tu colaboración
22/02/2013 #2365

Avatar de isaiasjea

excelente funciona perfectamente y agradezco mucho tu colaboración
Un placer poderte ayudar!!
Saludos y seguimos en contacto
22/02/2013 #2366


Hola a todos,

agregando al contador de isaiasjea la interrupción externa b0 y desborde por timer1, junto a un pequeña modificación en la simulación en proteus, es posible convertir el contador en una especie de velocímetro o cuentavueltas segun se necesite, en la simulación parece funcionar pero publico la modificación a ver que opinan ustedes.

Código:
;*******************************************************************************
; Programa: Contador.pbp
; Versión: 1.0
; VELOCIMETRO en base a  Contador de 3 digitos y displays de 7 segmentos (0-999)
; controlando 3 74XS164 de D@rkbytes
;*******************************************************************************
@ DEVICE PIC16F628a	; Microcontrolador utilizado
; Palabra de configuración
@ DEVICE INTRC_OSC_NOCLKOUT,WDT_OFF,PWRT_ON,BOD_OFF,LVP_OFF
;*******************************************************************************
DEFINE OSC 4				; Definir que se trabajará con 4MHz.
Include "MODEDEFS.BAS"      ; Incluir definiciones del modo serial

CMCON = 7					; Comparadores analógicos OFF
TRISA = %11111100
PORTA = TRISA

TRISB = %00000001
PORTB = 0

; Nombres para los pines
Symbol SCL_Pin  = PORTA.0
Symbol SDA_Pin  = PORTA.1
Symbol T1CKPS1   = T1CON.5      'Preescaler para timer1
Symbol T1CKPS0   = T1CON.4      'Preescaler para timer1
Symbol T1OSCEN   = T1CON.3      'Bit de habilitación del Oscilador 
Symbol TMR1CS    = T1CON.1      'Bit selección clock de trabajo (1=clock externo por portc.0, 0=clock interno)
Symbol TMR1ON    = T1CON.0      'Bit de habilitación para el timer1 (1=On, 0=Off)
Symbol TMR1IE    = PIE1.0       'interrupción por timer1
Symbol TMR1IF    = PIR1.0       'bandera desborde tmr1
Symbol GIE       = INTCON.7
Symbol PEIE      = INTCON.6
Symbol INTE      = INTCON.4
Symbol INTF      = INTCON.1
Symbol INTEDG    = OPTION_REG.6
Symbol LED3      = PORTB.3
;----

; Declaración de variables
KILOMETRAJE VAR WORD
Counter VAR Word
Dsp1    VAR Byte
Dsp2    VAR Byte
Dsp3    VAR Byte
Index   VAR Byte
;{{{{{
 ; Declaración de variables
 T  VAR Byte
 X  VAR Byte
TIMER1 VAR Word
PRECARGA  VAR Word
INTB0   VAR Byte
;}}}}

 PRECARGA=40536             ' Valor obtenido con la calculadora RRPicTimerCalculator  para que salte el timer1 cada 100ms
 TMR1H=PRECARGA.HighByte    ' Precargamos el timer1 inicialmente 
 TMR1L=PRECARGA.LowByte

 
 On Interrupt GoTo interrupcion '  En caso de interrupción ir a subrutina interrupción
 INTCON=%10010000               '  el bit 7 habilita las interrupciones en general
                                '  El bit 4 habilita la  interrupción B.0 
  T1CON=%00001101               '  Timer1 on, incremento por Osc interno  
  

Clear       ; Inicializar variables a 0 (Limpiar RAM)
; Mandar ceros en formato 7 segmentos a los registros de desplazamiento.
ShiftOut SDA_Pin,SCL_Pin,LSBFIRST,[$FC,$FC,$FC]

MainProgram:

    Gosub   Tabla                       ; Ir a las tablas de conversión
    
    GoTo MainProgram
   
   interrupcion: 
                 
  If INTF=1 Then    INTB0=INTB0+1   ' Contamos los giros que da la rueda
  INTE=1                            ' Habilitar la interrupción nuevamente
  INTF=0                            'Borrar la bandera de int B.0
  
  Resume                     ' Retorna al programa donde ocurrió la interrupción 
  Enable                     ' Habilita las interrupciones después del handler 
  END
Tabla:
; Subrutina de conversión para código de 7 segmentos cátodo común.
    Index = Counter DIG 0   ; Tomamos las unidades
    LookUp Index,[$FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6],Dsp1

    Index = Counter DIG 1   ; Tomamos las decenas
    LookUp Index,[$FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6],Dsp2

    Index = Counter DIG 2   ; Tomamos la centenas
    LookUp Index,[$FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6],Dsp3
; Mandamos los datos hacia los registros de desplazamiento.   
    ShiftOut SDA_Pin,SCL_Pin,LSBFIRST,[Dsp1,Dsp2,Dsp3]
    Return
24/02/2013 #2367


Funcionamiento sensor sharp 2Y0A21, (PBP) pic16F877A
hola buenos dias, espero puedan solucionar mi duda, a todos los integrantes del foro les pido ayuda respecto al funcionamiento de un sensor IR sharp 2Y0A21 analogico para poderlo manipular por medio de un microcontrolador 16f877A programado en picbasic pro, y tambien como configurar este pic para utilizar el oscilador interno, es para un proyecto de robotica de competencia, muchas gracias...
25/02/2013 #2368

Avatar de ferdy575

speliur dijo: Ver Mensaje
hola buenos dias, espero puedan solucionar mi duda, a todos los integrantes del foro les pido ayuda respecto al funcionamiento de un sensor IR sharp 2Y0A21 analogico para poderlo manipular por medio de un microcontrolador 16f877A programado en picbasic pro, y tambien como configurar este pic para utilizar el oscilador interno, es para un proyecto de robotica de competencia, muchas gracias...
Hola mira el datasheet de este pic no tiene oscilador interno.
01/03/2013 #2369

Avatar de torres.electronico

DEPREDADORX1 dijo: Ver Mensaje
Hola a todos,

agregando al contador de isaiasjea la interrupción externa b0 y desborde por timer1, junto a un pequeña modificación en la simulación en proteus, es posible convertir el contador en una especie de velocímetro o cuentavueltas segun se necesite, en la simulación parece funcionar pero publico la modificación a ver que opinan ustedes.

Código:
;*******************************************************************************
; Programa: Contador.pbp
; Versión: 1.0
; VELOCIMETRO en base a  Contador de 3 digitos y displays de 7 segmentos (0-999)
; controlando 3 74XS164 de D@rkbytes
;*******************************************************************************
@ DEVICE PIC16F628a    ; Microcontrolador utilizado
; Palabra de configuración
@ DEVICE INTRC_OSC_NOCLKOUT,WDT_OFF,PWRT_ON,BOD_OFF,LVP_OFF
;*******************************************************************************
DEFINE OSC 4                ; Definir que se trabajará con 4MHz.
Include "MODEDEFS.BAS"      ; Incluir definiciones del modo serial

CMCON = 7                    ; Comparadores analógicos OFF
TRISA = %11111100
PORTA = TRISA

TRISB = %00000001
PORTB = 0

; Nombres para los pines
Symbol SCL_Pin  = PORTA.0
Symbol SDA_Pin  = PORTA.1
Symbol T1CKPS1   = T1CON.5      'Preescaler para timer1
Symbol T1CKPS0   = T1CON.4      'Preescaler para timer1
Symbol T1OSCEN   = T1CON.3      'Bit de habilitación del Oscilador 
Symbol TMR1CS    = T1CON.1      'Bit selección clock de trabajo (1=clock externo por portc.0, 0=clock interno)
Symbol TMR1ON    = T1CON.0      'Bit de habilitación para el timer1 (1=On, 0=Off)
Symbol TMR1IE    = PIE1.0       'interrupción por timer1
Symbol TMR1IF    = PIR1.0       'bandera desborde tmr1
Symbol GIE       = INTCON.7
Symbol PEIE      = INTCON.6
Symbol INTE      = INTCON.4
Symbol INTF      = INTCON.1
Symbol INTEDG    = OPTION_REG.6
Symbol LED3      = PORTB.3
;----

; Declaración de variables
KILOMETRAJE VAR WORD
Counter VAR Word
Dsp1    VAR Byte
Dsp2    VAR Byte
Dsp3    VAR Byte
Index   VAR Byte
;{{{{{
 ; Declaración de variables
 T  VAR Byte
 X  VAR Byte
TIMER1 VAR Word
PRECARGA  VAR Word
INTB0   VAR Byte
;}}}}

 PRECARGA=40536             ' Valor obtenido con la calculadora RRPicTimerCalculator  para que salte el timer1 cada 100ms
 TMR1H=PRECARGA.HighByte    ' Precargamos el timer1 inicialmente 
 TMR1L=PRECARGA.LowByte

 
 On Interrupt GoTo interrupcion '  En caso de interrupción ir a subrutina interrupción
 INTCON=%10010000               '  el bit 7 habilita las interrupciones en general
                                '  El bit 4 habilita la  interrupción B.0 
  T1CON=%00001101               '  Timer1 on, incremento por Osc interno  
  

Clear       ; Inicializar variables a 0 (Limpiar RAM)
; Mandar ceros en formato 7 segmentos a los registros de desplazamiento.
ShiftOut SDA_Pin,SCL_Pin,LSBFIRST,[$FC,$FC,$FC]

MainProgram:

    Gosub   Tabla                       ; Ir a las tablas de conversión
    
    GoTo MainProgram
   
   interrupcion: 
                 
  If INTF=1 Then    INTB0=INTB0+1   ' Contamos los giros que da la rueda
  INTE=1                            ' Habilitar la interrupción nuevamente
  INTF=0                            'Borrar la bandera de int B.0
  
  Resume                     ' Retorna al programa donde ocurrió la interrupción 
  Enable                     ' Habilita las interrupciones después del handler 
  END
Tabla:
; Subrutina de conversión para código de 7 segmentos cátodo común.
    Index = Counter DIG 0   ; Tomamos las unidades
    LookUp Index,[$FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6],Dsp1

    Index = Counter DIG 1   ; Tomamos las decenas
    LookUp Index,[$FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6],Dsp2

    Index = Counter DIG 2   ; Tomamos la centenas
    LookUp Index,[$FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6],Dsp3
; Mandamos los datos hacia los registros de desplazamiento.   
    ShiftOut SDA_Pin,SCL_Pin,LSBFIRST,[Dsp1,Dsp2,Dsp3]
    Return
No te quiero pinchar el globo, pero el problema de los velocimetros o cuenta vueltas de "vehiculos" que implementan display 7 segmentos, es malisima la visualizacion de los valores... mas aun cuando hay una histeresis, producto del ciclo o loop del programa... se entiende? no esta mal la idea de implementar la interrupcion por hardware mas un timer...fijate que ya lo mencione anteriormente aca, en un tema similar al tuyo....
01/03/2013 #2370


Hola torres.electrico,

Pues es una lástima que no funcione bien, yo nunca lo he implementado y ahora menos lo haré, sinembargo me parece haber visto uno hecho en assembler que funcionaba y tenía un video en youtube, al menos eso parece. En fin, si surge una idea para ese proyecto publicala pues sería fabuloso hacerlo.

Suerte y gracias por el comentario.
01/03/2013 #2371

Avatar de torres.electronico

DEPREDADORX1 dijo: Ver Mensaje
Hola torres.electrico,

Pues es una lástima que no funcione bien, yo nunca lo he implementado y ahora menos lo haré, sinembargo me parece haber visto uno hecho en assembler que funcionaba y tenía un video en youtube, al menos eso parece. En fin, si surge una idea para ese proyecto publicala pues sería fabuloso hacerlo.

Suerte y gracias por el comentario.
Hola, ya esta planteado con un display 16x2 y hasta la funcion de corte RPM... el problema de los display 7 segmentos, es la visualizacion por ejemplo en una aclerada brusca... si estas contando las RPM, el ojo en vista panoramica no alcanza a distinguir bien los numeros y se leen inconcientemente mas ochos que otra cosa... distinto a mirarlo fijo, ahi se ve una pequeña oscilacion final, pero se puede ajustar con programacion...
Ojo, en elm display LCD no cambia mucho el tema de la oscilacion... pero se ve un poco mas claro
02/03/2013 #2372


Saludos,

Siguiendo entonces con el tema, para un velocímetro lo mejor es no hacerlo con pic?
Entonces no tenemos precisión de tiempo aunque utilicemos una fuente de clock externa, que se puede hacer ante este problema...

Yo tenía planeado construirme tanto el velocímetro como un pirómetro, al menos por acá se le conoce con ese nombre, utilizado para los hornos de vitrofusión para controlar las curvas de temperatura. Si no existe la manera de tener un tiempo preciso que opciones usar.

Suerte a todos.
03/03/2013 #2373


Tengo que realizar un proyecto con Pic 12f509, pero realizando unas pruebas, con proteus y todo esto.

Al momento de ver los nombres de los pines en proteus, sus "ports" se llaman GP, pero al momento de colocar portgp.0, portgp.1 no funciona. He intentado con porta y portb pero nada ademas en el proteus sale como 12c509 espero tu respuesta
03/03/2013 #2374
Moderador

Avatar de D@rkbytes

xdarkhawk dijo: Ver Mensaje
Al momento de ver los nombres de los pines en proteus, sus "ports" se llaman GP, pero al momento de colocar portgp.0, portgp.1 no funciona. He intentado con porta y portb pero nada ademas en el proteus sale como 12c509 espero tu respuesta
El nombre del puerto en los PIC12 se llama GPIO
GPIO.0
GPIO.1
GPIO.2
Etc.
Ó GPIO = Valor ; (%Binario, Decimal y $Hexadecimal)
Para la configuración de entradas y salidas, es TRISIO
TRISIO.0
TRISIO.1
TRISIO.2
Etc.
Ó TRISIO = Valor ; (%Binario, Decimal y $Hexadecimal)

En Proteus te sirve igual el 12C509A, la letra F (Flash) significa que el PIC es reprogramable.
Los PIC con letra C, son PIC's OTP (One Time Programmable) solo los puedes grabar una vez.

Suerte.
04/03/2013 #2375


como contar 5 minutos en pic basic
'¿que instruccion en pic basic puedo usar para contar 5 minutos y me mantenga en high un puerto' se los agradeceria mucho
05/03/2013 #2376

Avatar de torres.electronico

DEPREDADORX1 dijo: Ver Mensaje
Saludos,Siguiendo entonces con el tema, para un velocímetro lo mejor es no hacerlo con pic?
No no no no Yo no dije en ningun momento que no es mejpor hacerlo con un micropic... Yo lo que mencione, es que implementar un display 7 segmentos para un velocimetro de "automovil", no es lo recomendado por la visualizacion...

DEPREDADORX1 dijo: Ver Mensaje
Yo tenía planeado construirme tanto el velocímetro como un pirómetro, al menos por acá se le conoce con ese nombre, utilizado para los hornos de vitrofusión para controlar las curvas de temperatura. Si no existe la manera de tener un tiempo preciso que opciones usar.
El pirometro si es factible realizarlo con un display 7 segmentos, ya que la curva de temperatura, no es brusca... Es el proyecto mas sencillo que hay con display 7 segmentos... Estoy navegando desde el telefono celular por que no estoy en mi casa hasta el 19 de marzo, asi que acá te dejo un ejemplo y ma adelante cuando llegue, lo subo acá como corresponde:

Cuando nos vemos en la necesidad de hacer una conversion de Binario a Decimal, picbasic pro inclye un operador que puede ser empleado para este proposito... El operador DIG (mal llamado comando); El operador DIG devuelve el valor de un dígito decimal . Simplemente se le indica el número de dígito a conocer ( 0 - 4 , siendo 0 el primero de la derecha) y ya está.
Dicho de otra manera, para deglosar el valor binario y extraer el valor deseado, hay que especificar con el numero de digito siguiente de la variable a la que vas a extraer el digito... Suponiendo que solo quieres que extraiga el segundo valor, tienes que poner el bit 1 logicamente, y te funcionara, si quieres el tercer valor tienes que poner el bit2 y asi sucesvamente.
Acordate que el operador funciona de la siguiente forma :

Variable = DIG Value , Digit number

_donde variable es es la variable donde guardara el valor extraido
_DIG es el comando
_Value es el valor o la variable de donde vas a extraer el digito
_y numero digito es el BIT que quieres extraer de Value


Un ejemplo sencillo:

B0 = 123 ;setea B0 en 123
B1 = B0 DIG 1 ;setea B1 en 2 (dígito 1 de 123)

Veamos un ejemplo practico, en el cual transformamos el valor binario a decimal empleando el operador DIG.
Los fuses tendrian que modificarlos a sus gusto y aplcacion; A esto sumale que necesitaras un 7447 para decodificar la salida del pic y obtener la multiplexacion a los display 7 segmentos....

Rutina Sensor Temperatura Display 7Segmentos:

DEFINE ADC_BITS 8
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50

Adc VAR BYTE
Temp VAR WORD
unid VAR BYTE
dece VAR BYTE
cent VAR BYTE

TRISA = 11111
TRISB = 000000
;configuramos todo el puerto B como salida

ADCON1 = 001000 ; Chequea esta configuracion por que varia segun micro

Inicio:
ADCIN 0,Adc
Temp = Adc*150/77
unid = Temp DIG 0
PORTB = unid + 224
Pause 5
dece = Temp DIG 1
PORTB = dece + 208
Pause 5
cent = Temp DIG 2
PORTB = cent + 176
Pause 5
GoTo Inicio



Video:

(extraido de http://www.picbasic.co.uk/forum/cont...9-en-Espa%F1ol ahi podes descargar el hex y archivo proteus)

PD: Estimadisimo amigo moderador.... quiero pensar que no lo vas a tomar como spam el tema...¿verdad? saludos
05/03/2013 #2377


Hola torres,

Ah.... gracias por la aclaración, ya había utilizado el Dig pero con proton, sinembargo ahora recuerdo haber armado algo básico en protoboard y haber tenido problemas en la visualización así como comentas uhm... lo que si me inquieta es como ajustar con más precisión los tiempos pues me parece muy crítico que uno se dé al trabajo de armar algo y si es, quizás en un futuro, para comercializar, salga con fallas o inprecisiones se lleva al traste el esfuerzo, tomemos por ejemplo el código que expuse anteriormente, basado también en ejemplos de aquí y otros espacios como éste, me tomó varios días cuadrarle, digamos que eliminamos en problema de visualización que no es tan grave, entonces que hago si resulta que los datos arrojados son inexactos, a mi forma de ver es un gran dilema.

Bueno, mil gracias por atender estas inquietudes.
05/03/2013 #2378

Avatar de torres.electronico

DEPREDADORX1 dijo: Ver Mensaje
Hola torres,

Ah.... gracias por la aclaración, ya había utilizado el Dig pero con proton, sinembargo ahora recuerdo haber armado algo básico en protoboard y haber tenido problemas en la visualización así como comentas uhm... lo que si me inquieta es como ajustar con más precisión los tiempos pues me parece muy crítico que uno se dé al trabajo de armar algo y si es, quizás en un futuro, para comercializar, salga con fallas o inprecisiones se lleva al traste el esfuerzo, tomemos por ejemplo el código que expuse anteriormente, basado también en ejemplos de aquí y otros espacios como éste, me tomó varios días cuadrarle, digamos que eliminamos en problema de visualización que no es tan grave, entonces que hago si resulta que los datos arrojados son inexactos, a mi forma de ver es un gran dilema.

Bueno, mil gracias por atender estas inquietudes.
Cuando hablamos de led respectivamente en estos tipos de proyectos, a modo de tips te comento, que para que se visualice bien un display 7 segmentos, no podemos refrezcar la informacion a imprimir en elm display en un tiempo menor a 50ms, ya que es ahi donde arranca el problema de que se ven todos "8" o algunos numeros no se ven bien definidos... al refrezcar en un tiempo menor a los 50ms, lo que obtenemos es un efecto de "persistencia de la visión" y eso es recomendable para otro tipos de proyectos (matrices seriales).
Como la curva de temperatura y o velocidad no es tan brusca y no hay grandes cambios en 50 / 60 ms, no afectaria el valor de la lectura verdadera; O sea, si leemos la temperatura, la convertimos en digital, la procesamos con calculos matematicos lineales y luego la imprimimos, tenemos mas o menos (segun cristal) un trabajo no mayor a los 100ms.. a esto le sumamos una breve pausa cuando esta en estado alto en los puertos, y ya tenemos el delay que neesitamos... obviamente, siempre estamos hablando de tiempos inferiores al segundo.
Si requeris de algo certificado, tienes que tener en cuenta que los comandos / lineas, segun cristal, tienen un tiempo dado de trabajo... eso hay que tenerlo en cuenta cuando uno quiere hacer un cronometro, u cosas que trabajan con tiempos... Igualmente, puedes emplear para estos casos especiales ASM.
exitos
05/03/2013 #2379
Moderador

Avatar de D@rkbytes

yitzensk dijo: Ver Mensaje
'¿que instrucción en pic basic puedo usar para contar 5 minutos y me mantenga en high un puerto' se los agradecería mucho
Instrucción para retardos de 5 minutos no existe.
Puedes usar Pause para retardos en mili segundos y PauseUs para retardos en micro segundos.

Lo que se puede hacer es una rutina para ese propósito.
Aquí adjunto dos ejemplos para generar retardos largos de tiempo.
El primer ejemplo es simplemente para un uso básico, y el segundo es más complejo.
En el segundo utilice activación por interrupción externa del pin RB0 y retardos en ensamblador.
Éste segundo ejemplo es para mostrar como crear subrutinas en código ensamblador con PBP.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar 16F628A Timer.rar (16,0 KB (Kilobytes), 179 visitas)
Tipo de Archivo: rar 16F628A Timer II.rar (16,8 KB (Kilobytes), 164 visitas)
08/03/2013 #2380

Avatar de ferdy575

D@rkbytes dijo: Ver Mensaje
Instrucción para retardos de 5 minutos no existe.
Puedes usar Pause para retardos en mili segundos y PauseUs para retardos en micro segundos.

Lo que se puede hacer es una rutina para ese propósito.
Aquí adjunto dos ejemplos para generar retardos largos de tiempo.
El primer ejemplo es simplemente para un uso básico, y el segundo es más complejo.
En el segundo utilice activación por interrupción externa del pin RB0 y retardos en ensamblador.
Éste segundo ejemplo es para mostrar como crear subrutinas en código ensamblador con PBP.

Suerte.
hola D@rkbytes me parece excelente tu programa pero quisiera que me digas que función realiza la palabra "REM" cuando escribes esta parte:

Disable ; Deshabilita interrupciones en el controlador
Rem Controlador de la interrupción por RB0
Contar:
INTCON.1 = 0 ; Limpiar flag INTF (Interrupción externa por RB0)
t1 = 1 ; Cargar esta variable con el valor 1
LED_Red = 1 ; Encender el LED rojo
Rem Procedimiento para Retardos de tiempo (By: D@rkbytes)
Loop1: ; Etiqueta para realizar un bucle
t1 = t1 + 1
Rem Dos retardos de 500Ms = 1 segundo
Rem Se puede eliminar el encendido y apagado del LED,
Rem y hacer dos retardos de 500Ms

lo leí muy bien pero no entiendo esta función agradecería que me expliques y perdona la ignorancia
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.