Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
06/03/2016 #3001


Saludos tengo el siguiente codigo con lo cual genero un pwm con una frecuancia fija de 1Khz
pero me gustaria variar el ciclo util de esta osea el duty, ya que haciendo un toggle en el pin
correspondiente consigo el 50% de este.
pero me gustaría realizar lo atraves de dos pus button.
agradeceria una ayuda oh comentario del mismo.

Código:
' Programa en Pic Basic Pro
'Int. Por TMR0 a 1 KHZ
@ DEVICE PIC12F683
@ DEVICE PIC12F683, FCMEN_OFF
@ DEVICE PIC12F683, IESO_OFF
@ DEVICE PIC12F683, WDT_ON
@ DEVICE PIC12F683, BOD_ON
@ DEVICE PIC12F683, PWRT_ON
@ DEVICE PIC12F683, PROTECT_OFF
@ DEVICE PIC12F683, MCLR_OFF
@ DEVICE PIC12F683, INTRC_OSC_NOCLKOUT
@ DEVICE PIC12F683, BOD_ON
Define Osc 4 ' Define el Oscilador para 4 Mhz.
I var Byte 
inc var byte
On Interrupt GoTo int_tmr0 '
Symbol TOIF = INTCON.2 ' 
Symbol INTF = INTCON.1 ' 
Symbol LED = GPIO.1 ' 
Pb_Inc	var	GPIO.0 ' 
Pb_Dec	var	GPIO.3 ' 
OSCCON=%01100001
ANSEL = 0
CMCON0 = 7
TRISIO = %11011101     
GPIO  = %00000000     
WPU = 0
OPTION_REG = %10000100 '
INTCON = %10100000 ' 

inc=0
Inicio:
if Pb_Inc = 0 then ' 
    inc=inc+1
ENDIF
IF Pb_Dec = 0 THEN
   inc=inc-1
ENDIF
GoTo Inicio ' 
End
'*********************************************************
Disable
int_tmr0:
If TOIF = 1 Then 
    TMR0 = 240
    toggle led
endif          
Reseteo:
TOIF = 0 
Resume
ENABLE
06/03/2016 #3002

Avatar de papirrin

Me parece XD que pueded lograr un pwm a 1KHz con el módulo PWM del pic y es más estable que hacerlo con un tmr, dale una buscada de como hacerlo.
07/03/2016 #3003

Avatar de torres.electronico

Inductancio dijo: Ver Mensaje
Estimado TORRES: es posible usar algo de este código para hacer un contador o frecuencimetro o tacómetro, con caracteres grandes, que ocupen 2 lineas de un LCD ??? Algo dice al respecto el comentario Nro. 2963 sobre caracteres gigantes...
Si se puede; Fijate que hay un articulo de como trabajar con estos display, y menciono como se grafican los caracteres

Inductancio dijo: Ver Mensaje
Parece que el sitio no me deja pegar link, ni hacer citas, ni hacerle preguntas por privado, creo que hay que tener un mínimo de mensajes en el foro para ganarse ese derecho.
Tal cual, y con un solo mensaje, yo te recomendaria darte una vuelta por presentaciones, un pase por el foro y ver en que se puede colaborar tampoco estaria mal, etc etc... Bienvenido al foro
15/03/2016 #3004


Gracias TORRES, voy a estar mirando...Sino encuentro nada, repregunto...Saludos.
22/03/2016 #3005

Avatar de Dario

Hola gente tanto tiempo . les cuento que estoy intentando programar un Pic16f876A con un bootloader cargado y el software tiny bootloader. he estado investigando un poco y al parecer hay que escribir un par de líneas de código extra al programa que uno intenta cargar en el pic. el único problema que tengo, es que no tengo idea de lo que hay que escribir, ni en que parte del programa hay que escribirlo. será que podrán ayudarme a definir dónde y que escribir a un programa en pbp con algún ejemplillo??? Saludosss
22/03/2016 #3006

Avatar de torres.electronico

