Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Config Clock = SOFT|USER


Config Clock = SOFT|USER

Сообщений 1 страница 7 из 7

1

Был удивлён, когда в Xmega Config Clock=SOFT заработало сразу.
На Atmega так не прокатывает, нужен кварц.
Литературы по Config Clock= USER не нашел, но уверен, что он сможет работать с DS1308.
Запустить не смог, может кто сталкивался?
Просто как-то надо сделаь прерывание каждую секунду, выводов у МК нет, но часы в системе есть.
Да и AVR дос тоже может создавать даты и время файлов.
Atmega128:

Код:
$lib "i2c_twi.lbx"
$lib "ds1307clock.lib"                                      ' modified lib
Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
Config Clock = User                                         ' this will dim the bytes automatic


Если использовать: Time$ - то компилятор ругается на библиотеку.

0

2

У XMega есть встроенные часы.

0

3

Это точно, заметил, там даже для батарейки есть вход и осциллятор часового кварца работает от батарейки.
Не понимаю, зачем в Bascom сделали Config Clock = User и описания мало, как-то не работает. Понял, что это для использования внешних часов, подружить не получилось.

0

4

Код:

' --- биты чтения и записи ds1307 ---
Dim Seco As Byte , Mine As Byte , Hour As Byte , Weekday As Byte , Dat As Byte , Month As Byte , Year As Byte
Const Ds1307w = &HD0          ' бит записи
Const Ds1307r = &HD1          ' бит чтения

Config Clock = User           'Soft       ' User = DS1307
Config Date = Dmy , Separator = .

Config I2cdelay = 10
I2cinit
Gosub Getdatetime             ' Настройка DS1307


'==========================


Getdatetime:
   'Print "Запуск часов DS1307"
   ' ''---- Запуск часов DS1307 --- Для перестраховки, вдруг батарейку меняли и часы не работают...
   I2cstart : I2cwbyte Ds1307w : I2cwbyte 0
   I2cstart : I2cwbyte Ds1307r : I2crbyte Seco , Nack : I2cstop
   Seco = Seco And &B_0111_1111       ' Сброс Бита7  = Запуск тактового генератора часов

   Waitms 10                  ' обязательно для DS1307 !!!

   I2cstart : I2cwbyte Ds1307w
   I2cwbyte 0                 ' Адрес начала записи
   I2cwbyte Seco              ' запуск часов, если меняли батарейку
   I2cstop

   '   Mine = 29
   '   Hour = 14
   '   Dat = 5
   '   Month = 11
   '   Year = 14
   'Gosub Save_time                                                  ' Сохраним дату и время


   'I2cstart                                          ' Generate start code
   'I2cwbyte Ds1307w                                  ' send address
   'I2cwbyte 0                                        ' start address in 1307
   'I2cstart                                          ' Generate start code
   'I2cwbyte Ds1307r                                  ' send address
   'I2crbyte _sec , Ack
   'I2crbyte _min , Ack                               ' MINUTES
   'I2crbyte _hour , Ack                              ' Hours
   'I2crbyte Weekday , Ack                            ' Day of Week
   'I2crbyte _day , Ack                               ' Day of Month
   'I2crbyte _month , Ack                             ' Month of Year
   'I2crbyte _year , Nack                             ' Year
   'I2cstop
   ' _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
   ' _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return



' =============================================================================
Read_time:                    ' ---  узнаем время и дату  ---
   'Print "Read TIME"
   I2cstart
   I2cwbyte Ds1307w
   I2cwbyte 0

   I2cstart
   I2cwbyte Ds1307r
   I2crbyte Seco , Ack
   I2crbyte Mine , Ack
   I2crbyte Hour , Ack
   I2crbyte Weekday , Ack
   I2crbyte Dat , Ack
   I2crbyte Month , Ack
   I2crbyte Year , Nack
   I2cstop

   Seco = Makedec(seco)
   Mine = Makedec(mine)
   Hour = Makedec(hour)
   Dat = Makedec(dat)
   Month = Makedec(month)
   Year = Makedec(year)
   'Print Hour ; ":" ; Mine ; ":" ; Seco ; "    "
   'Print "20" ; Year ; "-" ; Month ; "-" ; Dat
Return


' =============================================================================
Save_time:                    ' Сохраним дату и время
   Mine = Makebcd(mine)       ' всё преобразуем в 2/10 код
   Hour = Makebcd(hour)
   Dat = Makebcd(dat)
   Month = Makebcd(month)
   Year = Makebcd(year)

   I2cstart
   I2cwbyte Ds1307w
   I2cwbyte 0                 ' Стартовый байт начала записи
   I2cwbyte 255               ' запуск часов, если меняли батарейку

   Waitms 10

   I2cstart
   I2cwbyte Ds1307w
   I2cwbyte 0                 ' Стартовый байт начала записи
   I2cwbyte 1                 ' Секунды всегда =0  - чтобы сбросить флаги и запустить питание от батарейки
   I2cwbyte Mine
   I2cwbyte Hour
   I2cwbyte 0
   I2cstop

   I2cstart
   I2cwbyte Ds1307w
   I2cwbyte 4                 ' Стартовый байт начала записи
   I2cwbyte Dat
   I2cwbyte Month
   I2cwbyte Year
   I2cstop
Return





0

5

Пётр написал(а):

У XMega есть встроенные часы.

Нету, есть возможность работы от двух сигналов тактирования и предделитель. Иными словами, просто есть механизм, который позволяет через определенный промежуток времени выполнять код/прерывание и вот его использовать например для счета секунд.

0

6

RDW написал(а):

есть механизм, который позволяет через определенный промежуток времени выполнять код/прерывание и вот его использовать например для счета секунд.

Разве не это нужно?

Ev3658 написал(а):

Просто как-то надо сделаь прерывание каждую секунду


В даташите упоминается RTC. Как бы должны быть часы.

0

7

А проект AVR DOS случаем не использует системные часы?

0

Похожие темы

RFID Разное 2009-02-19

Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Config Clock = SOFT|USER