Curso de programación de PIC en PICBasic Pro

Dario anterior mente habia posteado un proyecto robot seguidor de linea y cumple con tus exigencias compara dos variables determinadas por dos potenciomentros simulados en proteus , lo que debes realizar es al adecuacion del comando para controlar el Servo motor en las lineas straight,left,right desarrolle la comparacion a 15 con referente a los potenciometros para que el pic conteniera el comando y para el motor por lo que es dificil que ambos esten a la misma medicion generandose un parametro de error y lo desea lo puedes implementar a 6 pero no menor ya que la comparacion sera erronea y el motor realizara giro de derecha a izquierda.

Este es dodigo fuente:
Código:
@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz 
 
 
;ROBOT SEGUIDOR DE LUZ
 
b0 var byte         ;VARIABLE PARA GUARDAR EL VALOR DE LDR1
b1 var byte         ;VARIABLE PARA GUARDAR VALOR DE LDR2 
b2 var byte         ;VARIABLE DE COMPARACION DE LDR1 Y LDR2
p2 var portb.0      ;SALIDA MOTOR1
p3 var portb.1      ;SALIDA MOTOR2
p4 var portb.2      ;SALIA MOTOR2
EN1 var portb.3    ; habilitador inversor giro MOTOR 2
EN2 VAR PORTB.4      ;HABILITADOR MOTOR UNO
 
LED1 VAR PORTA.0
LED2 VAR PORTA.1
LED3 VAR PORTA.2
 
start:                          ;INICIO
pot portb.5,255,b0              ;LEE LDR1 Y GUARDA VALOR EN BO
pot portb.6,255,b1              ;LEE LDR2 Y GUARDA VALOR EN B1
If b0 = b1 then straight        ;SI BO =B1 ENTONCER IR  ALA RUTINA STRAIGHT
if b0 > b1 then left            ;SI BO ES MAYOR A B1 IR A IZQUIERDA
if b1 > b0 then right           ;SI B1 ES MAYOR QUE BO ENTONCES IR A DERECHA
 
straight:                       ;RUTINA COMIENZO
pwm EN2,125,30:HIGH p2
LOW EN1: low p3:low p4   ; HABILITA MOTOR 1
high led1
goto start                     ;IR A INICIO 
 
left:                         ;RUTINA IZQUIERDA
b2 = b0-b1                    ;RESTE EL VALOR DE BOY B1 Y GUARDELO EN LA 
                              ;VARIABLE B2 
if b2 > 15 then left1         ;SIB2 ES MAYOR QUE 15 ENTONCES IR A RUTINA 
                              ;IZQUIERDA 1                                    
goto straight                 ;IR A INICIO
 
left1:                       ;RUTINA IZQUIERDA 1
pwm EN2,125,30:HIGH p2
HIGH EN1: LOW P3:high p4 ;ACTIVA SALIDA P3 Y DESACTIVA SALIDA P4
HIGH LED2                      ;ENCIENDE TESTIGO              
goto start                    ;IR A INICIO
 
right:                         ;RUTINA DERECHA
b2 = b1-b0                     ;RESTE EL VALOR DE B1 CON B0 Y GUARDE EL
                               ;VALOR EN B2
if b2 > 15 then right1         ;SI B2 ES MAYOR QUE 15 ENTONCES IR A RUTINA 
                               ;DERECHA 1   
goto straight                  ;IR A INICIO
 
right1:                        ;RUTINA DERECHA 1
pwm EN2,125,30:high p2
HIGH EN1:HIGH P3:low p4 ;ACTIVA SALIDA P4 Y DESACTIVA SALIDA P3
HIGH LED3                       ;ENCIENDE TESTIGO
goto start                      ;IR A INICIO
 
end                             ;FIN DE PROGRAMA
[/QUOTE]


espero te sirva
 
muchas gracias amigo mecatrodatos, voy a adaptar los repectivos comandos con pbasic y luego lo simulo en proteus para ver que pasa.
en cuanto tenga novedades te cuento como me fue.
saludosss
 
