Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » DS1307
DS1307
proton Дата: Ср, 20.07.2011, 09:56  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 13.07.2011

Статус: Offline

Взял код с буржуйского сайта часов. Все работает. Но не могу инициализировать кнопки для установки времени.
Device=16F877A ' We're using a 16F876 device with DS1307 RTC
' and 2*32 LCD default connection

Remarks On ' Enable remarks in the source
Declare Xtal 4
Declare LCD_Type ALPHA ' Тип ЖКИ - буквенно -цифровой
Declare LCD_DTPin PORTD.4 ' Порт данных ЖКИ
Declare LCD_ENPin PORTD.3 ' Управление линией E
Declare LCD_RSPin PORTD.2 ' Управление линией RS
Declare LCD_Interface 4 ' Разрядность шины данных
LCD_CommandUs = 200 ' Задать паузу между передачей команд на ЖКИ
LCD_DataUs = 50 ' Задать паузу между передачей данных на ЖКИ
Declare LCD_Lines 2 ' Количество строк ЖКИ

Declare SDA_Pin PORTC.4 ' I2C
Declare SCL_Pin PORTC.3

ADCON1 = 7

Symbol SOUT=PORTB.0 ' Assign the Speaker PortB.0

Dim INDX As Byte
Dim LDAT As Byte
Dim SEC As Byte
Dim MN As Byte
Dim HOUR As Byte 'Time Var
Dim DAY As Byte
Dim DATE As Byte
Dim MONTH As Byte
Dim YEAR As Byte
Dim VR As Byte

Dim BIN_RVAL As Byte
Dim BCD_RVAL As Byte
Dim BIN2BCD_VAL As Byte
Dim BCD2BIN_VAL As Byte 'BCD/BIN Conver Var
Dim TEMP1 As Byte
Dim TEMP2 As Byte

Dim Key As Byte
Dim KeyD As Byte
Dim BTNVAR1 As Byte 'Button Var
Dim BTNVAR2 As Byte
Dim BTNVAR3 As Byte

Data "SunMonTueWedThuFriSatJanFebMarAprMayJunJlyAugSepOctNovDec"

DelayMS 50 'powerup delay
GoSub HI 'Start up Beep
'Busout $D0,$00,[$00] 'Start the clock
'Busout $D0,$07,[$10]

'Busout $D0,$02,[$18] '2lines to set the time
'Busout $D0,$01,[$27]
'Busout $D0,$03,[$05] 'Day
'Busout $D0,$04,[$29] 'Date
'Busout $D0,$05,[$04] 'Month
'Busout $D0,$06,[$04] 'Year

'Busout $D0,$07,[$11] 'LED on
'Busout $D0,$07,[$10] 'LED Flash Output from DS 1307
'Busout $D0,$07,[$00] 'LED off