Hola cesar, yo en su momento me guie de aca:http://www.piclist.com/techref/postb...=body&tgt=post

Pero no me funciono el 100% bien (tampoco di muchas vueltas), y decidi sumar los terminales de programaxion en circuito para no tener que sacar el micro ante una reforma
22/03/2016 #3007
Moderador

Avatar de D@rkbytes

Dario dijo: Ver Mensaje
¿Será que podrán ayudarme a definir dónde y que escribir a un programa en pbp con algún ejemplillo?
Saludos.
Mira éste enlace en donde publiqué un Bootloader.
Bootloader para PIC16F87XA
22/03/2016 #3008

Avatar de Dario

Bueno, pude hacer andar el tiny bootloader y el codigo queda asi como lo ven... lo unico que me pregunto, o mejor dicho le pregunto a los que saben, que significa este mensaje??? (Reading HEX file...
WARNING: PCLATH not fully initialised before GOTO! , ... sucessfully repaired., Writing flash...
WRITE OK at 1:17, time:0.311 sec)

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

LED var portb.4   ; asigna el nombre de led a RB4 del pic 16f877A


programa:          ; inicio de la linea de programa 
high led           ;enciende led
pause 2500         ; esperar 2.5 seg
low led            ;apaga led 
pause 500          ; espera 0.5 seg             
goto programa
end                ; fin del programa
23/03/2016 #3009


Dario, podrías explicar brevemente que es el TINY BOOTLOADER ??? Leí la explicación de D@rkbytes y se entiende para que sirve cargar un bootloader...Saludos !!!
23/03/2016 #3010

Avatar de Dario

Inductancio dijo: Ver Mensaje
Dario, podrías explicar brevemente que es el TINY BOOTLOADER ??? Leí la explicación de D@rkbytes y se entiende para que sirve cargar un bootloader...Saludos !!!
Pues si leiste la explicacin de Darkbytes y la entendiste, no hay mucho que agregar... es un programa que se usa para cargar un pic serialmente onboard, sin necesidad de estar sacando y poniendo el micro de la placa para reprogramarlo. obviamente el micro debe ser cargado con lo que se llama bootloader, que es un firmware que permite la funcion antes descrita... saludosss
23/03/2016 #3011


Gracias DARIO...No me quedaba claro si era un grabador o una aplicación...Saludos !!!
27/03/2016 #3012

Avatar de juancaca

Buenas noches compañeros del foro, estoy en un proyecto para hacer un termostato con un MAX6675 y un PIC16F628A, la cuestion es que me gustaria saber como hago para visualizar con algun comando los 16 bit que manda el MAX, este conversor tiene que en el bit 2 cuando esta en 0 la termocupla esta conectada, y pone en 1 el bit si esta desconectada, esto seria para generar un aviso que esta mala o desconectadala termocupla, la conexion del MAX al pic la hice con Shiftin, tambien tengo otro problema es que cuando llega a 650 grados se me desborda y vuelve y empieza desde 0°, estoy utilizando una rutina de punto flotante de microchip, dejo el codigo y el archivo de simulacion.

Cordial saludo y de ante mano muchas gracias
Juan Camilo Cardona

Código:
CLEAR
DEFINE OSC 20
define __16F628A 1
INCLUDE "modedefs.bas"
INCLUDE "fp2032.bas"
CMCON = 7
TRISA = %00100111
TRISB = 0
PORTA = 255
PORTB.0 = 0
PORTB.1 = 0
SERIAL      VAR WORD
SERIAL2     VAR BYTE
THC         VAR WORD
THC1        VAR WORD
THC2        VAR WORD
ENTERO      VAR WORD
DECIMAL     VAR WORD
AJUSTE      VAR WORD
AJUSTE2     VAR WORD
GRADOS      VAR BYTE
DEFINE LCD_BIT 4
DEFINE LCD_LINES 2
DEFINE LCD_DREG PORTB                                                   ; configuro la panta LCD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
LCDOUT $FE,$40,$18,$18,$03,$04,$04,$04,$03,$00                         ; POSICION 0 vizualiza los °C

