Autor Tema: uart pic16f88 configuración...  (Leído 3890 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
uart pic16f88 configuración...
« en: 23 de Marzo de 2007, 17:17:04 »
Hola,

Despues de ajustar todo el código para este pic 16f88, ahora lo que intento es conectarlo via rs232 y poder escribir en la flash del pic. La idea es que una vez este todo hecho. Solo con conectar por rs232 sea posible cambiar las tablas que tiene mi programa. La intención es dejar siempre en la flash el programa principal, solamente cambiar las tablas. Así solo cargaría el programa entero una vez, y despues solamente por uart mandar las tablas nuevas y sobre-escribir en las que tengo...

Lo primero que debo hacer es configurar el uart... Solo voy a usar esta opción cuando el programa no esté funcionando, asi que no es importante si mientras hago el cambio de tablas siga las intrucciones del programa bien, porque no estará funcionando, en ese momento solo importará conectar y escribir en la flash.

Me gustaría que me dijerais los pasos que debo seguir para hacer esto, y si sabeis algun tipo de manual sencillo para entenderlo bien. No se si debo hacer una interrupcion, simplemente viendo si esta mandando una letra o algo se active y haga los pasos para mandar datos...

Gracias.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: uart pic16f88 configuración...
« Respuesta #1 en: 23 de Marzo de 2007, 18:07:18 »
El primer paso sería que sepas como actualizar la flash desde el pic.  Si sabes hacer eso, estás en la vía correcta.

Dime si sabes eso y te puedo indicar que otros pasos puedes dar.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Re: uart pic16f88 configuración...
« Respuesta #2 en: 24 de Marzo de 2007, 16:15:20 »
Gracias Mauricio,

Pues la verdad es que no mucho, solo lo que he podido ver en el pdf del pic, un ejemplo que cita de como escribir en la memoria flash. Pensaba que era necesario antes configurar la usart para poder empezar a plantearse la escritura de la flash.

Si puedes al menos decirme los pasos que debería dar y de que forma, estaría muy agradecido, me siento muy perdido . :?

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: uart pic16f88 configuración...
« Respuesta #3 en: 26 de Marzo de 2007, 11:59:24 »
Si puedes al menos decirme los pasos que debería dar y de que forma, estaría muy agradecido, me siento muy perdido . :?

A mi modo de ver el problema, debes primero saber y dominar cómo grabar/leer la flash.  Prueba con eso.  El MPLAB con su MPSIM funcionan muy bien para probar estas cosas, no hace falta que quemes ningún pic durante el proceso de aprendizaje.  :)

Los ejemplos que he probado de microchip para grabado/lectura de flash, me han funcionado (16F877 y 16F877A).

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Re: uart pic16f88 configuración...
« Respuesta #4 en: 27 de Marzo de 2007, 10:41:54 »
Mauricio,

Pero como puedo simular que estoy escribiendo en la flash sin pic?.
Puedes poner el ejemplo que usaste?... es que no se como empezar.
Si es posible comentame como podría chequear eso.

Gracias por la molestia.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: uart pic16f88 configuración...
« Respuesta #5 en: 05 de Abril de 2007, 17:49:53 »
Mauricio,

Pero como puedo simular que estoy escribiendo en la flash sin pic?.
Puedes poner el ejemplo que usaste?... es que no se como empezar.
Si es posible comentame como podría chequear eso.

Gracias por la molestia.

El ejemplo está en el datasheet y de acuerdo al pic que uses corresponde el ejemplo.  Si es un 16F877 es uno y si usas un 16F877A es otro.  EN esta parte los pics suelen diferir unos de otros por eso te remito a que leas el datasheet el ejemplo que corresponda para tu pic.

Lo simulo en el MPLAB con el MPSIM.  Al grabar, abro una ventana de memoria de programa -> View / Program Memory.

Ahí puedes ver cómo se modificó la memoria de programa! y puedes navegar hasta la posición de memoria de programa que deseas.  Esa es la forma de comprobar que todo funciona bien con el simulador.

Espero se haya entendido.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Re: uart pic16f88 configuración...
« Respuesta #6 en: 11 de Abril de 2007, 11:29:02 »
Hola Mauricio,

Perdona la tardanza...
He estado intentando usar el simulador con el ejemplo del pdf, pero no se hacerlo bien, he usado el program memory window, mi intención es borrar la posicion 100. Poniendo Machine en program memory, no veo los valores que estoy cargando en cada posicion y si borra no veo que lo haga. Te pongo el codigo, es el ejemplo del pdf para un 16f88, también puse la escritura.
Espero que me puedas decir donde debo mirar y chequear...

;*****************************************************************************
;***                 Version : 1                                           ***
;*****************************************************************************
 
   list      p=16F88            ; List directive to define processor
   #include <p16F88.inc>        ; Processor specific variable definitions
   __CONFIG   _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF &

_BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC

;*****************************************************************************
; Vars, constants and defines
;*****************************************************************************

    CBLOCK   0x20              ; RAM START ADDRESS
ADDRH
ADDRL
word_block
DATA_L
DATA_H

    ENDC


    ERRORLEVEL -302 ; Don't show message 302 while compiling.

;*****************************************************************************
; Program start
;*****************************************************************************
                        ORG     0          ; RESET vector location
