programar un 18f452

holas ,
estoy intentando programar el pic 18f452, no me han parecido muchos pasos para lo que necesito y sinceramente yo me estoy volviendo loco, espero que con ayuda salga bien parado :D

de momento se lo que quiero que haga , pero no como

* comienzo: pone a cero dos registros de 8 bits cada uno , se les podria llamar C y S pejem.

* un encoder incremental ,a cada paso suma o resta uno al registro S este, está conectado a las patitas portA0 y portA1

* si S llega a 128 se pone a cero y suma uno al registro C; es como un reloj de 128 pasos en vez de 60.

* cada seis aumentos del registro S , la patita portC6 saca el nº11111000;f8;248

* un contador deberia de tardar en rebosar 1/2 seg si rebosa saca por portC6 bin 1111 1100, dec 252, hex FC y seguido otro bin 1111 0011, dec 243, hex F3 seguido del nº del registro C y del nº del registro S,el contador se resetea en cada incremento del registro S asi si el encoder gira en una direccion no hay interrupcion y si se para o gira en la otra hay interrupcion.

* si tras girar hacia atras vuelve hacia adelante saca por la patita portC6bin 1111 1011, dec 251, hex FB

* interrupción en portD0 activa el led conectado a la patita portD3 y saca por portC6 bin 1111 1011, dec 251, hex FB

* interrupcion en la patita portD1 apaga el led de la patita portD3 y saca por la patita portC6 bin 1111 1100, dec 252, hex FC

* interrupcion patita portD2 pone a cero los registros C y S , saca por la patita portC6 bin 1111 1100, dec 252, hex FC seguido de bin 1111 1011, dec 251, hex FB

de verdad muchas gracias aunque solo sea por perder el tiempo con este post
a se me olvidaba , es para controlar secuenciadores analogicos midi por medio del gira discos , hay quien esta haciendo su propio vinilo codificado yo he montado hasta el giradiscos, hay os dejo el esquema para proteus de la placa y el circuito para hacerlo con eagle en vez de un led en la portD va un variador de velocidad por pwm ,esta activa o desactiva el motor que hace girar el encoder :D :D
y de verdad muuuchas gracias
 

Adjuntos

  • girocore_152.zip
    95 KB · Visitas: 62
  • mbhp_core_v3_171.brd
    39.2 KB · Visitas: 29
debido a la poca ayuda que encuentro sobre este pic ,me veo obligado a usar el 16f84a de este tengo mas información y ejemplos en castllano. el motivo eran la cantidad de perifericos que se le pueden poner a este pic pero de momento creo que se puede hacer con el 16f84

configurando el bit 5 del registro OPTION(TOCS)a 1 el timer0 cuenta el nº de pulsos que entran por la patilla RA4 y con el bit 4 de OPTION(TOSE) se indica si lo hace en el flanco ascendente o descendente.
los pulsos del encoder los he sacado asi:
patilla 1 __XX__XX__XX
patilla 2 _XX__XX__XX_
patilla 3 _XXX_XXX_XXX este es la suma de las dos anteriores y es la que he conectado ha la patilla RA4 del pic asi conozco cuando empieza termina el ciclo (me entenderis mejor si simulais el circuito en proteus)
mi problema es que no se como hacer para que en una direccion cuente y en la otra descuente , he pensado que cada vez que RA4 lea el flanco ascendente se compruebe en que estado están las patillas RA1 y RA2 asi ,si en ascendente es RA1=0 y RA2=1 sumara y en la otra direccion en el flanco ascendente si RA1=1 y RA2=0 reste 1 en un registro.
otra cosilla, esto se puede hacer sobre cualquier direccion del pic que este vacia del area de la mem. ram ,no es necesario estar usando el contador no???
espero vuestras respuestas que yo tengo miles de dudillas que necesitan una ayudita
un saludo y gracias
 

Adjuntos

  • comparador_de_pulsos_incremental_133.rar
    14 KB · Visitas: 41