Hola a todos, tengo una duda con la instruccion PULSIN si esta instruccion manda solo pulsos a la salida que uno le indique o puede dejar en 1 algun canal de salida siempre y cuando a la entrada le sigan llegando los pulsos 10101010 por ejemplo si en la entrada portb.2, entra la señal de un tren de pulsos ( 10101010 ) y si se pierde la secuencia de que se quede en 1 o en 0 por unos segundos que active la salida portb.3

'PIC16F628A'
@ device xt_osc ; oscilador externo XT
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz
TRISA=%00000000
TRISB=%00000100
PULSE VAR WORD 'VARIABLE DE ALMACENAMIENTO TIPO WORD'
SYMBOL LED = PORTB.3 'LED DE SEÑAL DE SALIDA'
LED =0
INICIO:
PULSIN PORTB.2, 1, PULSE
HIGH LED
GOTO INICIO
END

espero me puedan ayudar, gracias
 
Que tal amigo mot me parece que estas utilizando mal el comando ya que PULSIN es utilizado para medir el ancho de pulso de un pin determinadoy PULSOT es el que genera una trama de ancho de pulso con un periodo especificado este es utilizado para controlar servos o intencidad luminica de led por otro lado se utiliza el PWM para controlar motores DC convencionales todo esto por software.

el mismo inconveniente tiene nuestro amigo Dario ya que es mejor utilizar el comando PULSOUT de la siguiente forma:

Pulsout portb.7,165 'Envia un pulso de 1.65 mseg por el pin 7 del puerto B

Por ultimo les recomiendo revisar el manual de PBP posteado en las primeroas paginas de este foro, donde esta especificado la utilizacion de los anteriores comando
 
Gracias amigo mecatrodatos, es lo que quiero medir un ancho de pulso pero externo, no del microcontrolador y que cuando se pierda esa secuencia me ponga en 1 una salida, gracias por la pronta respuesta y seguiremos leyendo el manual de PBP, un coordial saludo.
 
Programa controlador electronico de velocidad

'****************************************************************
'* Name : Control Velocidad.BAS *
'* Author : Mecatrodatos *
'* Notice : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 16/01/2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
' Controlador electrónico de velocidad Emite PWM para control de velocidad
' Funciona con H-Puente al envíar tren de pulsos controlados por pot, el ajuste
' de oscilador Con 20 Mhz, y FF PR2 = $, = 0,8 ms = 1,25 kHz período
' v2 - Adicion de interrupciones
' Parece que está trabajando mucho - Contador Inc a través de ciclo de interrupción
'
' v3 - Agregar Quad Encoder Rutinas
' Inc's & Decs QuadCount como Byte [-127 .. 0 .. 127]
' Tabla de saltos Usos para gastos generales bajos
'
' v4 Añadir real Quad Rutinas
@ Device XT_OSC ' Crystal de alta valocidad tipo xt
@ Device WDT_ON ' Watch Dog temporizador ON
@ Device PWRT_ON ' Restablecer el poder temporizador ON
@ Device BOD_ON '
@ Device LVP_OFF ' Bajo voltaje de la capacidad De programación
@ Device CPD_OFF ' Proteccion codigo OFF
define __16F873A 1
define OSC 20
DEFINE INTHAND DO_ISR
DEFINE DEBUG_REG PortC
DEFINE DEBUG_BIT 6
DEFINE DEBUG_BAUD 9600
DEFINE DEBUG_MODE 0
' ------------- Direcciones de hardware ---------------------------
GIE VAR INTCON.7 ' Habilita Interrupciones Globales
PEIE VAR INTCON.6 ' Habilita Interrupciones Perif. Eq.
ADIE VAR PIE1.6 ' Conversor de activación de interrupción A-2-D
TMR1IE VAR PIE1.0 ' PIE direccion 10h
TMR2IE VAR PIE1.1
TMR1ON VAR T1CON.0 'Registro de direcciones se encuentran en PIC.inc
TMR2ON VAR T2CON.2

