• Domingo 17 de Noviembre de 2024, 05:45

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - pikman

Páginas: [1]
1
Microcontroladores / Re: Cargar Una E2prom Con Usart Del 16f628
« en: Lunes 16 de Mayo de 2005, 05:44 »
Hola, bueno, aqui dejo el codigo, como esta funciona en un 16F877 u otro que tenga puerto C, por lo tanto hay que modificar esto, tambien debe usarse la instruccion tris para los 16CX (los de 12 bits) en lugar de cargar el registro tris, por lo tanto si se pretende usar un PIC16C55 por ejemplo ( pues este posee port C), se debe reemplazar esto

bsf   STATUS,RP0
   movlw   b'11100111'
   movwf   TRISC
bcf   STATUS,RP0

por

   movlw   b'11100111'
                tris            portc

Y  ademas las direcciones de los registros de RAM, que pueden lelgar a ser posiciones usadas en otros procesos, o bueno si les sobra memoria las dejas solo para esto, pero no olviden este precioso detalle.

Como podran observar mas abajo, cada vez que se realiza una operacion se programa el sentido de los pines, se puede llegar a optimizar, y eliminar algunas
operaciones pero para entender la rutina se las dejo asi, y por supuesto no olviden que el valor binario que cargan al registro debe contener las direcciones fijas de los otro pines, y por ultimo las lineas SDA y SCL deben tener una resistencia de PULL-UP de 100K al +VCC, en algunos circuitos omiten la de SDA, pero les aconsejo porner las dos si no le puede llegar a doler la cabeza.
Es posible, en los micros que lo disponen, activar en el portB los week pullup, con esto se pueden omitir las resistencias internas.
Al final hay dos rutinas una que lee y  otra que escribe un byte determinado de la memoria.
No todas las 24XX son iguales, de la 24C16 en adelante la direccion es de 16 bits, y si se va usar la 24LC16 mucha atencion que su direccionamiento no es igual, de cualquier modo les recomiendo leer la hoja de datos de la memoria que vayan a utilizar, basicamente estas rutinas pueden ser usadas para cualquiera.

saludos y espero que les sirva.

PIKMAN / ARIEL




;====================================================================
; Definicion de registros auxiliares en RAM para manejo de la memoria
; Rutina generica para microcontroladores sin MSSP, totalmente
; FIRMWARE es aplicable en cualquier microcontrolador, de la linea 16c6xx
; para los 16c5x hay que modificar los registros TRIS si no no anda
;====================================================================
ADDR   equ   0x30 ; direccion a escribir
DATAO   equ   0x31 ; dato a escribir
SLAVE   equ   0x32 ; direccion de esclavo
TXBUF   equ   0x33 ; buffer de tx
COUNT   equ   0x34
EEPROM   equ   0x35
RXBUF   equ   0x36 ; buffer de rx
LOOPS   equ   0x37
LOOPS2   equ   0x38
BCOUNT  equ   0x39

; Definicion de Bits Para para manejo de la memoria

DI   equ   7    ; bits internos
DO   equ   6    
SDATA   equ   4    ; pines SDA ( datos) y SCL ( clock ) I2C
SCLK   equ   3    ; en este caso programa los pines 3 y 4
                                      ; modificar segun circuito.



;==============RUTINA PARA GENERAR BIT DE START===================

BSTART
   bsf   STATUS,RP0
   movlw   b'11100111'
   movwf   TRISC
   bcf   STATUS,RP0   
   bcf   PORTC,SCLK
   bsf   PORTC,SDATA
   nop
   bsf   PORTC,SCLK
   nop
   nop
   nop
   nop
   nop
   bcf   PORTC,SDATA
   nop
   nop
   nop
   nop
   nop
   bcf   PORTC,SCLK
   nop
   nop
   return

;==============RUTINA PARA GENERAR BIT DE STOP===================

BSTOP
   bsf   STATUS,RP0
   movlw   b'11100111'
   movwf   TRISC
   bcf   STATUS,RP0   
   bcf   PORTC,SCLK
   bcf   PORTC,SDATA
   nop
   nop
   nop
   bsf   PORTC,SCLK
   nop
   nop
   nop
   bsf   PORTC,SDATA
   nop
   nop
   bcf   PORTC,SCLK
   nop
   nop
   nop
   return

;==============RUTINA PARA ENVIAR BIT HACIA LA MEMORIA============

BITOUT
   bsf   STATUS,RP0
   movlw   b'11100111'
   movwf   TRISC
   bcf   STATUS,RP0   
   bcf   PORTC,SCLK
   bsf   PORTC,SDATA
   btfss   EEPROM,DO
   bcf   PORTC,SDATA
   nop
   nop
   bsf   PORTC,SCLK
   nop
   nop
   nop
   nop
   bcf   PORTC,SCLK
   return

