Надо в регистр секунд DS1307 вписать нолик. Точно не помню,но где-то так:
Seco = 0 I2cstart I2cwbyte Ds1307w ' &HD0 I2cwbyte 0 I2cwbyte Seco I2cstop
Программирование ATMEL в BASCOM. |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Программирование ATMEL в BASCOM. » Световые эффекты » Помогите с алгоритмом!
Надо в регистр секунд DS1307 вписать нолик. Точно не помню,но где-то так:
Seco = 0 I2cstart I2cwbyte Ds1307w ' &HD0 I2cwbyte 0 I2cwbyte Seco I2cstop
Надо в регистр секунд DS1307 вписать нолик. Точно не помню,но где-то так:
Спасибо , заработало.
В Васике в примерах есть пример работы с часами DS1307.
там обращение к времени и дате идет через системные текстовые переменные TIME$ и DATE$
устанавливаем время и дату
TIME$ = "hh:mm:ss"
DATE$ = "mm/dd/yy"
читаем время и дату
var = TIME$
var = DATE$
хотя можно и напрямую использовать переменные TIME$ и DATE$, скажем для вывода на экран.
Отредактировано pavel1969 (2018-02-19 23:01:02)
Как правильно додать время , например 5:00 + 23:00 = было 4:00 а не 28:00 ?
если 5+23>24 тогда 5+23-24
надеюсь сам в коде обрисуешь.
Вааще, найди любую прошивку от часов или будильников, там это всё давно написано.
Спасибо.
Как отрицательное число инвертировать в положительное ? Я делаю так , Х=Х*-1 но компилятор ругается.
Как отрицательное число инвертировать в положительное ? Я делаю так , Х=Х*-1 но компилятор ругается.
Значит разная размерность переменных
Как отрицательное число инвертировать в положительное ? Я делаю так , Х=Х*-1 но компилятор ругается.
Разобрался , был пробел между - и 1.
Как отрицательное число инвертировать в положительное ? Я делаю так , Х=Х*-1 но компилятор ругается.
var1=ABS(var2)
var2 - отрицательное, var1 - положительное
Отредактировано sva-don (2018-02-25 10:07:27)
Подскажите как в ATbanned28 включить сторожевой таймер а то что то подвесает при включении.
Это точно не сторожевой таймер. Разбирайся с кодом.
... да, и код где???
Измерение_adxl345:
'-------------------------------------------------------------------------------
I2cstart ' Подготовка к работе шины I2c
I2cwbyte Запись_adxl345 ' Адресное обращение к используемому чипу i2c, для записи
I2cwbyte &H32 ' Регистр с которого будем считывать данные
I2crepstart ' Повторная подготовка к работе шины I2c
I2cwbyte Чтение_adxl345 ' Адресное обращение к используемому чипу i2c, для чтения
I2crbyte X_byte(1) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte X_byte(2) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte Y_byte(1) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte Y_byte(2) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte Z_byte(1) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte Z_byte(2) , Nack ' Читаем значение из регистра чипа i2c
I2cstop ' Освобождаем шину I2c
'-------------------------------------------------------------------------------
Return
Gosub Измерение_adxl345
Сумма_x_integer = Сумма_x_integer + X_integer
Сумма_y_integer = Сумма_y_integer + Y_integer
Сумма_z_integer = Сумма_z_integer + Z_integer
'Набираем сумму из 64 измерений
Incr Количество_измерений
'Усредняем полученные данные
If Количество_измерений > 64 Then
X_single = Сумма_x_integer
Shift X_single , Right , 6 , Signed ' Аналог X_single = Сумма_x_single / 64
Y_single = Сумма_y_integer
Shift Y_single , Right , 6 , Signed ' Аналог Y_single = Сумма_y_single / 64
Z_single = Сумма_z_integer
Shift Z_single , Right , 6 , Signed ' Аналог Z_single = Сумма_z_single / 64
Количество_измерений = 0
Флаг_есть_данные = 1
End If
'Переводим в угловые градусы, минуты, секунды
If Флаг_есть_данные <> 0 Then
If X_integer <> X_integer_нов Then
X_integer_разница = X_integer - X_integer_нов
X_integer_нов = X_integer
If X_integer_разница < 0 Then
X_integer_разница = X_integer_разница * -1
End If
End If
If Y_integer <> Y_integer_нов Then
Y_integer_разница = Y_integer - Y_integer_нов
Y_integer_нов = Y_integer
If Y_integer_разница < 0 Then
Y_integer_разница = Y_integer_разница * -1
End If
End If
If Z_integer <> Z_integer_нов Then
Z_integer_разница = Z_integer - Z_integer_нов
Z_integer_нов = Z_integer
If Z_integer_разница < 0 Then
Z_integer_разница = Z_integer_разница * -1
End If
End If
Сумма_x_y_z = X_integer_разница + Y_integer_разница
Сумма_x_y_z = Сумма_x_y_z + Z_integer_разница
Сумма = Сумма + Сумма_x_y_z
К = К + 1
If К > 2 Then
Сумма_x_y_z = Сумма / 3
Сумма_x_y_z_новое = Сумма_x_y_z
Сумма = 0
К = 0
Флаг_обновить_lcd = 1
End If
Флаг_есть_данные = 0
End If
'Выводим на LCD
If Флаг_обновить_lcd <> 0 Then
If Инженерное_меню = 0 And Pusk_1 = 0 Then 'Если зашли в инженерное меню
'Форматируем, чтобы не прыгали показания
'X_str = Str(сумма_x_y_z) 'выводим на ЛСД данные от акселерометра:
X_str = Format(x_str , "0000")
Setfont Font_6x8
Lcdat 1 , 1 , X_str , 0
End If
Флаг_обновить_lcd = 0
End If
Посмотрите пожалуйста правильно ли я меряю дисбаланс с помощью акселерометра ?
И где зависает?
Трассировщик или дебаггер есть?
И где зависает?
Трассировщик или дебаггер есть?
Зависает при включении - нет показаний на ЛСД , но может это только ЛСД виснет , для того я и хочу включить сторожевой таймер чтобы посмотреть что виснет .
Трассировщик или дебаггер - если честно мну нужно в начале прочесть что это. 
Трассировщик или дебаггер - если честно мну нужно в начале прочесть что это.
Каким образом контролируется работа программы ?
Каждый раз перепрошивкой или виртуально (Протеус, напр.)
Во втором случае самый простой вариант - поставить оператор Stop на каком-то этапе программы и в симуляции отслеживать происходящее.
Можно подобные точки прерывания устанавливать в Протеусе, но это дольше объяснять.
Сторожевой таймер работает как счётчик тактов и если его вовремя не сбросить - возникнет прерывание от него, где, как правило, происходит сброс процессора со следами в регистре MCCUR или что-то подобное.
Не там ты копаешь, явно.
Каким образом контролируется работа программы ?
Каждый раз перепрошивкой или виртуально (Протеус, напр.)Во втором случае самый простой вариант - поставить оператор Stop на каком-то этапе программы и в симуляции отслеживать происходящее.
Можно подобные точки прерывания устанавливать в Протеусе, но это дольше объяснять.
Программу тестирую и в железе и в протеусе , правда протеус как то медленно работает.
Программу тестирую и в железе и в протеусе
Программа ведет себя одинаково ?
Ой в блудняк вы так попадёте....
Скить весь проект в протеусе, гляну чо да как.
Ой в блудняк вы так попадёте....
Скить весь проект в протеусе, гляну чо да как.
Если скину на гугл диск , посмотреть сможешь ?
Кидай куда хочешь или куда удобно. Посмотрю. Но не быстро, ибо код у тебя витиеват, не совсем понятно что к чему. Заодно посмотрим, что ты за "кодер" 
Намано!
Вотhttps://drive.google.com/file/d/1x9-uGw2_TjYvW4A33uVVxauHUyvNvrWr/view?usp=drivesdk
Монументальный труд ! - это про симуляцию.
В железе, что-нибудь работает ?
Почему Ds1307, а не Ds3231 ? Чего не использовали прерывания от часов ?
Отредактировано sasha_1973 (2018-02-25 23:06:28)
Монументальный труд ! - это про симуляцию.
В железе, что-нибудь работает ?
Почему Ds1307, а не Ds3231 ? Чего не использовали прерывания от часов ?
Отредактировано sasha_1973 (Сегодня 23:06:28)
В железе все проверил кроме управления привода, на счет ds3231 я уже писал что цена по сравнению с ds1307 великовата да и она меня в полне устраивает.
на счет ds3231 я уже писал что цена по сравнению с ds1307 великовата
Шутите наверное, но раз устраивает, дело хозяйское.
Зависает при включении - нет показаний на ЛСД , но может это только ЛСД виснет , для того я и хочу включить сторожевой таймер чтобы посмотреть что виснет
Проще всего контрольные точки.
Например:
Дошли куда то, print "будем делать то-то"
прошли участок print "сделали то-то"
'===============================================================================
' Н А С Т Р О Й К А USART_0
'===============================================================================$baud = 38400 'скорость трансляции
Config Com1 = Baud , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Ucsr0a.1 = 1 ' Двойная скорость работы USART, скорость трансляции = $baud * 2
Прерывание от часов не использовал по тому что у меня и без этого одни прерывания, мне достаточно опрашивать часы один раз в минуту.
Прерывание от часов не использовал по тому что у меня и без этого одни прерывания, мне достаточно опрашивать часы один раз в минуту.
А часы "один раз в минуту" не по прерыванию ? 
В самом начале темы сказали, что у часов есть "секундный" выход.
Считая его, можно к часам вообще не обращаться... 
У часов пару раз в сутки дату "спросить для уточнения" - вот и всё... 
Прерывание от часов не использовал по тому что у меня и без этого одни прерывания
А точно ли они так нужны ?
Если не сложно, перечень процессов, обрабатываемых по прерываниям - "в студию"...
ЗЫ. Кстати, по поводу скинутого ранее архива...
Насколько я понял, там Акселем не пахнет, все на датчиках слеплено... 
Могу, конечно и ошибаться...
Вы здесь » Программирование ATMEL в BASCOM. » Световые эффекты » Помогите с алгоритмом!