EnaPin VAR PORTC.2 ' Pin PWM
FwdPin VAR PORTB.5
RevPin VAR PORTB.4
QuadPin1 Var PORTC.0
LED var PORTC.3
' ------------- Repartir el espacio de almacenamiento para la Interrupción -----------------------
wSave VAR BYTE $20 SYSTEM ; Guardar ubicación W reg en bank0
wSave1 VAR BYTE $A0 SYSTEM ; Guardar ubicación W reg en bank1
'wSave2 VAR BYTE $120 SYSTEM ; Guardar ubicación W reg en bank2
'wSave3 VAR BYTE $1A0 SYSTEM ;Guardar ubicación W reg si bank3
sSave VAR BYTE Bank0 SYSTEM ; Guardar ubicación para STATUS reg
pSave VAR BYTE Bank0 SYSTEM ; Guardar ubicación para PCLATH reg
StatFlag VAR BYTE Bank0
GyroTaskFlag VAR StatFlag.0
OddCycleFlag VAR StatFlag.1
QuadStateFlag var Statflag.2
QuadCount VAR Byte Bank0 ; Contar ciclos del encoder [-127..0..127]
QuadPins Var Byte Bank0 ; Estado actual de los pines
QuadPrev VAR Byte Bank0 ; Estado anterior de pines Quad Encoder
QuadByte Var Byte Bank0
' -------------- Asignar variables ---------------------------
ADVal Var Word
DutyCycle Var Byte
nLoops VAR Byte

'============================================================================
'============================================================================
CodeStart:
Goto InitSeq ' IR a subrutina InitSeq
'============================================================================
'============================================================================
'Do_ISR
'interrumpir el servicio de rutina
'Manejar todos las interrupciones
Asm
DO_ISR
IF (CODE_SIZE <= 2)
movwf wsave ; Guardar registro W
swapf STATUS,W ; Guardar registro STATUS
clrf STATUS ; Cambiar a banco 0
movwf ssave ; Guardar reg STATUS en el banco 0
movf PCLATH,W ; Guardar en Contador de Progrma
movwf psave ; Guardar localizacion en Banco 0
EndIF

; ==========================================================================
; Ver que causó la interrupción.
; Vector a las rutinas correctas
clrf STATUS ; cambio en el banco 0
BTFSC PIR1,TMR1IF ; Desbordamiento Timer1?
GOTO T1_INT ; Sí - Pase a la rutina Timer1
BTFSC PIR1,TMR2IF ; Desbordamiento Timer2?
GOTO T2_INT ; Sí - Pase a la rutina Timer2
CLRF PIR1
GOTO ISR_Done ; Error - nunca manejado interrupción

; ==========================================================================
;Volver -1,0,1 en W reg
;Este debe ser de rutina en pzge 0
QUAD1_JUMP
CLRF PCLATH ; PÁGINA CERO
ADDWF PCL,F ; Salto indirecto
RETLW 0 ; 00 -> 00
RETLW 1 ; 00 -> 01
RETLW 1 ; 00 -> 10
RETLW 1 ; 00 -> 11
RETLW 1 ; 01 -> 00
RETLW 0 ; 01 -> 01
RETLW 1 ; 01 -> 10
RETLW 1 ; 01 -> 11
RETLW 1 ; 10 -> 00
RETLW 1 ; 10 -> 01
RETLW 0 ; 10 -> 10
RETLW 1 ; 10 -> 11
RETLW 1 ; 11 -> 00
RETLW 1 ; 11 -> 01
RETLW 1 ; 11 -> 10
RETLW 0 ; 11 -> 11

; ==========================================================================
T1_INT ; Timer1 desbordamiento
BCF T1CON,TMR1ON ; Apague timer1
BCF PIR1, TMR1IF ; Borrar el indicador de interrupción
; BCF PORTB,5 ; Desactivar Pin Pulse
; BCF PORTB,4 ; sólo 1 será, pero está bien claro, tanto
GOTO ISR_Done
; ============================================================================
;Obtener los datos de codificador de cuadratura
;Inc / Dec QuadCount durante interupts@1.25 tasa kHz muestra
;Abierto QuadCount durante el ciclo de dirección