empezando con el codigo
tras unos cuantos libros he ido sacando esto, como se carga en el pic.
la primera parte son las igualdades de la memoria del pic
IGUALDADES
portb equ 06h
trisa equ 85h
trisb equ 86h
timer equ 01h
intcon equ 0bh
gie equ ;como se en que direccion se encuentran estos pines que no tienen nº
option equ ;como se en que direccion se encuentran estos pines que no tienen nº
INTDEG equ ;flanco activo en RBO/INT ascendente=1 desc=0
tocs equ ;como se en que direccion se encuentran estos pines que no tienen nº
tose equ ;como se en que direccion se encuentran estos pines que no tienen nº
step equ 0ch
phrase equ 10h
org 0
goto inicializa
la segunda parte INCIALIZA es la configuracion de entradas y salidas en los reg. TRIS , el registro option para utilizar el timer como contador y la direccion donde sevan a ir acumulando los datos del contador en step . aqui tras la direccion movwf step falta poner una orden que diga que si estep es igual a 128 se ponga a cero el timer, incremente en uno el registro phrase,esto es como un reloj supongo pero no localizo como se hace,por ultimo goto vuelve a inicializa
inicializa movlw,00001111 ;carga sobre w el nº...
trisa ;carga w en trisa
movlw 00000111 ;carga sobre w el nº...
trisb ;carga w sobre trisb
bcf option,5 ;pone a uno el bit tocs
;el timer actua como contador
bcf option,4 ;pone a 1 el bit tose
;cuenta en cada flanco ascendente por ra4
bcf option,6 ;pone a uno el reg intdeg
movlw timer ;guarda en w el valor de timer
movwf step ;guarda w en 0ch(step)
goto icializa
por ultimo no se que tengo que hacer exactamente con estas interrupciones donde se escriben o en que parte del programa, todavia le estoy dando vueltas a como funciona, esto es el chequeo para saber cual ha podido ser,la interrpcion solo la de la puerta rb0
interrupcion
bctffs intcon, intf ;explora el bit intf del registro intcom
;y si vale 1 hay brinco
goto intrb0

intrb0 btfss intcon, rbif ;explora el bit rbif de registro intcon
;y si vale 1 hay brinco
goto salida
(si hay brinco aqui deberia sacar una orden f8 hexa por el pin rb6)
btfss porta,2 ;comprueba el bit 2 de la puerta a y si es 1 salta
(y si es cero aqui deberia haber una orden que sacara el bit f6 stop en midi)
dectimer
goto salida
salida movlw,11111111 ;copio a w
movwf,intcon ;activo las interrupciones
retlw ;vuelve al programa principal
muchas gracias y un saludo :D :D
 
Para programar, lo primero es aprender. Repasa los registros.
gie pertenece al bit de mas peso de INTCON,, etc.

Te sugiero que colocques un include "librería del pic a realizar"

Paciencia y suerte
 
perdona por la garrafada, el problema es que en muchos de los ejemplos señuelo que tengo habian dado la misma direccion a portb equ 06h que al nombre de diferentes bits del registro como por ejemplo el de rp0 equ 05h no me habia dado cuenta que coincidia con la direccion de otro registro ,pense que habia que nombrar en algun nemonico ,no el nombre del registro si no la direccion del bite dentro de el locuras de principiante
y la realidad es que tienes razon y para aprender hay que estudiar pero para aprender tengo que preguntar si lo que hago esta bien o mal si no como aprenderia
otra cosa seria si me dijeses que si escribo esto:

movlw,00011111 ;carga sobre w el nº...
trisa ;carga w en trisa


*pues que no hace eso ,o no se escribe asi se hace de esta otra forma(un detalle)
- seria tterrible para mi pues no se por donde piso, aunque todo se puede corregir una y otra vez
os vuelvo a dejar lo que voy haciendo para que alguien le de un vistazo de veh en cuando

y gracias por la ayuda (Seguire estudiando)

IGUALDADES portb equ 06h
trisa equ 85h
trisb equ 86h
timer equ 01h
intcon equ 0bh
step equ 0ch
phrase equ 10h
goto inicializa