Start:
Cls
GoSub ZROBTNVAR
RunDisp: 'Main Prog
GoSub Disp_TIM
Key = 0
KeyD = 255
GoSub Keys
If Key = 1 Then GoSub ZROBTNVAR : GoTo MinAdj
GoTo RunDisp
MinAdj:
Cursor 2,2
Print "Adj Min "
GoSub TimAdj
If Key = 1 Then GoSub ZROBTNVAR : GoTo HourAdj
If Key = 2 Then GoSub MinP
If Key = 3 Then GoTo Start
GoTo MinAdj
HourAdj:
Cursor 2,2
Print "Adj Hour"
GoSub TimAdj
If Key = 1 Then GoSub ZROBTNVAR : GoTo DayAdj
If Key = 2 Then GoSub HourP
If Key = 3 Then GoTo Start
GoTo HourAdj
DayAdj:
Cursor 2,2
Print "Adj Day/Date"
GoSub TimAdj
If Key = 1 Then GoSub ZROBTNVAR : GoTo MonthAdj
If Key = 2 Then GoSub DayP
If Key = 3 Then GoTo Start
GoTo DayAdj
MonthAdj:
Cursor 2,2
Print "Adj Month/Year"
GoSub TimAdj
If Key = 1 Then GoSub ZROBTNVAR : GoTo MinAdj
If Key = 2 Then GoSub MonthP
If Key = 3 Then GoTo Start
GoTo MonthAdj
TimAdj:
GoSub PrtPN
KeyD = 15
GoSub Disp_TIM
Key = 0
GoSub Keys
Return
MinP:
BCD2BIN_VAL = MN
GoSub BCD2BIN
BIN_RVAL = BIN_RVAL + 1
If BIN_RVAL > 59 Then BIN_RVAL = 0
BIN2BCD_VAL = BIN_RVAL
GoSub BIN_TO_BCD
BusOut $D0,$01 ,[BCD_RVAL] 'Save Mins
Return
HourP:
BCD2BIN_VAL = HOUR
GoSub BCD2BIN
BIN_RVAL = BIN_RVAL + 1
If BIN_RVAL > 23 Then BIN_RVAL = 0
BIN2BCD_VAL = BIN_RVAL
GoSub BIN_TO_BCD
BusOut $D0,$02,[BCD_RVAL] 'Save Hours
Return
DayP:
DAY = DAY + 1
If DAY > 7 Then GoSub DateP
If DAY > 7 Then DAY = 1
BusOut $D0,$03,[DAY] 'Save Day
Return
DateP:
BCD2BIN_VAL = DATE
GoSub BCD2BIN
BIN_RVAL = BIN_RVAL + 1
If BIN_RVAL > 31 Then BIN_RVAL = 1
BIN2BCD_VAL = BIN_RVAL
GoSub BIN_TO_BCD
BusOut $D0,$04,[BCD_RVAL] 'Save Date
Return
MonthP:
MONTH = MONTH + 1
If MONTH > 12 Then GoSub YearP
If MONTH > 12 Then MONTH = 1
BusOut $D0,$05,[MONTH] 'Save Month
Return
YearP:
BCD2BIN_VAL = YEAR
GoSub BCD2BIN
BIN_RVAL = BIN_RVAL + 1
If BIN_RVAL > 20 Then BIN_RVAL = 0
BIN2BCD_VAL = BIN_RVAL
GoSub BIN_TO_BCD
BusOut $D0,$06,[BCD_RVAL] 'Save Years
Return
Disp_TIM:
BusIn $D1,$3F,[SEC,SEC,MN,HOUR,DAY,DATE,MONTH,YEAR]
Cursor 1,4 'Set Display to beginning
VR=(day*3)-3 ' Display Day/Date
Restore VR
For INDX=0 To 2
Read LDAT
Print LDAT
Next
Cursor 1,8
BCD2BIN_VAL=DATE
GoSub BCD2BIN
GoSub DispBin
Cursor 1,11
VR = (((MONTH & $f0)>>4)*10)+(MONTH & $0f)
VR=(Vr*3)+18
Restore VR
For INDX=0 To 2
Read LDAT
Print LDAT
Next
Print " 20"
BCD2BIN_VAL=YEAR
GoSub BCD2BIN
GoSub DispBin
Cursor 1,22
BCD2BIN_VAL=HOUR ' Display Hours/Mins
GoSub BCD2BIN
GoSub DispBin
Print ":"
BCD2BIN_VAL=MN
GoSub BCD2BIN
GoSub DispBin
Print ":"
BCD2BIN_VAL=SEC
GoSub BCD2BIN
GoSub DispBin
Return
BIN_TO_BCD:
TEMP1 = Dig BIN2BCD_VAL, 0
TEMP2 = Dig BIN2BCD_VAL, 1
TEMP2 = TEMP2 << 4 ' MOVE NUMBER OVER TO 2ND NIBBLE
BCD_RVAL = TEMP1 ^ TEMP2
Return
BCD2BIN:
TEMP1 = BCD2BIN_VAL & $F ' CONVERT THE VALUES FROM BCD TO BIN
TEMP2 = BCD2BIN_VAL & $F0 ' MASK OF EITHER SIDE
TEMP2 = TEMP2 >>4 ' DIVIDE BY 16
TEMP2 = TEMP2 * 10 ' X BY 10
BIN_RVAL = TEMP1 + TEMP2 ' NOW ADD THE FIRST NUMBER YOU THOUGHT OF
Return
DispBin:
Print Dec2 BIN_RVAL
Return
PrtPN:
Cursor 2,25
Print "Adj +"
Return
ZROBTNVAR:
GoSub Click
BTNVAR1 = 0 : BTNVAR2 = 0 : BTNVAR3 = 0
Return
Keys:
GoSub ConDly
Button PORTA.3,1,KeyD,1,BTNVAR1,1,Key1
Button PORTA.4,1,KeyD,1,BTNVAR2,1,Key2
Button PORTA.5,1,KeyD,1,BTNVAR3,1,Key3
Return
Key1:
Key = 1
Return
Key2:
Key = 2
Return
Key3:
Key = 3
Return
ConDly:
DelayMS 30
Return
Click:
Sound SOUT,[120,10]
Return
HI:
Sound SOUT,[70,25]
Sound SOUT,[100,15]
Return