INICIO:   
        GOSUB SERIAL_IN                                                ; llamo la sub-rutina que comunica el MAX con el pic                                          
        GOSUB PUNTO_FLOTANTE1                                          ; llamo la sub-rutina que maneja el punto flotante
        LCDOUT $FE,1
        LCDOUT $FE,$80, # ENTERO,".", DEC2 DECIMAL,0                
        LCDOUT $FE,$C0, # THC2;
        ;GOSUB SERIAL_ALARMA        
        PAUSE 250
        
GOTO INICIO
'Cargo la rutina de punto flotante de microchip 
PUNTO_FLOTANTE1:        
        AINT = SERIAL
        GOSUB ITOFA
        BINT = 16
        GOSUB ITOFB
        GOSUB FPDIV
        BINT = 100
        GOSUB ITOFB
        GOSUB FPMUL       
        GOSUB FTOIA
        AINT = AINT - 2475       
        ENTERO = AINT /100
        DECIMAL = AINT //100
        RETURN

SERIAL_IN:
        LOW PORTB.0
        SHIFTIN PORTB.1, PORTB.2,0,[SERIAL\16]                       ; comunicacion SPI
        HIGH PORTB.0
RETURN
 
END
Archivos Adjuntos
Tipo de Archivo: rar Termostato.rar (18,6 KB (Kilobytes), 24 visitas)
27/03/2016 #3013

Avatar de torres.electronico

Hola Juan, estoy escribiendo del telefono y se me complica esctibirte un ejenplo completo, pero basicamente 1ero creas la variable tipo word (16bits) y despues, la deglosas asi...

Dato_w VAR word [16]
Dato_b VAR bit [o]
Dato_b VAR bit [1]
Etc etc hasta el bit 16...
28/03/2016 #3014

Avatar de juancaca

Hola torres. Muchas gracias por responder.
No entiendo cómo hacerlo porque al crear las arrays me dice que están duplicadas y la verdad no veo como hacerlo con el ejemplo que me das.

Cordial saludo.

---------- Actualizado después de 2 horas ----------

Hola compañeros, hola torres.
Bueno, ya pude entrar al bit que sensa la termocupla, lo hice creando una variable y llamando el bit serial_2 var serial.bit13 y así me muestra la alerta.
Lo que me falta es cómo hacer que no se me reinicie la medición de los grados, ya que cuando va a los 650° empieza nuevamente desde 0° y debería llegar hasta los 1000° aproximadamente.
Yo sé que se está desbordando, ¿pero como podría hacer con esa rutina de Microchip de punto flotante para que no se me desborde y llegue a los 1000°?
Código PHP:
CLEAR
DEFINE OSC 20
define __16F628A 1
INCLUDE "modedefs.bas"
INCLUDE "fp2032.bas"
CMCON 7
TRISA 
= %00100111
TRISB 
0
PORTA 
255
PORTB.0 
0
PORTB.1 
0
SERIAL      
VAR WORD
SERIAL_2    
VAR SERIAL.BIT13
SERIAL2     
VAR BYTE
THC         
VAR WORD
THC1        
VAR WORD
THC2        
VAR WORD
ENTERO      
VAR WORD
DECIMAL     
VAR WORD
AJUSTE      
VAR WORD
AJUSTE2     
VAR WORD
GRADOS      
VAR BYTE
DEFINE LCD_BIT 4
DEFINE LCD_LINES 2
DEFINE LCD_DREG PORTB                                                   
configuro la panta LCD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
LCDOUT $FE
,$40,$18,$18,$03,$04,$04,$04,$03,$00                         POSICION 0 vizualiza los °C

INICIO
:   
        
GOSUB SERIAL_IN                                                llamo la sub-rutina que comunica el MAX con el pic                                          
        GOSUB PUNTO_FLOTANTE1                                          
llamo la sub-rutina que maneja el punto flotante
        LCDOUT $FE