;==============RUTINA PARA RECIBIR BIT DESDE LA MEMORIA===========

BITIN
   bsf   EEPROM,DI
   bsf   STATUS,RP0
   movlw   b'11110111'
   movwf   TRISC
   bcf   STATUS,RP0   
   bcf   PORTC,SCLK
   bsf   PORTC,SCLK
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   btfss   PORTC,SDATA
   bcf   EEPROM,DI
   bcf   PORTC,SCLK
   return

;==============RUTINA TRANSMITIR UN BYTE ===================


TX   
   movlw   .8   
   movwf   COUNT
TXLP   bcf   EEPROM,DO
   btfsc   TXBUF,7
   bsf   EEPROM,DO
   call   BITOUT
   rlf   TXBUF,1
   decfsz   COUNT
   goto   TXLP
   call   BITIN
   return

;==============RUTINA PARA RECIBIR UN BYTE========================


RX
   clrf   RXBUF
   movlw   .8
   movwf   COUNT
   bcf   STATUS,C
RXLP   rlf   RXBUF,F
   call   BITIN
   btfsc   EEPROM,DI
   bsf   RXBUF,0
   decfsz   COUNT
   goto   RXLP
   bsf   EEPROM,DO
   call   BITOUT
   return   

;==============RUTINA PARA LEER UN BYTE DE LA MEMORIA=============

LEER
   call   BSTART         ; Se genera Bit de START
   nop
   nop
   bcf   SLAVE,0         ; Selecciona el modo de escritura
   movfw   SLAVE         ; del dispositivo esclavo
   movwf   TXBUF         ; Tranb   
   call   TX         ;
   movfw   ADDR   
   movwf   TXBUF
   call   TX
   nop
   nop
   call   BSTART   
   nop
   nop
   bsf   SLAVE,0
   movfw   SLAVE
   movwf   TXBUF
   call   TX
   nop
   call   RX
   bsf   EEPROM,DO
   call   BITOUT
   call   BSTOP
   return

;==============RUTINA PARA ESCRIBIR UN BYTE DE LA MEMORIA=============

ESCRIB
   call   BSTART         ; Se genera bit de START
   nop
   nop
   bcf   SLAVE,0         ; Selecciona modo escribir en
   movfw   SLAVE         ; la direccion del esclavo y se pone en W
   movwf   TXBUF         ; Se transfiere W al buffer de TX
   call   TX         ; Se transmite el byte a la memoria
   movfw   ADDR         ; Se carga en W la direccion a escribir
   movwf   TXBUF         ; Se transfiere W al buffer de TX
   call   TX         ; Se transmite el byte a la memoria
   nop
   nop
   movfw   DATAO         ; Se transfiere a W el dato a escribir   
   movwf   TXBUF         ; Se transfiere W al buffer de TX
   call   TX         ; Se transmite el byte a la memoria
   call   BSTOP         ; Se Genera bit de STOP
   movlw   .20         ; Carga 20 milisegundos
   movwf   LOOPS         ; Para esperar que termine
   call   WAIT         ; la escritura en la memoria      
   return            ; Y retorna

   goto   WAIT      
WAIT1   movlw   .150
   goto   WAIT
WAIT            ; Retardo de W milisegundos
        movwf   TEMP3      
TOP2    movlw   .110
        movwf   TEMP4        
TOP     nop                     ; sit and wait
        nop
   nop
   nop
   nop
   nop
   decfsz  TEMP4,F    ; inner loop done?
   goto    TOP             ; no, go again
   decfsz  TEMP3,F         ; outer loop done?
   goto    TOP2            ; no, go again
   return
;=================================================================

2
Microcontroladores / Re: Cargar Una E2prom Con Usart Del 16f628
« en: Martes 12 de Abril de 2005, 08:55 »
Hola, bueno, en primer lugar quiero decirles que me parece impecable este foro, con respecto al debate planteado, pues puedo ayudarle a quien le interese con rutinas I2C, en ASM para usar con cualquier microcontrolador de MicroChip y con algunos cambios otras marcas, de cualquier manera les recomiendo mirar el PIC16F88, que ademas de tener un precio inferior al 16F84 y similar al 16F628, posee el MSSP, conversor A/D de 10 bits de resolucion, 8 mhz de reloj interno de 4  frecuencias seleccionables, USART, ICSP, permite utilizar debug in circuit y ademas tiene 4 KW de memoria, 4 veces mas que el famoso 16F84A, y 256 bytes de memoria eeprom, creo que definitivamente no tiene sentido usar otro micro en caso de necesitar caracteristicas similares, y  es compatible pin a pin, con los sus antecesores, realmente una maravilla, bueno espero que les sirva y a vuestra disposicion.............


Ariel / PikMan

Páginas: [1]