RTC ds1307 + 16f84a

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

RTC ds1307 + 16f84a

Mensagempor Tronic » 05 Jul 2009 11:15

Viva

Preciso de uma ajuda, o pic fica travando quando carrego na botão.
No exemplo estou usando um contador, cada vez que primo o botão faz a soma, mas trava sempre.

O código:
Código: Selecionar todos

'Pic 16f84A
INCLUDE "MODEDEFS.BAS"
DEFINE OSC 4
Define CONF_WORD 0x3ff1
Define CLOCK_FREQUENCY 4
DEFINE I2C_SCLOUT 1
DEFINE BUTTON_PAUSE 50

'-------------------------------------Puertos del LCD-----------------------------------------------
 ' Set LCD Data port
DEFINE LCD_DREG PORTB
' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 4
' Set LCD Register Select port
DEFINE LCD_RSREG PORTB
' Set LCD Register Select bit
DEFINE LCD_RSBIT 1
' Set LCD Enable port
DEFINE LCD_EREG PORTB
' Set LCD Enable bit
DEFINE LCD_EBIT 0
' Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
' Set number of lines on LCD
DEFINE LCD_LINES 2


'-----------------------------------Puerto I2C-----------------------------------------------------
Symbol sda = PORTA.2  'asignamos nombre al pin que hara de SDA del puerto I2C
Symbol scl = PORTA.3  'asignamos nombre al pin que hara de SCL del puerto I2C

symbol button1 = PORTA.0
'***********************************DEFINICION DE VARIABLES**************************************


'--------------------------------------Variables Programa----------------------------------------
addr var byte[7]
data1 var byte
escribe var byte

sec var Byte
min1 var Byte
hour var Byte
day var Byte
daym var Byte
month var Byte
year var Byte
d_hi var Byte
d_lo var Byte
DB0 var byte[8]
x var byte
conta vAR BYTE
b0 var byte


pause 100
 
LOW PORTA.0 
conta=0       
LOW PORTA.0

'****** inicio do ciclo *******
mainloop:

if button1=1 then
     LOW PORTA.0
    conta=conta+1
       
    LOW PORTA.0
    button1=0
     
else
 I2CREAD sda,SCL,$d0,0,[sec,min1,hour,daym,day,month,year] ' in bcd code
endif



lcdout $fe,1,"Hora: ",hex2 hour,":",hex2 min1,":",Hex2 sec
lcdout $fe,$c0,"CONTA: ",DEC2 conta


pause 400
goto mainloop  'Ciclo
 
end


O esquema:
Imagem

Isto é um teste. a ideia é criar um contador para acertar o relógio. Mas um simples contador tá travado o mini projecto. Porquê?
Tronic
Bit
 
Mensagens: 11
Registrado em: 25 Out 2006 09:18

Mensagempor Tronic » 11 Jul 2009 18:09

Problema mais ou menos ultrapassado.
Alguém me pode dar um exemplo de um relógio, acerto de horas e minutos.
Como converter hex para decimal?
Tronic
Bit
 
Mensagens: 11
Registrado em: 25 Out 2006 09:18

Mensagempor _blackmore_ » 11 Jul 2009 19:47

Tronic

bixo ... a mais ou menos 1 ano e meio na revista eletronica total foi mostrado um artigo em 3 partes justamente de um RTC com o danado do DS1307 focando o uso da comunicação I²C com esquemaa e firmware ... outro foi na revista Elektor, também a cerca de 1 ano com esquema e firmware ... dá um a procurada, deve ser proveitoso para vc.

abrax!
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor cmte » 12 Jul 2009 18:19

Procura no fórum

http://www.picbasic.co.uk/forum/index.php

que tem exatamente o que você quer. Agora estou sem tempo, mas mais tarde posso procurar e postar alguns links aqui.

Abs,

Yuri.


Tá aqui:

http://www.melabs.com/resources/samples ... MN1307.txt

Tem tmb este aqui, numa variante de picbasic (proton+):

http://www.picbasic.org/forum/showthrea ... hlight=rtc

E este é com o DS1302, mas tem as partes que te interessam:

http://www.picbasic.co.uk/forum/showthread.php?t=423
cmte
Byte
 
Mensagens: 141
Registrado em: 29 Nov 2006 12:53

Mensagempor Tronic » 14 Jul 2009 08:07

Obrigado, isto vai indo com umas pesquisas aqui e ali...e com a vossa ajuda,...

I2CREAD sda,SCL,$d0,0,[sec,min1,hour,daym,day,month,year]

lcdout $fe,1,"Hora: ",hex2 hour,":",hex2 min1,":",Hex2 sec

HH=hour

if HH>23 then HH=0 ' Mas não funciona, tenho que colocar o valor decimal HH>35

Como converter para decimal?
Não para fazer HH=DEC2 hour
Tronic
Bit
 
Mensagens: 11
Registrado em: 25 Out 2006 09:18

Mensagempor Djalma Toledo Rodrigues » 14 Jul 2009 14:26

A Saída de Dados do DS1307 é BCD e para o Display é ASCII.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor cmte » 14 Jul 2009 15:31

Olha nos links acima que tá tudo lá, mastigadinho.

Abs!
cmte
Byte
 
Mensagens: 141
Registrado em: 29 Nov 2006 12:53

Mensagempor Tronic » 19 Jul 2009 04:14

Obrigado

Pois está...

mas existem sempre dúvidas, por exemplo

converto as horas, ai tudo bem

mas nos minutos, quando faço o decremento
Código: Selecionar todos
 MM=((min1>>4)&$0F)*10+(min1&$0F)



Código: Selecionar todos
 if menos=1 then
 pause 500
 MM=MM-1
       
  if MM=$FF then MM=59
 lcdout $fe,1,"Hora: ",#HH dig 1,#HH dig 0,":",#MM dig 1,#MM dig 0


Reparem que quando os minutos são igual a zero MM=0
MM=MM-1 'MM=0-1
no que resulta o valor MM=255 ou seja $FF

a não ser que eu altero a rotina
Código: Selecionar todos
  if MM=00 then
            MM=59
        else
            MM=MM-1
  endif

Esta é forma correcta?
Tronic
Bit
 
Mensagens: 11
Registrado em: 25 Out 2006 09:18

Mensagempor Tronic » 19 Jul 2009 17:46

Já agora pode-se guardar uma string, tipo: diasem="Domingo"

Quero apresentar no lcd o dia da semana.
Tronic
Bit
 
Mensagens: 11
Registrado em: 25 Out 2006 09:18


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x