T2_INT ; Timer2 / PWM de interrupción
BCF PIR1, TMR2IF ; Borrar el indicador de interrupción
MOVF PORTC,W ; Leer Quad Sensor Pins
ANDLW 1 ; y con 0001
MOVWF _QuadPins
MOVF _QuadPrev,W
ADDWF _QuadPins,W
MOVWF _QuadByte

BTFSC _QuadByte.0 ; Revisar Bit 0
INCF _QuadCount,F
MOVF _QuadPins,W
MOVWF _QuadPrev

GOTO ISR_Done


; BCF PORTB,4

; INCF _QuadCount,F
; ------
BCF STATUS,C ; Borrar bit traladado
MOVF PORTC,W ; Leer Quad Sensor Pins - y cambiar
ANDLW 1 ; con 0001
; ANDLW 6 ; con 0110
MOVWF _QuadPins
; RRF _QuadPins,F ; Roll derecho -> 0011

RLF _QuadPrev,F ; Pins Roll anterior en bits superior
RLF _QuadPrev,W ; Roll en W Reg: 1100
IORWF _QuadPins,W ; O de los Estados anterior y CRNT: PPCC
MOVWF _QuadPrev ; Guardar para la próxima vez

; Movlw 1
MOVF _QuadPrev,W ; parece no-necesario
CALL QUAD1_JUMP
ADDWF _QuadCount,F

; ===============================
ISR_Done
Movf psave,w ; Restaurar el reg PCLATH
Movwf PCLATH
swapf ssave,w ; Restaurar el reg STATUS
;(conjuntos de banco estado original)
Movwf STATUS ; mover W en reg STATUS
swapf wsave,f ; guardar Swap w_
swapf wsave,w ; guardar Swap w_ intercambio en W

RETFIE

EndASM
'============================================================================
' Subrutinas para leer tensiones conversor AD
Read_Pot1:
ADCON0 = %10000001 ' Selecionar canal 0 A/D
' Ir a Read_AD
Read_AD:
nLoops = 0
Pauseus 10 ' Espere para el canal de configuración
ADCON0.2 = 1 ' Iniciar conversion
wLoop:
nLoops = nLoops + 1
Pauseus 5 ' Tiempo para Conversion
IF ADCON0.2 = 1 then wLoop

adval.HIGHBYTE = ADRESH
adval.LowBYTE = ADRESL
Return
'-----------------------------------------------------------------------
InitSeq:
TRISA = %00000001 ' Sel PORTA
TRISB = %00000000 ' Sel PORTB
TRISC = %10000001 ' Sel PORTC
ADCON1 = %10000000 ' Ajustar el reloj de AD a Foxc/64, AD utiliza como +5 V + Vref
CCP1CON = 0 ' Modulo CCP OFF
HIGH FwdPin
LOW RevPin
QuadCount = 0
QuadPrev = 0
StatFlag = 0

T2CON = %00000011 ' Timer2 Pre-Scaler = 1:16, temporizador de apagado
TMR2 = 0 ' Borrar Timer2
PR2 = 255 ' Configuración de PWM Periodo = 1,25 kHz
CCPR1L = 63 ' Sel Ciclo util con 25%
CCP1CON = %00101100 'El modo PWM, 2 LSB de ciclo de trabajo = 10
TMR2ON = 1

Pause 500
HIGH LED
DEBUG 13,10,"Ctl Elec Vel Test v2", 13
Pause 500
GIE = 1 ' activación de interrupción
PEIE = 1 ' Periférica de activación de interrupción
TMR2IE = 1 ' habilitación Timer2 de interrupción

Low LED
debug "Llegó al bucle principal!", 13
pause 1000
'-----------------------------------------------------------------------
mainloop:
Toggle LED

Gosub Read_Pot1 ; devuelve el valor 0 .. 1023
adval = adval / 2 ;ahora rango 0 .. 511
' Debug "Pot: ", DEC ADval, 13

if adval > 255 then
adval = adval - 256
fwdpin = 0
revpin = 1
else
adval = 255 - adval
fwdpin = 1
revpin = 0
Endif

