Уууу,чувствую срач будет страниц ...дцать... А нех-это скомпилированный файл программы,который загружают в микроконтроллер,я пробел пропустил Не разбирайте плату,вечером накидаю прошивку без DS1307,делов то...перепаять кварц к атмеге придётся только
Ну да,у меня голый аккумулятор сотового ,когда он разрядится время не видно,но часы идут К сожалению память аттини заполнена на 98℅,можно было бы возложить контроль батареи на компаратор На атмега можно сделать резервное питание, просто автор темы упорно не хочет отвечать на вопрос "идут часы или стоят" потому и предложил делать без DS1307,вдруг она неисправна,мало ли А с DS1307 есть проект на коте,часы-ночник 2
Учитывая, что на индикаторе нет отображения инициализации/отсутствия микросхемы RTC - 00:00:80/@@:@@:@@ - по картинке можно предположить, что часы просто стоят. В вашем варианте прошивки не предусмотрена опция типа "старт-стоп" с не реализованным выводом на кнопку?
на фото не 00:00:80/@@:@@:@@ ,а 00:00:00,то есть часы стоят (на реакцию кнопок не обращайте внимания,прошивка тестовая-я же так и написал,проверка правильности подключения дисплея-работает,потом тест DS1307-стоят,надо рыть DS1307 и обвязку
Замените кварц,прозвоните целостность дорожек в обвязке 1307,если есть другая DS1307 попробуйте ее поставить Программа ниже
$regfile = "m8adef.dat" $crystal = 8000000 Declare Sub Getds1307()
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.0 'Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5 Config Lcd = 16 * 2 Config Scl = Portc.5 Config Sda = Portc.4 config Pinc.0 = Input Config Pinc.1 = Input Portc.0 = 1 Portc.1 = 1 set_h Alias Pinc.0 set_m Alias Pinc.1 Dim Seco As Byte Dim Mine As Byte Dim Hour As Byte Dim Day As Byte Dim Dat As Byte Dim Month As Byte Dim Year As Byte Cursor Off Cls Lcd "«AC® DS1307 " locate 1 , 14 lcd chr(165) Call Getds1307() if Seco > 59 then Seco = 0 I2cstart I2cwbyte &HD0 I2cwbyte 0 I2cwbyte Seco I2cstop end if
do Call Getds1307() if set_h = 0 or set_m = 0 then if set_h = 0 and set_m = 1 then incr Hour if set_h = 1 and set_m = 0 then incr Mine if set_h = 0 and set_m = 0 then 'Lпоправка сек/мин/час Seco = 0 if Mine > 50 then Mine = 0 incr Hour else Mine = 0 end if gosub lcd_time while set_h = 0 wend while set_m = 0 wend end if if Hour > 23 then Hour = 0 if Mine > 59 then Mine = 0 Seco = Makebcd(Seco) Mine = Makebcd(mine) Hour = Makebcd(hour) I2cstart I2cwbyte &HD0 I2cwbyte 0 I2cwbyte Seco I2cwbyte Mine I2cwbyte Hour I2cstop end if gosub lcd_time waitms 500 loop
lcd_time: Locate 2 , 2 if Hour > 9 then lcd Hour ; ":" else lcd "0" ; Hour ; ":" if Mine > 9 then lcd Mine ; ":" else lcd "0" ; Mine ; ":" if Seco > 9 then lcd Seco else lcd "0" ; Seco return
Sub Getds1307() I2cstart I2cwbyte &HD0 I2cwbyte &H00 I2cstart I2cwbyte &HD1 I2crbyte Seco , Ack I2crbyte Mine , Ack I2crbyte Hour , Ack I2crbyte Day , Ack I2crbyte Dat , Ack I2crbyte Month , Ack I2crbyte Year , Nack I2cstop Seco = Makedec(seco) Mine = Makedec(mine) Hour = Makedec(hour) Day = Makedec(day) Dat = Makedec(dat) Month = Makedec(month) Year = Makedec(year) End Sub