RESET                   goto    START
;*****************************************************************************
; Interrupt vector
;*****************************************************************************
                        ORG     4              ; interrupt vector location
;*****************************************************************************
; Interrupt Routine.
;*****************************************************************************





;*****************************************************************************
; Program start
;*****************************************************************************
START                   clrf    STATUS           ; Clear Status
                        clrf    INTCON           ; Disable interrupts
                        clrf    PCLATH           ; Keep in lower KByte
                        clrf    PORTA            ; Clear ports
                        clrf    PORTB
                        bsf     STATUS,RP0       ; Select bank 1
                        clrf   ANSEL            ; All pins are Digital

                        movlw   H'07'
                        movwf   CMCON            ; Turn off comparators
                        movlw   B'00010000'      ; i/o port value
                        movwf   TRISA
                        movlw   B'00000001'      ; i/o port value
                        movwf   TRISB
                        movlw   B'10000111'      ; pullup off, prescaler=256,
                        movwf   OPTION_REG       ; Set the OPTION register

                        bcf     STATUS, RP0      ; Select bank 0
                        bsf     INTCON,TMR0IE    ; unmask the timer0 interrupt
                        bsf     INTCON,GIE       ; and enable interrupt.   

;*****************************************************************************
; WRITE FLASH MEMORY
;*****************************************************************************

                        movlw   0x12
                       movwf   DATA_L
                        movlw   0x04
                       movwf   DATA_H
                        movlw   0x01
                       movwf   ADDRH
                        movlw   0x00
                       movwf   ADDRL
; erase flash memory
                        BANKSEL EEADRH           ; Select Bank of EEADRH
                        MOVF    ADDRH, W         ;
                        MOVWF   EEADRH           ; MS Byte of Program Address to Erase
                        MOVF    ADDRL, W         ;
                        MOVWF   EEADR            ; LS Byte of Program Address to Erase
;ERASE_ROW
                        BANKSEL EECON1           ; Select Bank of EECON1
                        BSF     EECON1, EEPGD    ; Point to PROGRAM memory
                        BSF     EECON1, WREN     ; Enable Write to memory
                        BSF     EECON1, FREE     ; Enable Row Erase operation
                                                 ;
                        BCF     INTCON, GIE      ; Disable interrupts (if using)
                        MOVLW   H'55'            ;
                        MOVWF   EECON2           ; Write 55h
                        MOVLW   H'AA'            ;
                        MOVWF   EECON2           ; Write AAh
                        BSF     EECON1, WR       ; Start Erase (CPU stall)
                        NOP                      ; Any instructions here are ignored as processor
                                                 ; halts to begin Erase sequence
                        NOP                      ; processor will stop here and wait for Erase complete
                                                 ; after Erase processor continues with 3rd instruction
                        BCF     EECON1, FREE     ; Disable Row Erase operation
                        BCF     EECON1, WREN     ; Disable writes
                        BSF     INTCON, GIE      ; Enable interrupts (if using)
; write flash memory

; 1. The 32 words in the erase block have already been erased.
; 2. A valid starting address (the least significant bits = '00') is loaded into EEADRH:EEADR
; 3. This example is starting at 0x100, this is an application dependent setting.
; 4. The 8 bytes (4 words) of data are loaded, starting at an address in RAM called ARRAY.
; 5. This is an example only, location of data to program is application dependent.
; 6. word_block is located in data memory.

                        BANKSEL EECON1           ;prepare for WRITE procedure
                        BSF     EECON1, EEPGD    ;point to program memory
                        BSF     EECON1, WREN     ;allow write cycles
                        BCF     EECON1, FREE     ;perform write only
                        BANKSEL word_block
                        MOVLW   .4
                        MOVWF   word_block       ;prepare for 4 words to be written
                        BANKSEL EEADRH           ;Start writing at 0x100
                        MOVLW   0x01
                        MOVWF   EEADRH           ;load HIGH address
                        MOVLW   0x00
                        MOVWF   EEADR            ;load LOW address
                        BANKSEL DATA_L
                        MOVLW   DATA_L           ;initialize FSR to start of data
                        MOVWF   FSR
loop
                        BANKSEL EEDATA
                        MOVF    INDF, W          ;indirectly load EEDATA
                        MOVWF   EEDATA
                        INCF    FSR, F           ;increment data pointer
                        MOVF    INDF, W          ;indirectly load EEDATH
                        MOVWF   EEDATH
                        INCF    FSR, F           ;increment data pointer
                        BANKSEL EECON1
                        MOVLW   0x55             ;required sequence
                        MOVWF   EECON2
                        MOVLW   0xAA
                        MOVWF   EECON2
                        BSF     EECON1, WR       ;set WR bit to begin write
                        NOP                      ;instructions here are ignored as processor
                        NOP
                        BANKSEL EEADR
                        INCF    EEADR, f         ;load next word address
                        BANKSEL word_block
                        DECFSZ  word_block, f    ;have 4 words been written?
                        GOTO loop                ;NO, continue with writing
                        BANKSEL EECON1
                        BCF     EECON1, WREN     ;YES, 4 words complete, disable writes
                        BSF     INTCON,GIE       ;enable interrupts


;*****************************************************************************

;*****************************************************************************
    end


Gracias.