End

Сообщение отредактировал proton - Ср, 20.07.2011, 20:26
ЯНДЕКС Дата: 20.07.2011
MasterPic Дата: Чт, 28.07.2011, 11:56  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 186
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Вот без комментариев неохота разбираться. Приведи хотя бы кусок, где пытаешься инициализировать? И что значит инициализировать?
retas Дата: Пт, 29.07.2011, 00:24  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

http://avrdevices.ru/chasi-realynogo-vremeni-ds1307/#more-513
ADMIN Дата: Пт, 29.07.2011, 07:03  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Не надо плодить одно и то же
Володимир Дата: Сб, 03.03.2012, 12:08  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Подскажите как решить такую проблему. Сделал себе бортовой компьютер для автомобиля по такой схеме http://www.bk-ukraine.narod.ru/files/shema_mikro3.pdf Собрал несколько аналогичных приборов, на одиончных екземплярах иногда при чтении данных с ДС1307 вместо чтения выполняется команда записи, в результате в ДС1307 записывается произвольная информация и часы останавливаються.
terrarus Дата: Сб, 03.03.2012, 13:23  |                                                                                                                Сообщение # 6
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

На http://terrarus.ucoz.ru/contr_na_pic16/index.html есть полнейшее описание прибора и управляющей программы
в котором используются часы ds1307. Прибор и часы исправно работают уже более 2 лет. В приборе есть и кнопки и программа обработки кнопок. И все работает нормально. Конечно программа не совершенна! Сейчас бы я сделалал все иначе, (и уже делаю), но работает она корректно. Посмотрите. может быть моя работа поможет вам в осмыслении ваших проблем.

PS.
Советую Вам, никогда у нас на форуме не приводить ссылки, подобные http://www.bk-ukraine.narod.ru/files/shema_mikro3.pdf, которые требуют ввести номер наших отовых телефонов, или какие-то другие личные данные. Лично меня это наводит на мысль, не без основательно, что меня пытаются обокрасть - списать деньги с моего личного счета.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Сб, 03.03.2012, 13:50
Володимир Дата: Сб, 03.03.2012, 13:39  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Quote (terrarus)
На http://terrarus.ucoz.ru/contr_na_pic16/index.html есть полнейшее описание прибора и упарвляющей программы
в котором используются часы ds1307. Прибор и часы исправно работают уже более 2 лет. В приборе есть и кнопки и программа обработки кнопок. И все работает нормально. Конечно программа не совершенна! Сейчас бы я сделалал все иначе, (и уже делаю), но работает она корректно. Посмотрите. может быть моя работа поможет вам в осмыслении ваших проблем.
У меня тоже, уже несколько лет все работает, главный вопрос не как работать с ДС1307, а как боротся с помехами от автомобиля. Абсолютно одинаковые платы и детали, но одни работают без проблем, а одна работает тольно на не запушенном двигателе, при запуске двигателя при чтении данных с ДС1307 часы останавливаются.
terrarus Дата: Сб, 03.03.2012, 13:41  |                                                                                                                Сообщение # 8
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

На http://terrarus.ucoz.ru/contr_na_pic16/index.html есть полнейшее описание прибора и упарвляющей программы
в котором используются часы ds1307. Прибор и часы исправно работают уже более 2 лет. В приборе есть и кнопки и программа обработки кнопок. И все работает нормально. Конечно программа не совершенна! Сейчас бы я сделалал все иначе, (и уже делаю), но работает она корректно. Посмотрите. может быть моя работа поможет вам в осмыслении Ваших проблем.
--------------------------------------------
PS.
Советую Вам никогда у нас на форуме не приводить ссылки подобные http://www.bk-ukraine.narod.ru/files/shema_mikro3.pdf, которые требуют ввести номера наших сотовых телефонов и которые требуют для доступа скачать какой-то файл, а затем отправить наш номер сотового телефона. Меня, лично, это наводит на мысль, что меня собираются обокрасть.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Володимир Дата: Сб, 03.03.2012, 13:54  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Quote (terrarus)
PS.
Советую Вам никогда у нас на форуме не приводить ссылки подобные http://www.bk-ukraine.narod.ru/files/shema_mikro3.pdf которые требуют ввести номера наших сотовых телефонов и которые требуют для доступа скачать какой-то файл, а затем отправить наш номер сотового телефона. Меня, лично, это наводит на мысль, что меня собираются обокрасть.
Я конечно извеняюсь если что не так, но только что открывал данную ссылку, и яндекс у меня ничего не просил.
terrarus Дата: Сб, 03.03.2012, 14:29  |                                                                                                                Сообщение # 10
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Quote (Володимир)
как боротся с помехами от автомобиля

Я решал эти пробемы так:
1. использованием DC-DC преобразователей по питанию.
2. Использованием оптопар по цифровым входам и выходам микроконтроллера.
Этих мер оказывалось предостатосчо!

PS.
Да, забыл! Обязательно на всех цепях питания, как сможно ближе к выводам микросхем, ставьте развязывающие конденсароты по 0,01...0,1 мкФ!


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Сб, 03.03.2012, 14:37
Володимир Дата: Сб, 03.03.2012, 14:58  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Quote (terrarus)
Я решал эти пробемы так:
1. использованием DC-DC преобразователей по питанию.
2. Использованием оптопар по цифровым входам и выходам микроконтроллера.
Этих мер оказывалось предостатосчо!
Ну это слишком услажняет схему, тем более, что такой глюк наблюдается на одной из трех плат, и то очень редко, только одна плата из 12 отказалась работать при работающем двигателе.
Quote (terrarus)
PS.
Да, забыл! Обязательно на всех цепях питания, как сможно ближе к выводам микросхем, ставьте развязывающие конденсароты по 0,01...0,1 мкФ!
Попробую подпаять прямо к выводам питания. А что если на управляющие выводы SDA SCL повесить конденсаторы для погашения помех?
ЯНДЕКС Дата: 03.03.2012
ivan_fd Дата: Сб, 03.03.2012, 18:00  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (Володимир)
А что если на управляющие выводы SDA SCL повесить конденсаторы для погашения помех?


Этого делать нельзя. Вообще работать не будет. Подключать согласно даташиту.
ADMIN Дата: Сб, 03.03.2012, 20:43  |                                                                                                                Сообщение # 13
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Quote (Володимир)
тем более, что такой глюк наблюдается на одной из трех плат, и то очень редко, только одна плата из 12 отказалась работать при работающем двигателе.

Это и называется - русский авось.
Работает и ладно. Появился глюк - всЁ виновато, только не собственная непредусмотрительность. Если бы все читали даташиты, таких вопросов возникало бы меньше.
terrarus Дата: Сб, 03.03.2012, 23:08  |                                                                                                                Сообщение # 14
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Quote (Володимир)
А что если на управляющие выводы SDA SCL повесить конденсаторы для погашения помех?

Таким образом завалите фронты сигналов присутствующие на SDA SCL и действительно, как отметил ivan_fd,ничего работать не будет. А вот подключение "развязывающих" конденсаторов по 0,01...0,1 мкф как можно ближе к ножкам питания всех микросхем (не только МК) позволяет устранить савовозбуждение схем по цепям питания (которое, кстати не совсем опытный радиолюбитель может просто не замечать). Эти конденсаторы в этом случае выполняют совсм другую задачу, чем тупое подключение конденсаторов в любые произвольные точки схемы- здесь они принесут только вред.
Quote (Володимир)
Ну это слишком услажняет схему

Тем и отличается профессиональный разработчик радиоаппаратуры от любителя находящегося на стадии раннего радиолюбительства, что первый для достижения устойчивости и надежности работы проектируемого изделия применяет те схемные решения, о чем дилетант даже не подозревает или просто пренебрегает.
Вообще проще исключить микросхему реального времени из вашего девайса и поставить рядом с ним бабушкин механический заводной будильник.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Володимир Дата: Вт, 06.03.2012, 17:20  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Quote (terrarus)
Вообще проще исключить микросхему реального времени из вашего девайса и поставить рядом с ним бабушкин механический заводной будильник.
Исключить нельзя, для работы данного устройства используется тактовый сигнал в вывода SQW.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » DS1307
  • Страница 1 из 1
  • 1
Поиск: