SoloCodigo
Programación Específica => Microcontroladores => Mensaje iniciado por: eltyto en Lunes 27 de Agosto de 2007, 14:15
-
Hola! es mi primer contacto con SOLOCODIGO y como veo el nivel es buenisimo, les cuento que estoy intentando hacer funcionar un RTC ds1307 y al leerlo me devuelve solo "ceros". lo leo en el hiperterminal pero no funciona. se que arranca porque en la dir. 07 que es la de control me reconoce el comando para generar un pulso por segundo. aca les mando mi preog en ensamblador para que me cuenten si le falle en algo y si alguien sabe si el "C" de buider es el mismo que se utiliza para programar PIC. desde ya mil gracias.
;==========================================
;ojo! ya se que tiene un tx y rx el 628 pero yo lo hice ;tambien para q trabaje en un f84
LIST P=16f628
;lee rtc y transmite por txbuf
; sdata puerto b,3
; sclk puerto b,4
;==========================================
indef EQU 00h
tmr0 EQU 01h
pcl EQU 02h
status EQU 03h
fsr EQU 04h
ptoa EQU 05h
ptob EQU 06h
pclath EQU 0Ah
intcon EQU 0Bh
pir1 EQU 0Ch
tmr1l EQU 0Eh
tmr1h EQU 0Fh
t1con EQU 10h
tmr2 EQU 11h
t2con EQU 12h
ccpr1l EQU 15h
ccpr1h EQU 16h
ccp1con EQU 17h
rcsta EQU 18h
txreg EQU 19h
rcreg EQU 1Ah
cmcom EQU 1Fh
opcion EQU 81h
trisa EQU 85h
trisb EQU 86h
pie1 EQU 8Ch
pcon EQU 8Eh
pr2 EQU 92h
txsta EQU 98h
spbrg EQU 99h
dato EQU 9Ah
direccion EQU 9Bh
eecon1 EQU 9Ch
eecon2 EQU 9Dh
vrcon EQU 9Fh
rxbuff equ 21h
txbuf equ 22h
addr equ 23h
datao equ 24h
slave equ 0xd0
count equ 26h
eeprom equ 27h
di equ 7
do equ 6
sdata equ 3
sclk equ 4
j2 equ 7
j1 equ 6
led equ 2
clear equ 1
mande equ 0
clk equ 0
cs equ 2
in equ 1
start equ 3
recep equ 28h
r19 equ 29h
r1a equ 2ah
trans equ 2bh
loops equ 2ch
loops2 equ 2dh
Segundo equ 2eh
Hora equ 2fh
Minuto equ 30h
DiaSemana equ 31h
Dia equ 32h
Mes equ 33h
Año equ 34h
unidad equ 35h
decena equ 36h
centena equ 37h
r199 equ 38h
valor1 equ .8
valor2 equ .104
valor3 equ .119
reg1 equ 39h
reg2 equ 3ah
reg3 equ 3bh
mkm1 equ 3ch
mkm2 equ 3dh
mkm3 equ 3eh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reset
org 0
goto inicio
org 5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
retardo
clrw
movlw valor1
movwf reg1
tre3
movlw valor2
movwf reg2
do2
movlw valor3
movwf reg3
un1
decfsz reg3,1
goto un1
decfsz reg2,1
goto do2
decfsz reg1,1
goto tre3
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;RETARDO;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
delay1
movlw .166 ;es 166
movwf r19
redo
nop
nop
decfsz r19
goto redo
retlw 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ms47 movlw .7
movwf r199
red
nop
nop
decfsz r199
goto red
retlw 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
bstart
bsf status,5
movlw b'00000001'
movwf trisb
bcf status,5
bsf ptob,sdata
bsf ptob,sclk
nop
nop
nop
nop
bcf ptob,sdata
call ms47
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
bstop
bsf status,5
movlw b'00000001'
movwf trisb
bcf status,5
bcf ptob,sclk
bcf ptob,sdata
bsf ptob,sclk
nop
nop
nop
nop
bsf ptob,sdata
call ms47
return
;;;;;;;ENVIA 1 BYTE COMP HACIA EL RTC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
escrib movwf txbuf
movlw .8
movwf count
txlp
bcf ptob,sclk
rlf txbuf,1
bcf ptob,sdata
btfsc status,0
bsf ptob,sdata
call ms47
bsf ptob,sclk
nop
nop
nop
nop
decfsz count,1
goto txlp
;chequeo bit---ack--------------------------------------------------------------
bcf ptob,sclk
bsf ptob,sdata
call ms47
bsf ptob,sclk
nop
nop
nop
nop
bsf status,5
movlw b'00001001'
movwf trisb
bcf status,5
arr btfsc ptob,sdata
goto arr
bsf status,5
movlw b'00000001'
movwf trisb
bcf status,5
bcf ptob,sclk
return
;;;;;;;RECIBE 1 BYTE COMP DESDE EL RTC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;
leer
bsf status,5
movlw b'00001001'
movwf trisb
bcf status,5
clrf rxbuff
movlw .9
movwf count
rxlp bcf ptob,sclk
call ms47
bsf ptob,sclk
nop
nop
nop
nop
bcf status,0
bsf status,5
movlw b'00001001'
movwf trisb
bcf status,5
btfsc ptob,sdata
bsf status,0
rlf rxbuff,1
bsf status,5
movlw b'00000001'
movwf trisb
bcf status,5
decfsz count,1
goto rxlp
bsf status,5
movlw b'00000001'
movwf trisb
bcf status,5
retlw 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
inicio clrf ptoa
bsf status,5
bcf status,6
movlw b'00000001'
movwf trisb
movlw b'10000'
movwf trisa
movlw b'10000111' ;desab res y /256
movwf opcion
; movlw b'00100110' ;parametros de comunicacion,,1 maestro,0 8bit,1 hab trans,0 asinc,0 x, 1hy speed,buff vacio
; movwf txsta ;
; movlw .103 ;9600 baudios
; movwf spbrg
; movlw b'00100000' ; hab permiso de escrit
; movwf pie1
; movlw b'00000000'
; movwf vrcon
bcf status,5
movlw b'10010000'
movwf intcon
; movlw b'00000000'
; movwf rcsta
; bsf rcsta,7 ;spen¡1 hab pto serie
; movlw b'00000000'
; movwf pir1
movlw b'00000111'
movwf cmcom
; bsf pir1,4 ;activo bandera de TRANSM.
; call ms47
; goto carga_inicial
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; call carga_inicial
; call escribir
;--------------------------------------------------------------------------------------;
;--------------------SUBRUTINA DE CARGA INICIAL DEL DISPOSITIVO------------------------;
carga_inicial call bstart
movlw b'11010000' ; Dirección esclavo DS1307 (Escritura)
call escrib
movlw b'00000111' ; Se indica que se va a enviar el dato a la posicion 07h.
call escrib ; que corresponde al control de la señal cuadrada
movlw b'00010000' ; Se mueve b'00010000' que corresponde a señal cuadrada de 1 Hz
call escrib
call bstop ; Termina de enviar datos.
movlw 0x01 ; Segundos inician en 00
movwf Segundo ;
movlw 0x02 ; Minutos inician en 05
movwf Minuto ;
clrf Hora ; Hora inicia en 00
movlw 0x03 ; Dia 6 equivale a jueves
movwf DiaSemana
movlw 0x20 ; Dia 26
movwf Dia
movlw 0x08 ; Mes 02 equivale a agost
movwf Mes
movlw 0x07 ; Año 2007
movwf Año
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--------------------SUBRUTINA DE ESCRITURA DEL DISPOSITIVO----------------------------;
escribir
call bstart ; Envía condicion de Inicio
movlw b'11010000' ; Dirección de DS1307 (Escritura)
call escrib
movlw 0x00 ; a los segundos.
call escrib
movf Segundo,W ; Pasa los segundos de la memoria del PIC16F84A al DS1307.
call escrib
movf Minuto,W ; Y se repite el proceso para el resto.
call escrib
movf Hora,W
call escrib
movf DiaSemana,W
call escrib
movf Dia,W
call escrib
movf Mes,W
call escrib
movf Año,W
call escrib
call bstop ; Termina de enviar datos.
call retardo
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ACA PONGO UN LED EN PTOB,7 PARA SABER SI CORRE EL PROGRAMA
leo_rtc bsf ptob,7
call retardo
call bstart ; Envía condicion de Inicio
movlw b'11010000' ; Dirección de DS1307 (Escritura)
call escrib
movlw 0x00 ; a los segundos.
call escrib
call bstop
call bstart ; Envía condicion de Inicio
movlw b'11010001' ; Dirección de DS1307 (Lectura)
call escrib
call leer ; Lee los segundos.
movf rxbuff,w ; Lo carga en el registro correspondiente.
movwf Segundo ; Lee el resto de los registros utilizando
; el mismo procedimiento.
call leer
movf rxbuff,w
movwf Minuto
call leer
movf rxbuff,w
movwf Hora
call leer
movf rxbuff,w
movwf DiaSemana
call leer
movf rxbuff,w
movwf Dia
call leer
movf rxbuff,w
movwf Mes
call leer
movf rxbuff,w
movwf Año
call bstop ; Termina de leer datos.
movlw .76 ;l
call transmito
movlw .69 ;e
call transmito
movlw .79 ;o
call transmito
movlw .32
call transmito
movlw .32
call transmito
movlw .13
call transmito
movlw .10
call transmito
call retardo
call retardo
bcf ptob,7
movf DiaSemana,w
movwf mkm1
call decimal
addlw .48
call transmito
call retardo
movf Dia,w
movwf mkm1
call decimal
addlw .48
call transmito
call retardo
movf Mes,w
movwf mkm1
call decimal
addlw .48
call transmito
call retardo
movf Año,w
movwf mkm1
call decimal
addlw .48
call transmito
call retardo
movf Hora,w
movwf mkm1
call decimal
addlw .48
call transmito
call retardo
movf Minuto,w
movwf mkm1
call decimal
addlw .48
call transmito
call retardo
xxsal movf Segundo,w
movwf mkm1
call decimal
addlw .48
call transmito
goto leo_rtc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; RUTINA QUE CONVIERTE BINARIO EN "BCD"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
decimal
clrf mkm2
clrf mkm3
movlw .100
otra subwf mkm1,1 ;resta 100 al valor inicial
btfss status,0 ;verifica el carry
goto sum ;si es cero deja de restar 100
incf mkm3,1 ;si es 1 incr centena
goto otra ;volver a restar
sum addwf mkm1,1 ;sumarle 100
movlw .10
repite subwf mkm1,1 ;restar 10 al valor
btfss status,0 ;verifica el carry
goto sum1 ;si es cero deja de restar
incf mkm2,1 ;si es 1 incr decena
goto repite
sum1 addwf mkm1,1 ;sumarle 10 al valor
retlw 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--------------------------------------------------------------------------------------;
;;;;;;RUTINA PARA ENVIAR DATOS VIA RS232;;;;;;;;;;;;;;;;;;;;;;;;;
;;LA PC RECIBE A 1200 BAUDIOS 8 BITS 1 ARRANQUE Y 1 STOP;;;;;;;;;
transmito
movwf trans
movlw .8
movwf r1a ;contador de 8 bit a transmitir
bcf ptob,2
call delay1
xnext
bcf ptob,2
bcf status,0
rrf trans
btfsc status,0
bsf ptob,2
call delay1
decfsz r1a
goto xnext
bsf ptob,2
call delay1
retlw 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;ESTA RUTINA LA USARIA CON EL PIC 16F628;;;;;;;;;;;
;------------------------------------------------------------------------------------------------------------------------------------------
;transmito
; movwf txreg ; send data in W
; bsf status,5 ; RAM PAGE 1
; bcf status,6
;espe btfss txsta,1 ; (1) transmission is complete if hi
; goto espe
; bcf status,5 ; RAM PAGE 0
; bcf status,6
; bcf pir1,4
; call retardo
; bsf intcon,7
; retfie
;;;;;;;;;;;;;;;;;;;;;;;;
end
titopereyra@yahoo.com
-
Bienvenido eltyto.. cuando me haga un lugar reviso tu código para ver que puede estar pasando.. respecto tu pregunta sobre el lenguaje C:
alguien sabe si el "C" de buider es el mismo que se utiliza para programar PIC.
No es el mismo C que el de builder, osea, la estructura y la manera de manejar las sentencias es propia del lenguaje pero no es lo mismo con ciertas funciones, para darte cuenta podrías mirar la funcion PRINTF o los ejemplos que puedes encontrar en el subforo de C.
El C que mantiene un similar al de Builder es el C de los microcontroladores Freescale, en este caso yo programo los micros y uso como guia el manual de Builder C++ 5.
Voy a ver si me doy tiempo y miro el código del RTC. Saludos :)
-
Saludos
Oyes se me hace dificultoso entender tu programa por que se ve rebuetos y es dificil estar buscando cada etiqueta de subrrutanas, hubiera sido preferible que lo comprimieras y adjuntaras.
Mira por ahi vi en tu programa que dice mandas en RS232, si lo que estas haciendo es transmitir datos serialmente creeme que jamas te va a funcionar tu programa, la forma de comunicacion es I2C que no es lo mismo que RS232, ya que el I2C utiliza un ACK, checa en google y podras encontrar mucha informacion sobre I2C
}
bye
-
gracias a Einstec y Alternative en responder de todos modos le cuento al segundo que en mi rutina LEO el ds1307 via I2C luego convierto bcd a decimal y por ultimo sumo decimal 48 para convertir en asci y enviarlo via rs232 al hiperterminal.
mi preg es si esta bien INICIADO Y si esta bien LEIDO ya que cuando lo veo en el hiperterminal es solo CEROS.
si graban el programa como esta lo pueden probar y veran que les digo la verdad no escondi nada del programa que diseñe para hacerlo andar pero no encuentro solucion.si alguno tiene una rutina para iniciar el ds1307 en MPLAB y leerlo POR FAVOR que me la tira o me digan donde ir a buscar info.
Desde ya mil gracias y sera hasta la proxima.
-
Saludos
mira checa en el libro "Microcontrolador PIC16F84. Desarrollos de proyectos". ahi tiene informacin y un programa echo, hay que hacerle unas modificaciones para que funcione a la perfeccion pero te puede ayudar mucho. o busca en EMULE y descarga el CD donde tiene los ejemplos con el DS1307 y comunicacion I2C, el CD tiene el mismo nombre que el CD.
Bueno espero te sirva la informacion.
no te puedo mandar el libro que lo tengo en pdf
ya que es vastante grande, es de unos 40M
Saludos y suerte
bye :hola:
-
mil gracias x las respuestas a todos.
ALTERNATIVE lo que no se como hacer para bajar el CD de emule entre y no se como es el path para llegar.
bueno sigo x aca y si alguien tiene algo que me ayude esta vez lo espero
un abrazo a todos.
tyto
-
SAludos eltyto
Mira veo que ya investigastes y ya tienes dolor de cabeza con el DS1307, Mira deja scaneo los capitulos del Libro que necesitas y ademas te mando el ejemplo que tiene el CD y el Libro. Mandame tu E-mail y te mando los archivos, sino tengo tiempo mañana, pasado mañana lo tienes sin falta.
Saludos y espero tu E-mail
-
muchas gracias, ALTERNATIVE mi mail es titopereyra@yahoo.com si no puedes enviarme dime solo el camino (path) para llegar al lugar de la info.
te cuento que es solo un desafio el hecho de trabajar con f84 ya que con el 873 es mucho mas directo y facil. Te pregunto.. es posible programar con visual o C los micros de la linea nueva de Microchip? en caso de C creo que es el CCs pero no se de donde se baja el programa FREE. desde ya mil gracias y estoy a tus ordenes.
tyto
-
Mira para encontrar la informacion
Descarga Emule de internet
Instalalo y configuralo segun tu conexion a internet que tengas
coloca "Microcontrolador PIC16F84. Desarrollos de proyectos"
sin comillas y encontraras la informacion
el Libro esta en pdf y son como 40Megas
y el CD no recuerdo pero debe ser como 120Megas
Se puede programar en C todos los micros de la Gamma
alta 18FXXX, entra a la pagina de microchip y
descarga la version estudiantil :hola:
-
Saludos Alternative
Estoy comensando con los pics y tengo unas copias del libro de RA-MA
te es posible enviarme algunos de los ejercicios del CD , como losm de DS1307,DS1624,LCD y alguno que otros . mi correo es moy2511@yahoo.com.mx
de antemano te agradesco mucho .