Adval = 255 - Adval ; 0 = velocidad completa
; Flip rango va de 0 .. 255 .. 0
; dir invertir en el centro

Debug "Ciclo Util: ", DEC ADval, " qCount: ", dec QuadCount, " qPrev: ", dec QuadPrev, 13
QuadCount = 0

CCPR1L = ADval MIN 255 ; Sel Ciclo Util 0..255

Pause 400
Goto mainloop

' debug 13, "All Done.", 13
End

End
 
Buenas a todos,

Primero felicitar a mi compatriota Mecatrodatos por este tutorial,:aplauso:
que te lleva directo al grano a diferencia de muchos otros que simplemente te sacan canas :enfadado:

Amigo Meca antes habia hecho pruebillas con leds y todo bien pero llegaron las fiestas navideñas, la construccion de la casa, y mi hija....eh?.

Bueno has manejado varios temas importantes pero y los 7 segmentos?, tenemos muy poca por no decir nada sobre manejar estos dispocitivos con el pic basic pro.

Tengo un proyectos en mente y aprovechando este post podemos realizarlo en conjunto y que quede la información aqui en el foro ademas del avalioso aprendizaje que dejaría en muchos foristas.

Se trata de un reloj con 7 segmentos, con pic16f628a un nuevo pic relacionado...eh, que lea los datos del bus i2c del ds1307,pues, siguiendo la relacion de distrubucion de energia de mi pueblo, por cada 2 dias de luz electrica 3 horas no y hasta si puede cerrar la relacion a diario, en fin lo que no se querria es perder la hora, y definitivamente una bateria back up no daria chicle.

y por ultimo manejaria una carga "x", es decir un relé, con un ajuste de on y off, este ciclo deberia ser diario, en mi caso para manejar la nevera por las noches...pero puede ser usado por ejemplo para sistemas de riego, iluminacion perimetral etc.:unsure:

dejo la semilla...y por supeusto el plano esquematico de lo que sería tentativamente el circuito y por supuesto como me gustaría que quedara.:D

claro...podriamos ir manejando el tema de los siete segmentos primero de modo de ir avanzando apropiadamente

Saludos y exitos a todos, cheyo28:cool:
 

Adjuntos

  • pic_reloj2.PNG
    pic_reloj2.PNG
    101.6 KB · Visitas: 646
  • microcontroller-based-digital-blue-clock.jpg
    microcontroller-based-digital-blue-clock.jpg
    82.5 KB · Visitas: 438
Amigo atricio te dejo programa y simulacion para control de posicionamiento sin margen de error, simulacion en proteus 7.6, codigo fuente , .hex y esquematico para ayuda en tu proyecto. solamente aconcicionas el codigo a tus necesidades.

Que tal amigo Cheyo interesante tu propuesta pero empezamos con utilizacion de multiplexado de display para realizar el cogido ? o vamos de una con el proyecto ...
 

Adjuntos

  • PROYECTO POSICIONAMIENTO CON POTENECIOMETRO.rar
    62 KB · Visitas: 892
Última edición:
buenas,

Amigo Meca, creo que debemos iniciar con las caracteristicas del pic16f628a, actualmente leo el libro de porgrmacion en basic, lo recomeindo (y lo encuentran en google)...seria bueno contrastarlo con el modo de programacion de tu post.

dejo est...me parece muy importante

PIC16F6xxApinout.jpg

-oscilador interno RC de 4Mhz +/- 1%
-mclr programable
-mayor capacidad de corriente, sus puerto A y B entregan un total de 200mA cada uno, es decir 25mA cada pin. lo mismo para el modo sumidero.

Gracias a un forista Lucas22, me ayodo a seleccionar los puertos adecuados para hacer este proyectos y aprendí de él muchas cosas importantes. él maneja el basic tambien...seria bueno que hiciera parte de este post.

Amigo meca, no estoy muy avansado en esto del PBP, espero me disculpe mis horrores de programacion y mis dudas...de los errores se aprende.

1-Definamos primero si las puertos estan bien asignados acoplandose al circuito
2-Este pic no usa oscilador externo, en Basic, ¿el no comandarle el oscilador externo el toma por defecto que vamos a usar oscilador interno del pic?.

fuera del proyecto: aclarame esta rutina que usaste en el reloj con lcd y ds1307...para asignar los meses y dias en el lcd

Código:
'CPNFIGURACION MESES,DIAS
Data @0,74,97,110,70,101,98,77,97,114,65,112,114
  ' Jan Feb Mar Apr
Data 77,97,121,74,117,110,74,117,108,65,117,103
  ' May Jun Jul Aug
Data 83,101,112,79,99,116,78,111,118,68,101,99
  ' Sep Oct Nov Dec
Data 84,117,101,87,101,100,84,104,117,70,114,105
  ' Tue Wed Thu Fri
Data 83,97,116,83,117,110,77,111,110
  ' Sat Sun Mon

noté que esos numeros corresponden a una letra...y hasta si esta en mayusculas...como detrminas el numero?...y ese @0 que asigna?

que hace el DIM en basic?

cuando llegue la rutina de los multiplexados podemos primero hacer un contador con la misma caracteristica y así otros ejemplos para entender las rutinas

Saludos y exitos....por la tarde voy mostrando lo que seria la rutina...eh.

Cheyo28:cool:
 

Adjuntos

  • pines 16f528a.PNG
    pines 16f528a.PNG
    337.8 KB · Visitas: 228
  • contador.PNG
    contador.PNG
    238.8 KB · Visitas: 305
"lindo" el tuto, algo apartado del tema de programaion en basic. y en portuñol:D
pero rescato un cuadro de configuracion de pines.

sigo con la duda:
1- configurar el oscilador interno, ¿el soft lo establece por defecto?
2- DIM que es?
3- la rutina que postee...un amigo me explico algo al respecto pero...aun hay dudas.

Saludos y verè si mañana dejo por lo menos declarar las variables para cada pin de cada puerto.

Sabes...estaba pensado si tenias un codigo parecido a esta aplicacion para guiarme un poco màs en como armar este rompecabezas.

cheyo28:cool:
 
Que tal amigo Cheyo el tuto que te facilite evidentemente esta en portuguez pero especifica la utilizacion de los regirtros , por otro lado para aclarar tus dudas el entorno de microcode studio tiene cargado por defecto la configuracion del oscilador interno de este pic, como tambien la conexion del Lcd al puerto A del respectivo pic para programar tu proyecto en el pick kit 2 deberas colocar estas lineas de programa:



@ Device intrc_osc 'define Oscilador interno RC
Define Osc 4 ' Define el Oscilador 4MHZ

O en su defecto:

@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT ' Opción del Osc Interno @ DEVICE pic16F628, WDT_ON ' Watchdog Timer ON @ DEVICE pic16F628, PWRT_ON ' Power-On Timer @ DEVICE pic16F628, BOD_ON @ DEVICE pic16F628, MCLR_OFF ' Master Clear Opción interno @ DEVICE pic16F628, LVP_OFF ' Bajo voltaje de programación @ DEVICE pic16F628, CPD_OFF ' Protección del código de memoria OFF @ DEVICE pic16F628, PROTECT_OFF' protección de código OFF
La razón fundamental es que el Software del programador no tiene las ventanillas para configurar el Oscilador con el cual va ha trabajar el pic por eso se debe hacer desde el programa fuente en nuestro caso desde el entorno de microcode studio.

2- DIM que es?[/COLOR]

Las variables deben ser declaradas antes de utilizarlas, mediante la instrucción DIM, como se muestra en los siguientes ejemplos:
DIM A AS BIT
DIM B AS BYTE
DIM X AS WORD

En el Entrono de pic basic pro se declaran de la siguiente forma:

A VAR BIT
B VAR BYTE
X VAR WORD

También es posible utilizar vectores, que son una matriz de dimensiones 1xN . Por ejemplo, la sentencia siguiente:

DIM A (10) AS BYTE ‘declara un vector (al que nos referiremos algunas veces como "array") de diez elementos del tipo BYTE, que serán accedidos mediante el uso de subíndice (entre paréntesis) del 0 al 9.

