Programación Específica > Microcontroladores

 Evaluacion De La Idea De Mi Proyecto

<< < (10/11) > >>

jgpeiro:
sip, lo se, pero de mmnto prefiero elaborar lo que mas o menos tengo en mente. una vez todo esto este realizado, si que kiero añadirle algunas cosas(como la posibilidad de almacenar y mostrar dibujitos).
Ahm, recorede una cosa que yo pense xa mi emisor de infrarrojos en su dia. Nada mas q yo lo hice con dos botones, y cuando se pulsaba uno la frecuencia era de 1Khz. Cuando se pulsaba el otro, la frecuencia era de 2Khz. Cuando se pulsaban los 2 a la vez emitia con una nueva frcuencia de 2.7Khz.
En fin, espero que este consejo te sea de utilidad

Pegasux:
http://www.geocities.com/dinceraydin/lcd/intro.htm

En esta pagina viene explicado el funcionamiento de un display 2x16, esta bien para entender como funcionan para poder programarlos con el pic. Tambien viene un simulador. Estaria bien saber tambien las diferencias que hay con un display como el del 5110, ya que los estandar tienen 14 pines y el del 5110 solo tiene 9 creo:

http://todomodding.com/forums/showthread.php?threadid=254

aqui viene una explicacion de un display del 3310, seria interesante tener disponible toda la informacion para poder trabajar con ello mas comodamente.
Saludos.

jgpeiro:
#include <p16f88.inc>

ledRreg         equ      021H
ledGreg         equ      022H
ledcount      equ      023H
chanelreg      equ      024H
ADchanel2outC   equ      025H
ADchanel3outC   equ      026H
ADchanel4outC   equ      027H
;050H-05FH,0D0H-0DFH   Accx Buffer
;060H-06FH,0E0H-0EFH   Accy Buffer

init  
   nop
   nop
   nop
   nop
   
   ;BuscarFlAG, ejecutar subrutina, retfie.
   btfsc   INTCON,TMR0IF
   goto   TMR0overflow
   btfsc   PIR1,SSPIF
   goto   SSPcompleteTR
   btfsc   PIR1,TMR2IF
   goto   TMR2toPR2match
   btfsc   PIR1,TMR1IF
   goto   TMR1overflow
   btfsc   PIR2,EEIF
   goto   EEPROMwritecompleted ;Internal EEPROM
   

CONFIGDEV  ;CONFIG DEVICE(I/O PORTS, A/D, clock, SPI, IRQs,TIMERs, WDT)   
;OSCILLATOR CONFIGURATIONS            INTO2 8MHZ,whit I/O on RA6,RA7
   bsf      STATUS,RP0
   movwf   B'00000000'
   movwf   OSCTUNE
   movlw   B'01110010'
   movwf   OSCCON
   bcf      STATUS,RP0
;INTERRUPTS         TMR0,TMR1,TMR2,SSP
    bsf      STATUS,RP0
    movlw   B'10000010'
    movwf   OPTION_REG
    bsf      STATUS,RP0
   movlw   B'11100000'
   movwf   INTCON
   movlw   B'00000000'
   movwf   PIR1
   movlw   B'00000000'
   movwf   PIR2
   bsf      STATUS,RP0
   movlw   B'00001001'
   movwf   PIE1
   movlw   B'00010000'
   movwf   PIE2
   bcf      STATUS,RP0
;I/O PORTS
   ;PORTA
   movlw   B'00000000'
   movwf   PORTA
   bsf      STATUS,RP0
   movlw   B'01011100'   
    movwf   TRISA   
    bcf      STATUS,RP0
    ;PORTB
   movlw   B'00000000'
    movwf   PORTB      ;PORTB7-0 outputs
   bsf      STATUS,RP0
   movlw   B'00100010'   
    movwf   TRISB   
    bcf      STATUS,RP0
;SSP      configurado en modo SPI Master
   movlw   B'00000000'
   movwf   SSPBUF      ;b7-0
   movlw   B'00100000'
   movwf   SSPCON      ;b7-0   
   bsf      STATUS,RP0
   movlw   B'11000000'
   movwf   SSPSTAT      ;b7-6,1
   bcf      STATUS,RP0