,1
        LCDOUT $FE
,$80# ENTERO,".", DEC2 DECIMAL,0                
        
LCDOUT $FE,$C0#SERIAL_2 
        
;GOSUB SERIAL_ALARMA        
        PAUSE 250
        
GOTO INICIO
'Cargo la rutina de punto flotante de microchip 
PUNTO_FLOTANTE1:        
        AINT = SERIAL
        GOSUB ITOFA
        BINT = 16
        GOSUB ITOFB
        GOSUB FPDIV
        BINT = 100
        GOSUB ITOFB
        GOSUB FPMUL       
        GOSUB FTOIA
        AINT = AINT - 2475       
        ENTERO = AINT /100
        DECIMAL = AINT //100
        RETURN

SERIAL_IN:
        LOW PORTB.0
        SHIFTIN PORTB.1, PORTB.2,0,[SERIAL\16]                       ; comunicacion SPI
        HIGH PORTB.0
        IF SERIAL_2 = 1 THEN SERIAL_ALARMA
RETURN

SERIAL_ALARMA:
        LCDOUT $FE,1
        LCDOUT $FE,$80, # ENTERO,".", DEC2 DECIMAL,0                
        LCDOUT $FE,$C0, "TERMOCUPLA OPEN"
        PAUSE 100
        IF SERIAL_2 = 0 THEN GOTO INICIO
GOTO SERIAL_ALARMA
END 
28/03/2016 #3015

Avatar de torres.electronico

juancaca dijo: Ver Mensaje
Hola torres. Muchas gracias por responder.
No entiendo cómo hacerlo porque al crear las arrays me dice que están duplicadas y la verdad no veo como hacerlo con el ejemplo que me das.

Cordial saludo. .

torres.electronico dijo: Ver Mensaje
Hola Juan, estoy escribiendo del telefono y se me complica esctibirte un ejenplo completo, pero basicamente 1ero creas la variable tipo word (16bits) y despues, la deglosas asi...

Dato_w VAR word [16]
Dato_b VAR bit [0]
Dato_b VAR bit [1]
Etc etc hasta el bit 16...
Lo que queria decir en el ejemplo, es que tenes que normbrar otra variable tipo bit con ditinto nombre

juancaca dijo: Ver Mensaje
Hola compañeros, hola torres.
Bueno, ya pude entrar al bit que sensa la termocupla, lo hice creando una variable y llamando el bit serial_2 var serial.bit13 y así me muestra la alerta.

Código:
SERIAL_2    VAR SERIAL.BIT13
SERIAL2     VAR BYTE
o bien, tambien podes hacer este arreglo:

Código:
SERIAL2 VAR WORD 

S2_0 VAR SERIAL2.0
S2_1 VAR SERIAL2.1
S2_2 VAR SERIAL2.2
S2_3 VAR SERIAL2.3
S2_4 VAR SERIAL2.4
S2_5 VAR SERIAL2.5
S2_6 VAR SERIAL2.6
S2_7 VAR SERIAL2.7
S2_8 VAR SERIAL2.8
S2_9 VAR SERIAL2.9
etc etc...
S2_16 VAR SERIAL2.16
Por ejemplo, el bit 4 de la variable SERIAL2 seria S2_4
29/03/2016 #3016

Avatar de torres.electronico

Como te fue Juan? podrias sacar una captura del diagrama del circuito? queria ver el adjunto y esta en el formato de Proteus8; Saludos
29/03/2016 #3017

Avatar de juancaca

Buenas noches compañeros.
torres te cuento que me fue muy bn, pude entrar a bit que me da la alarma de desconexion ó daño de la termocupla, no he podido solucionar lo del desborde de la variable, solo me mide hasta 650° de los 1023° que da, estoy pensando migrar a un pic 18F que se pueda crear una variable tipo long, hasta ahora no se cual, tengo un 18F2550 pero pbp 2.60 no reconoce ese tipo de variables.
Monto la simulacion en proteus 7.9 y el codigo.