En el Entrono de pic basic pro se declaran de la siguiente forma:
A VAR BYTE [10]
Por último la rutina referente al comando Data son valores anidaos en la memeoria del pic para ser llamados eso te lo explicare luego con más detalle.

En cuanto a mi amigo atricio Ya habra solucionado su probema?
 
Última edición:
Hola a todos, de nuevo recurriendo a su apoyo, pero alguien ha encontrado o tiene algunos ejemplos de como utilizar las instrucciones con las operaciones logicas, ya que solo he encontrado ejemplos de ( AND, OR ) pero me gustaria tener ejemplos de las demas operacioines logicas, como la ( NOT, XOR ) porque por lo poco que empezamos a aprender, serian de mucha utilidad para algunos programas, saludos.

Hola, encontre algo de informacion, espero les sirva

http://www.scribd.com/doc/9384706/Manual-de-Programacion-Pbp
 
Última edición:
buenas,

Amigo meca le cuento que decidì hacer unos ejercicitos para recordar....nunca probe en circuitos reales solo en proteus. y ahora que no tengo proteus y lo monto en lo real....el circuito no anda.

utilicè el pic16f628a y coloquè la instruccion que me dijiste para que el pickit programara el oscilador

probe varias formas para ver si habia algo malo pero nada, no pude probar con un oscilador externo...hoy lo compro, seria provar mas tarde.

este es el ultimo codigo que le escribì al pic:

Código:
@ Device intrc_osc      ;define Oscilador interno RC
Define Osc 4               ;Define el Oscilador 4MHZ

led var portb.0            ;nombre del pin 6

inicio:                       ;nombre de subrutina de inicio
HIGH led                   ;enciende el led que esta conectado en el pin6
pause 1000               ;Espera un segundo
low led                     ;apaga el led
pause 1000               ;espera un segundo
goto inicio                 ;continua el programa para siempre
end                          ;fin del programa

lo ultimo que hice fue poner "end" aunque creo que no es necesario...pero por si las moscas...

En fin que opinas de esto que me haria falta....y sabes, creo que el microestudio deberia decir cuando hay una malainstruccion o le haga falta....creo que el asm en mplap era bastante detallista en corregir instrucciones.

Saludos y espero tu pronta respuesta, cheyo28:cool:
 
Hola tome el timer de 5 minutos que propsiste le hice algunas modificaciones para adaptarlo a lo que quiero hacer un timer que yo programe el tiempo de 0 a 60 minutos, con cuatro botones aumentar, disminuir, iniciar/pausa, y detener, resulta que el tiempo ya me lo ajusta a los minutos que quiero pero al iniciar se me cambia totalmente y empeiza con una cuenta regresiva muy acelerada ya revise y no encuentro la posible falla adjunto archivo para ver si se me pueden auiliar en algo gracias
 

Adjuntos

  • timer.rar
    16.3 KB · Visitas: 556
Amigo Cheyo realiza las siguientes configuracioens a tu programa:
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT ' Opción del Osc Interno
@ DEVICE pic16F628A, WDT_ON ' Watchdog Timer ON
@ DEVICE pic16F628A, PWRT_ON ' Power-On Timer
@ DEVICE pic16F628A, BOD_ON
@ DEVICE pic16F628A, MCLR_OFF ' Master Clear Opción interno
@ DEVICE pic16F628A, LVP_OFF ' Bajo voltaje de programación
@ DEVICE pic16F628A, CPD_OFF ' Protección del código de memoria OFF
@ DEVICE pic16F628A, PROTECT_OFF' protección de código OFF
led var portb.0 ;nombre del pin 6
inicio: ;nombre de subrutina de inicio
HIGH led ;enciende el led que esta conectado en el pin6
pause 1000 ;Espera un segundo
low led ;apaga el led
pause 1000 ;espera un segundo
goto inicio ;continua el programa para siempre
end ;fin del programa

Como te comentaba lo mismo ocurre con el Asm se debe incluir unas lieas para configurar el oscilador con el cual va ha trabajar el PIC ya que el progrmador que poseee no tiene la opcion de configurarlo como el Epiwin 800

te anexo programa en pic basic , simulacion y .hex
 

Adjuntos

  • Cheyo2.rar
    1.9 KB · Visitas: 497
Última edición:
Buenas,

Amigo meca le cuento que las instrucciones adicionales al inicio de la programacion funcionaron...el pic anda de lo lindo.

ya he hecho otros ejercicios y me andan(y)

Me queda una duda, si uno va usar un oscilador esterno...solo bastan las 2 instrucciones que has venido dibulgando desde el principio.

voy a ver si hago pruebas lo que pasa es que el camello tas pesao...y mas si es turno nocturno

Saludos y gracias cheyo28:cool:

ahhhh....aun no he dejado atras lo del proyecto final del reloj 7 segmentos voy a ver si organizo mis ideas y espero tu orientacion:LOL:
 
buenas,

Amigo meca quise darle las instrucciones en basic con el microcode estudio para que el pic16f628a trabajara con el oscilador externo, con el mismo ejemplo del led intermitente y funcionò lo dejo escrito por si alguien lo necesita.:aplauso::aplauso::aplauso:

Código:
@ DEVICE pic16F628A, XT_OSC ' Opción del Osc Externo
DEFINE osc 4                ; especifica que es de 4MHz
@ DEVICE pic16F628A, WDT_ON ' Watchdog Timer ON 
@ DEVICE pic16F628A, PWRT_ON ' Power-On Timer 
@ DEVICE pic16F628A, BOD_ON 
@ DEVICE pic16F628A, MCLR_OFF ' Master Clear Opción interno 
@ DEVICE pic16F628A, LVP_OFF ' Bajo voltaje de programación 
@ DEVICE pic16F628A, CPD_OFF ' Protección del código de memoria OFF 
@ DEVICE pic16F628A, PROTECT_OFF' protección de código OFF

led var portb.0             ;nombre del pin 6

inicio:                     ;nombre de subrutina de inicio
HIGH led                    ;enciende el led que esta conectado en el pin6
pause 1000                  ;Espera un segundo
low led                     ;apaga el led
pause 1000                  ;espera un segundo
goto inicio                 ;continua el programa para siempre
end                         ;fin del programa

la vaina es que lo quisè imitar con el pic16f84a pero ahì si no ando el man... lo escribè de esta manera y a la hora de compilar me mando 3 errores que dejo adjunto...le quite esas 3 instrucciones (referente al error) y tambien lo del mclr pero nada ni tampoco dejando solo las 2 que siempres has manifestado al inicio de la programacion.:eek:

Código:
@ DEVICE pic16F84A, XT_OSC ' Opción del Osc externo
define osc 4     ;especifica que se va a utilizar uno de 4 Mhz

@ DEVICE pic16F84A, WDT_ON ' Watchdog Timer ON 
@ DEVICE pic16F84A, PWRT_ON ' Power-On Timer 
@ DEVICE pic16F84A, BOD_ON 
@ DEVICE pic16F84A, LVP_OFF ' Bajo voltaje de programación 
@ DEVICE pic16F84A, CPD_OFF ' Protección del código de memoria OFF 
@ DEVICE pic16F84A, PROTECT_OFF' protección de código OFF

led var portb.0  ;nombre del pin 6

inicio:          ;nombre de subrutina de inicio
HIGH led         ;enciende el led que esta conectado en el pin6
pause 1000       ;Espera un segundo
low led          ;apaga el led
pause 1000       ;espera un segundo
goto inicio      ;continua el programa para siempre
end              ;fin del programa

Que estaria pasando?...que hay que hacer para que el man ande?

Agradezco que me ayudes nuevamente en esto del oscilador y el pickit 2...ahhh
y tambien para que el pic16f788a ande o todos los demas pics en general.

Saludos y espero tu pronta respuesta

cheyo28:cool:
 

Adjuntos

  • error en compi.PNG
    error en compi.PNG
    45.7 KB · Visitas: 130
Atrás
Arriba