;A/D
   movlw   B'00000000'
   movwf   ADRESH      ;b7-0
   movlw   B'01000001'
   movwf   ADCON0      ;b7-2,0
   bsf      STATUS,RP0
   movlw   B'0'
   movwf   ADRESL      ;b7-0
   movlw   B'11000000'
   movwf   ADCON1      ;b7-4
   movlw   B'00011100'
   movwf   ANSEL      ;b6-0
   bcf      STATUS,RP0

;TIMER0 MODULE
   movlw   B'00000000'
   movwf   TMR0
   
;TIMER1 MODULE
;TMR1L
;TMR1H
;T1CON
;TIMER2 MODULE
;TMR2
;T2CON
;PR2
;DATA EEPROM
;WDT
   bsf      STATUS,RP0
   movlw   B'00011110'
   movwf   WDTCON
   bcf      STATUS,RP0

;CCP MODULE                        OFF
;USART                           OFF
;COMPARATOR MODULE                  OFF
;COMPARATOR VOLTAGE REFERENCE MODULE   OFF

CONFIGREGS
   movlw   050H
   movwf   ADchanel2outC
   movlw   060H
   movwf   ADchanel3outC
   movlw   B'00000100'
   movwf   chanelreg
   movlw   B'10101010'
   movwf   SSPBUF
   movlw   B'00100000'
   movwf   SSPCON   

   
ledlevel
   ;como cambiar LedXreg desde cada subrutina?
   movlw   B'10101010'
   movwf   ledRreg
   movlw   B'10000000'
   movwf   ledGreg
   movlw   0B0H
   movwf   ledcount

loop      ;el programa inicial despues de un ReSET un configurar el uC

   nop
   goto loop
   nop


TMR0overflow ;(interrupt);
   bcf      INTCON,TMR0IF
ADnoend
   btfsc   ADCON0,GO_DONE   ;esperar en caso de q el AD no haya terminado
   goto   ADnoend
   btfsc   chanelreg,2      ;comprobar que canal se ha leido
   goto   ADchanel2out
   btfsc   chanelreg,3
   goto   ADchanel3out
   btfsc   chanelreg,4
   goto   ADchanel4out

ADchanel2out
   bcf      STATUS,RP0
   movfw   ADchanel2outC      ;guardar los datos de la conversion en un buffer mediante indf
   movwf   FSR
   movfw   ADRESH
   movwf   INDF
   bsf      STATUS,RP0
   bsf      FSR,7
   movfw   ADRESL
   movwf   INDF
   bcf      FSR,7
   bcf      STATUS,RP0
   incf   ADchanel2outC,f
   movfw   ADchanel2outC
   sublw   060H
   btfss   STATUS,Z
   goto   ADchanelselect
   movlw   050H
   movwf   ADchanel2outC
   ;indicar que el buffer Accx(050H-05FH,0D0H-0DFH)esta completo.El buffer Accy aun le queda un dato por almacenar
   goto   ADchanelselect


ADchanel3out   
   bcf      STATUS,RP0
   movfw   ADchanel3outC      ;guardar los datos de la conversion en un buffer mediante indf
   movwf   FSR
   movfw   ADRESH
   movwf   INDF
   bsf      STATUS,RP0
   bsf      FSR,7
   movfw   ADRESL
   movwf   INDF
   bcf      FSR,7
   bcf      STATUS,RP0
   incf   ADchanel3outC,f
   movfw   ADchanel3outC
   sublw   070H
   btfss   STATUS,Z
   goto   ADchanelselect
   movlw   060H
   movwf   ADchanel3outC
   ;indicar que el buffer Accy(060H-06FH,0E0H-0EFH)esta completo. Los buffers Accx y Accy estan llenos
   ;desactivar interrupciones por AD?
   goto   ADchanelselect


ADchanel4out
   ;solo comprobar que las tensiones son adecuadas comparandolo con una referencia
   goto   ADchanelselect
   