Cordial saludo.
Juancaca

Código PHP:
CLEAR
DEFINE OSC 20
define __16F628A 1
INCLUDE "modedefs.bas"
INCLUDE "fp2032.bas"
;include "fp4032.bas"
CMCON 7
TRISA 
= %00100111
TRISB 
0
PORTA 
255
PORTB.0 
0
PORTB.1 
0
SERIAL      
VAR WORD
'SERIAL_15   VAR SERIAL.BIT0
'
SERIAL_14   VAR SERIAL.BIT1
'SERIAL_13   VAR SERIAL.BIT2
'
SERIAL_12   VAR SERIAL.BIT3
'SERIAL_11   VAR SERIAL.BIT4
'
SERIAL_10   VAR SERIAL.BIT5
'SERIAL_9    VAR SERIAL.BIT6
'
SERIAL_8    VAR SERIAL.BIT7
'SERIAL_7    VAR SERIAL.BIT8
'
SERIAL_6    VAR SERIAL.BIT9
'SERIAL_5    VAR SERIAL.BIT10
'
SERIAL_4    VAR SERIAL.BIT11
'SERIAL_3    VAR SERIAL.BIT12
SERIAL_2    VAR SERIAL.13
'
SERIAL_1    VAR SERIAL.BIT14
'SERIAL_0    VAR SERIAL.BIT15
ENTERO      VAR WORD
DECIMAL     VAR WORD
DEFINE LCD_BIT 4
DEFINE LCD_LINES 2
DEFINE LCD_DREG PORTB                                                   ; configuro la panta LCD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
LCDOUT $FE,$40,$18,$18,$03,$04,$04,$04,$03,$00                         ; POSICION 0 vizualiza los °C

INICIO:   
        GOSUB SERIAL_IN                                                ; llamo la sub-rutina que comunica el MAX con el pic                                          
        GOSUB PUNTO_FLOTANTE1                                          ; llamo la sub-rutina que maneja el punto flotante
        LCDOUT $FE,1
        LCDOUT $FE,$80, # ENTERO,".", DEC2 DECIMAL,0                
        LCDOUT $FE,$C0,#serial_2," BIT DE ALARMA"                     ; 
        PAUSE 250
        
GOTO INICIO
'
Cargo la rutina de punto flotante de microchip 
PUNTO_FLOTANTE1
:        
        
AINT SERIAL
        GOSUB ITOFA
        BINT 
4
        GOSUB ITOFB
        GOSUB FPDIV
        BINT 
100
        GOSUB ITOFB
        GOSUB FPMUL       
        GOSUB FTOIA
        AINT 
AINT 2475             
        ENTERO 
AINT /100
        DECIMAL 
AINT //100
        
RETURN
'PUNTO_FLOTANTE2:        
'        
AINT AJUSTE
'        GOSUB ITOFA
'        
BINT 100
'        GOSUB ITOFB
'        
GOSUB FPMUL    
'        GOSUB FTOIA
'        
AINT AINT 2475             
'        ENTERO = AINT /100
'        
DECIMAL AINT //100
'        RETURN
PUNTO_FLOTANTE3:
        
SERIAL_IN:
        LOW PORTB.0
        SHIFTIN PORTB.1, PORTB.2,0,[SERIAL\14]                       ; comunicacion SPI
        HIGH PORTB.0
        IF SERIAL_2 = 1 THEN SERIAL_ALARMA
RETURN

SERIAL_ALARMA:
        LCDOUT $FE,1
        LCDOUT $FE,$80, # ENTERO,".", DEC2 DECIMAL,0                
        LCDOUT $FE,$C0, "TERMOCUPLA OPEN"
        PAUSE 100
        IF SERIAL_2 = 0 THEN GOTO INICIO
GOTO SERIAL_ALARMA
END 
Imágenes Adjuntas
Tipo de Archivo: jpg Termostato.jpg (250,1 KB (Kilobytes), 18 visitas)
Archivos Adjuntos
Tipo de Archivo: rar Termostato prot 7.9.rar (32,1 KB (Kilobytes), 10 visitas)
29/03/2016 #3018

Avatar de torres.electronico

juancaca dijo: Ver Mensaje
Buenas noches compañeros.
torres te cuento que me fue muy bn, pude entrar a bit que me da la alarma de desconexion ó daño de la termocupla, no he podido solucionar lo del desborde de la variable, solo me mide hasta 650° de los 1023° que da, estoy pensando migrar a un pic 18F que se pueda crear una variable tipo long, hasta ahora no se cual, tengo un 18F2550 pero pbp 2.60 no reconoce ese tipo de variables.
Monto la simulacion en proteus 7.9 y el codigo.

Cordial saludo.
Juancaca
Hola Juan, estoy compilando con 2.5



Te dejo un ejemplo de como empleo los bits que yo quiero:

Código:
'****************************************************************
'*  Name    : PRUEBAbit.pbp                                     *
'*  Author  : [ - prof.martintorres@educ.ar - ]                 *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 29/03/2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
DEFINE OSC 4
  
define LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 2

X VAR BYTE
SERIAL VAR WORD[16]
SERIAL_0 VAR SERIAL.BIT0
SERIAL_1 VAR SERIAL.BIT1
SERIAL_2 VAR SERIAL.BIT2
SERIAL_3 VAR SERIAL.BIT3
SERIAL_4 VAR SERIAL.BIT4
SERIAL_5 VAR SERIAL.BIT5
SERIAL_6 VAR SERIAL.BIT6
SERIAL_7 VAR SERIAL.BIT7
SERIAL_8 VAR SERIAL.BIT8
SERIAL_9 VAR SERIAL.BIT9
SERIAL_10 VAR SERIAL.BIT10
SERIAL_11 VAR SERIAL.BIT11
SERIAL_12 VAR SERIAL.BIT12
SERIAL_13 VAR SERIAL.BIT13
SERIAL_14 VAR SERIAL.BIT14
SERIAL_15 VAR SERIAL.BIT15

MENU:
PAUSE 10
BIT_02:
SERIAL=0
 LCDOUT $FE,1
FOR SERIAL = 1 TO 1023
LCDOUT $FE,$80,"bit0:",DEC SERIAL_0," BIT2:",DEC SERIAL_15
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 50
IF SERIAL_2 = 1 THEN
  LCDOUT $FE,1
  LCDOUT $FE,$80,"BIT2=",#SERIAL_2," -FIN-"
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 1500
GOTO BIT_05
ENDIF
NEXT

BIT_05:
SERIAL=0
 LCDOUT $FE,1
FOR SERIAL = 1 TO 1023
LCDOUT $FE,$80,"bit0:",DEC SERIAL_0," BIT5:",DEC SERIAL_5
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 50
IF SERIAL_5 = 1 THEN
  LCDOUT $FE,1
  LCDOUT $FE,$80,"BIT5=",#SERIAL_5," -FIN-"
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 1500
GOTO BIT_08
ENDIF
NEXT

BIT_08:
SERIAL=0
LCDOUT $FE,1
FOR SERIAL = 1 TO 1023
LCDOUT $FE,$80,"bit0:",DEC SERIAL_0," BIT8:",DEC SERIAL_8
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 50
IF SERIAL_8 = 1 THEN
  LCDOUT $FE,1
  LCDOUT $FE,$80,"BIT8=",#SERIAL_8," -FIN-"
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 1500
GOTO BIT_12
ENDIF
NEXT

BIT_12:
SERIAL=0
LCDOUT $FE,1
FOR SERIAL = 1 TO 1023
LCDOUT $FE,$80,"bit0:",DEC SERIAL_0," BIT12:",DEC SERIAL_12
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 50
IF SERIAL_12 = 1 THEN
  LCDOUT $FE,1
  LCDOUT $FE,$80,"BIT12=",#SERIAL_12," -FIN-"
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 1500
GOTO BIT_15
ENDIF
NEXT