inicializa movlw,00001111 ;carga sobre w el nº...
trisa ;carga w en trisa
movlw 00000111 ;carga sobre w el nº...
trisb ;carga w sobre trisb
bcf option,5 ;pone a uno el bit tocs
;el timer actua como contador
bcf option,4 ;pone a 1 el bit tose
;cuenta en cada flanco ascendente por ra4
bcf option,6 ;pone a uno el bite intdeg
movlw timer ;guarda en w el valor de timer
movwf step ;guarda w en 0ch
goto icializa

interrupcion bctffs intcon, 1 ;explora el bit intf del registro intcom
;y si vale 1 hay brinco
goto intrb0
--------------------¿¿entonces aqui si hay brinco , se salta el goto intrb0 y continua por aqui??--------------------------
intrb0 btfss intcon, rbif ;explora el bit rbif de registro intcon
;y si vale 1 hay brinco
--------------------¿¿entonces aqui si hay brinco , se salta el goto intrb0 y continua por aqui??--------------------------
goto salida

salida movlw,11111111 ;copio a w
movwf,intcon ;activo las interrupciones
retlw ;vuelve al programa principal
 

Adjuntos

  • girocore_133.txt
    1.9 KB · Visitas: 20
Lo que te estoy recomendando es que revises miles de manuales de programación que puedes encontrar. Comienza por algo básico ( como estás haciendo) pero Prestando atención a dichos manuales.

Por ejemplo. En todos los manuales te indica que para programar las I/O del pic se hace en TRISx, cambiando de banco ya que se encuentran en el banco 1. Una buena cosa es que te bajes algun programita y mires como se hace.

Saludos

Puedes preguntar dudas, no que te enseñen.
 
uffff pues aqui sigo, muchas gracias por la expli sobre los bancos.
problemas en mplab ,error error error,esto lo pondre en el foro de sistemas de simulacion
pero claro al final ,he necesitado una salida asincrona del micro a 31250 baudios y el 16f84 no la tiene, hace tres dias no sabia ni lo que era , algo con lo que no habia contado :rolleyes: :rolleyes: :rolleyes:
al final estoy haciendo el codigo para un 17f73.
pero que hay que hacer para enviar los bits que haya cargados sobre el registro txreg
o cuantos ciclos hay que esperar antes de cargar el nuevo byte sobre txreg,puedo hacer un bucle sobre el bit2 trmt de txsta verificando si esta a cero para que cargue un nuevo byte en txreg
algo asi

dato
movlw play
btfss txsta,2
goto dato
movwf txreg
retfie
o por lo contrario este hay que ponerlo a cero antes de escribir un nuevo byte
gracias

h
 
aps se me olvidaba aqui está lo que llevo echo ,por si alguien le quiere echar un ojo

gracias y un saludo
 

Adjuntos

  • proyectos_mplab_176.rar
    9.1 KB · Visitas: 35
UFFFFFF! muy mal colega.
Ese pic tiene entradas analógicas y ...

Empieza por algo sencillo, muy muy sencillo . El 16F84 va bien para el comienzo.

Empieza con un simple circuito que las entradas del Puerto A aparezcan por el Puerto B.

Es muy simple.

Configuras las entradas salidas y luego un bucle moviendo a sobre b.
Si lo haces a la primera sabes un poco si no lo consigues tas muy, muy, muy verde.

Saludos
 
holas ,y te vuelvo a dar las gracias por contestar
aquí ta ,simulado en el isis funciona :D
LIST p=16f84a
list c=132
opcion equ 0x81
porta equ 0x05
portb equ 0x06
trisa equ 0x05
trisb equ 0x06
intcon equ 0x0b
status equ 0x03
org d'0'
goto empieza
org d'5'
empieza
bsf status,5
movlw b'00011111'
movwf trisa
movlw b'00000000'
clrf trisb
movwf intcon
bcf status,5
goto start
start
movf porta,w
movwf portb
goto start
end

y con respecto a lo de estar verde , seguro que si , yo soy pintor de brocha gorda ,no he estudiado nada mas que hasta el bachiller, nunca habia programado nada por mi mismo.
si te fijas , al principio de este post no sabía escribir ni una línea ops: jejej creo que en un par de meses estará casi solucionado.de momento seguire repasando la sci en modo asincrono a ver si me entero de como funciona.

un saludo
 
Atrás
Arriba