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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Помогите с алгоритмом!


Помогите с алгоритмом!

Сообщений 91 страница 120 из 204

91

Надо в регистр секунд DS1307 вписать нолик. Точно не помню,но где-то так:

Код:
Seco = 0
I2cstart                                                              
I2cwbyte Ds1307w     '  &HD0                                               
I2cwbyte 0                                                            
I2cwbyte Seco                                                         
I2cstop

0

92

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

Надо в регистр секунд DS1307 вписать нолик. Точно не помню,но где-то так:

Спасибо , заработало.

0

93

В Васике в примерах есть пример работы с часами DS1307.
там обращение к времени и дате идет через системные текстовые переменные TIME$ и DATE$

устанавливаем время и дату
TIME$ = "hh:mm:ss"
DATE$ = "mm/dd/yy"

читаем время и дату
var = TIME$
var = DATE$
хотя можно и напрямую использовать переменные TIME$ и DATE$, скажем для вывода на экран.

Отредактировано pavel1969 (2018-02-19 23:01:02)

+1

94

Как правильно додать время , например 5:00 + 23:00 = было 4:00 а не 28:00 ?

0

95

если 5+23>24 тогда 5+23-24 
надеюсь сам в коде обрисуешь.
Вааще, найди любую прошивку от часов или будильников, там это всё давно написано.

0

96

Спасибо.

0

97

Как отрицательное число инвертировать в положительное ? Я делаю так , Х=Х*-1 но компилятор ругается.

0

98

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

Как отрицательное число инвертировать в положительное ? Я делаю так , Х=Х*-1 но компилятор ругается.


Значит разная размерность переменных

0

99

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

Как отрицательное число инвертировать в положительное ? Я делаю так , Х=Х*-1 но компилятор ругается.


Разобрался , был пробел между - и 1.

0

100

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

Как отрицательное число инвертировать в положительное ? Я делаю так , Х=Х*-1 но компилятор ругается.

var1=ABS(var2)
var2 - отрицательное, var1 - положительное

Отредактировано sva-don (2018-02-25 10:07:27)

0

101

Подскажите как в ATMEGA128 включить сторожевой таймер а то что то подвесает при включении.

0

102

Это точно не сторожевой таймер. Разбирайся с кодом.
... да, и код где???

0

103

Код:
Измерение_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

      


Посмотрите пожалуйста правильно ли я меряю дисбаланс с помощью акселерометра ?

0

104

И где зависает?
Трассировщик или дебаггер есть?

0

105

-NMi- написал(а):

И где зависает?
Трассировщик или дебаггер есть?


Зависает при включении - нет показаний на ЛСД , но может это только ЛСД виснет , для того я и хочу включить сторожевой таймер чтобы посмотреть что виснет .
Трассировщик или дебаггер - если честно мну нужно в начале прочесть что это. :nope:

0

106

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

Трассировщик или дебаггер - если честно мну нужно в начале прочесть что это.

Каким образом контролируется работа программы ?
Каждый раз перепрошивкой или виртуально (Протеус, напр.)

Во втором случае самый простой вариант - поставить оператор Stop на каком-то этапе программы и в симуляции отслеживать происходящее.
Можно подобные точки прерывания устанавливать в Протеусе, но это дольше объяснять.

0

107

Сторожевой таймер работает как счётчик тактов и если его вовремя не сбросить - возникнет прерывание от него, где, как правило, происходит сброс процессора со следами в регистре MCCUR или что-то подобное.
Не там ты копаешь, явно.

0

108

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

Каким образом контролируется работа программы ?
Каждый раз перепрошивкой или виртуально (Протеус, напр.)

Во втором случае самый простой вариант - поставить оператор Stop на каком-то этапе программы и в симуляции отслеживать происходящее.
Можно подобные точки прерывания устанавливать в Протеусе, но это дольше объяснять.

Программу тестирую и в железе и в протеусе , правда протеус как то медленно работает.

0

109

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

Программу тестирую и в железе и в протеусе

Программа ведет себя одинаково ?

0

110

Ой в блудняк вы так попадёте....
Скить весь проект в протеусе, гляну чо да как.

0

111

-NMi- написал(а):

Ой в блудняк вы так попадёте....
Скить весь проект в протеусе, гляну чо да как.

Если скину на гугл диск , посмотреть сможешь ?

0

112

Кидай куда хочешь или куда удобно.  Посмотрю. Но не быстро, ибо код у тебя витиеват, не совсем понятно что к чему.  Заодно посмотрим, что ты за "кодер"  :D

0

113

Вотhttps://drive.google.com/file/d/1x9-uGw2_TjYvW4A33uVVxauHUyvNvrWr/view?usp=drivesdk

+1

114

Намано!

0

115

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

Вотhttps://drive.google.com/file/d/1x9-uGw2_TjYvW4A33uVVxauHUyvNvrWr/view?usp=drivesdk


Монументальный труд ! - это про симуляцию.

В железе, что-нибудь работает ?

Почему Ds1307, а не Ds3231 ?  Чего не использовали прерывания от часов ?

Отредактировано sasha_1973 (2018-02-25 23:06:28)

0

116

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

Монументальный труд ! - это про симуляцию.

В железе, что-нибудь работает ?

Почему Ds1307, а не Ds3231 ?  Чего не использовали прерывания от часов ?

Отредактировано sasha_1973 (Сегодня 23:06:28)

В железе все проверил кроме управления привода, на счет ds3231 я уже писал что цена по сравнению с ds1307 великовата да и она меня в полне устраивает.

0

117

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

на счет ds3231 я уже писал что цена по сравнению с ds1307 великовата


Шутите наверное, но раз устраивает, дело хозяйское.

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

Зависает при включении - нет показаний на ЛСД , но может это только ЛСД виснет , для того я и хочу включить сторожевой таймер чтобы посмотреть что виснет

Проще всего контрольные точки.
Например:
Дошли куда то, print "будем делать то-то"
прошли участок print "сделали то-то"

для этого надо настроить USART

'===============================================================================
'                     Н А С Т Р О Й К А     USART_0
'===============================================================================

  $baud = 38400  'скорость трансляции
  Config Com1 = Baud , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Ucsr0a.1 = 1       ' Двойная скорость работы USART, скорость трансляции = $baud * 2

0

118

Прерывание от часов не использовал по тому что у меня и без этого одни прерывания, мне достаточно опрашивать часы один раз в минуту.

0

119

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

Прерывание от часов не использовал по тому что у меня и без этого одни прерывания, мне достаточно опрашивать часы один раз в минуту.

А часы "один раз в минуту" не по прерыванию ? ;)

В самом начале темы сказали, что у часов есть "секундный" выход.
Считая его, можно к часам вообще не обращаться... ;)
У часов пару раз в сутки дату "спросить для уточнения" - вот и всё... ;)

0

120

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

Прерывание от часов не использовал по тому что у меня и без этого одни прерывания

А точно ли они так нужны ?
Если не сложно, перечень процессов, обрабатываемых по прерываниям - "в студию"...

ЗЫ. Кстати, по поводу скинутого ранее архива...
Насколько я понял, там Акселем не пахнет, все на датчиках слеплено... ;)
Могу, конечно и ошибаться...

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Помогите с алгоритмом!