BIT_15:
SERIAL=0
LCDOUT $FE,1
FOR SERIAL = 1 TO 1023
LCDOUT $FE,$80,"bit0:",DEC SERIAL_0," BIT15:",DEC SERIAL_15
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 50
IF SERIAL_15 = 1 THEN
  LCDOUT $FE,1
  LCDOUT $FE,$80,"BIT7=",#SERIAL_15," -FIN-"
LCDOUT $fe,$C0,#SERIAL_0,#SERIAL_1,#SERIAL_2,#SERIAL_3,#SERIAL_4,#SERIAL_5,#SERIAL_6,#SERIAL_7,#SERIAL_8,#SERIAL_9,#SERIAL_10,#SERIAL_11,#SERIAL_12,#SERIAL_13,#SERIAL_14,#SERIAL_15
PAUSE 2500
ENDIF
NEXT

LCDOUT $FE,1
LCDOUT $FE,$80,"fin del"
LCDOUT $fe,$C0,"ejemplo"
PAUSE 2500

GOTO MENU
y este es el circuito por si qures ver como se comporta:



Basicamente, lo que hice en el ejemplo que te escribi, es que arranque un conteo y cuando llega a determinados BITS, se frene y te lo indique, para luego arrancar de nuevo y parar en otro bit que seleccione...

---------- Actualizado después de 4 minutos ----------

el tema del desborde, tendria que ponerme a leer la hoja de datos del MAX por que no recuerdo como funciona y ver con mas atencion tu programa...pero desde el vamos, sacaria las librerias FP y lo haria con menos lineas...eso hablando a la ligera...tendria que verla con mas tiempo...saludos
Imágenes Adjuntas
Tipo de Archivo: jpg PRUEBAbit_2.JPG (110,2 KB (Kilobytes), 140 visitas)
Tipo de Archivo: jpg PRUEBAbit.JPG (102,5 KB (Kilobytes), 138 visitas)
13/04/2016 #3019

Avatar de callecuatro1976

Consulta. Estoy aprendiendo PICBasic Pro y mi código no mide más que 1,24 voltios en la pantalla lcd.
No sé qué estoy haciendo mal. Es un voltímetro que hago con el PIC16F883
Código:
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2
define intosc 8
DEFINE ADC_BITS 8
DEFINE ADC_CLOCK 3 
DEFINE ADC_SAMPLEUS 50
trisa = 1
trisb = 0
ADCON0 = %11000001
ADCON1 = %00000000 
ANSEL = %00000001 
ANSELH = %00000000 
;Variables para guardar los valores leidos
LECTURA VAR word
RESULTADO VAR word
;Dar una pausa antes de iniciar para alistar la LCD
LCDOUT $FE, 1 ;Limpiar la LCD
LECTURA_DE_DATOS: ;Bloque de inicio del programa
ADCIN 0, LECTURA ;Leer por PORTA.0 y guardar en LECTURA
RESULTADO = (LECTURA */ 500)>>2;Guardar en RESULTADO la conversion
LCDOUT $FE, 1 ; Limpiar la LCD
LCDOUT $FE, 2, DEC (RESULTADO/100),".",dec2 resultado, "v" ;Mostrar el resultado en la LCD
PAUSE 100 ;Pausa de 100 milisegundos
GOTO LECTURA_DE_DATOS ;Volver al inicio para leer datos
END ;Fin
Archivos Adjuntos
Tipo de Archivo: rar Nueva carpeta (6).rar (14,0 KB (Kilobytes), 12 visitas)
13/04/2016 #3020

Avatar de juancaca

callecuatro1976 dijo: Ver Mensaje
RESULTADO = (LECTURA */ 500)>>2;Guardar en RESULTADO la conversion
[/code]
Hola compañero,
lo unico que debes quitar en el codigo es >>2 para que te de el resultado que esperas, porque lo que estas haciendo es dividir el resultado por 4.
¿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.