ADchanelselect
   ;change chanel to read in next AD obtain(2,3,4)
   bcf      STATUS,C
   rlf      chanelreg,f
   btfsc   STATUS,C
   bsf      chanelreg,0

   btfsc   chanelreg,2
   goto   chanel2      ;el AccX
   btfsc   chanelreg,3
   goto   chanel3      ;el AccY
   btfsc   chanelreg,4
   goto   chanel4      ;el Vbat
   movlw   B'00000100'
   movwf   chanelreg
   goto   chanel2   ;;; xq es el proximo que se debe leer!!!
chanel2   
   movlw   B'00010000'      ;seleccionar canal 2 (010)
   iorwf   ADCON0,f
   movlw   B'11010111'      ;seleccionar canal 2 (010)
   andwf   ADCON0,f   
   goto   ADstart
chanel3
   movlw   B'00011000'      ;seleccionar canal 3 (011)
   iorwf   ADCON0,f
   movlw   B'11011111'      ;seleccionar canal 3 (011)
   andwf   ADCON0,f
   goto   ADstart
chanel4   
   movlw   B'00100000'      ;seleccionar canal 4 (100)
   iorwf   ADCON0,f
   movlw   B'11100111'      ;seleccionar canal 4 (100)
   andwf   ADCON0,f
   goto   ADstart

ADstart
   bsf      ADCON0,GO_DONE
   goto   rotateLEDs
rotateLEDs
   incfsz   ledcount,f      ;esperar varias IRQ por TMR0 para rotar los LEDs
   retfie
   rrf      ledGreg,f      ;rotar y mostar LEDGREEN
   btfsc   STATUS,C
   bsf      ledGreg,7
   bcf      STATUS,C
   btfss   ledGreg,0
   bsf      PORTB,6
   btfsc   ledGreg,0
   bcf      PORTB,6
   rrf      ledRreg,f      ;rotar y mostar LEDRED
   btfsc   STATUS,C
   bsf      ledRreg,7
   bcf      STATUS,C
   btfss   ledRreg,0
   bsf      PORTB,7
   btfsc   ledRreg,0
   bcf      PORTB,7
   movlw   0B0H
   movwf   ledcount
   retfie               ;FIN DE LA INTERRUPCION ;Datos AD obtenidos y guardados en buffer, LEDs rotados.



SSPcompleteTR
   bcf   PIR1,SSPIF
;   subrutine
   retfie
TMR2toPR2match
   bcf   PIR1,TMR2IF   
;   subrutine
   retfie   
TMR1overflow
   bcf   PIR1,TMR1IF   
;   subrutine
   retfie
EEPROMwritecompleted
   bcf   PIR2,EEIF   
;   subrutine
   retfie

   END

jgpeiro:
Por fin termine 3 de las 4 rutinas para controlar el hardware, con sus interrupciones y su codigo optimizado para permitir ocupar el tiempo minimo al micro. Segun unos calclos aproximados el micro permanece libre aproximadamente un 90% del tiempo, es decir, la mayor parte del tiempo esta esperando a que se desborde un timmer o a q le devuelvan un dato del exterior.
El micro se arranca y configura los registros de todos los perifericos, busca la procendencia de las interupciones, salva y carga los registros mas importantes durante las interrupciones, lee datos analogicos de un ADXL 311 cada periodo de 3mS y toma el valormedio de cada 16 medidas. Comprueba e estado de la bateria cada 3mS. Envia datos a un LCD LPH7366 utilizando el periferico SSP y sus interrupciones, informa al usuario mediante 2 LEDs(rojo y verde) que tb van con IRQ...bueno, si alguien quiere el codigo en ASM que me lo pida, tb realice algunso cambios en el esquema, pero no son importantes. De mometo pienso eliminar el 74LVC07, el regulador de 5V y alimentar todo el circuito a 3.3V o 3.0V, pero no es nada demasiado importante....
Me queda realizar una rutina para leer y escribir en las EEPROM. Primero voy a hacer un diagrama de flujo del codigo que e escrito....en unos dias lo pondre.

jgpeiro:
aqui va el esquema del programa que e escrito en ASM, por cierto, son unas 380 instrucciones....

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa