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

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

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

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



Простая метеостанция с часами

Сообщений 31 страница 60 из 82

31

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

З.Ы.: в авторском варианте этого транзистора и светодиода нет, к слову...

Отредактировано Mantrid (2025-03-20 22:42:28)

0

32

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

Не, ну как это?
i2c-шина чисто аппаратная, там SCK все время быть должно.

Для начала - не SCK, а SCL... ;)
В состоянии покоя на обоих линиях I2C высокий уровень, формируемый "подтяжкой".
Первый же "дрыг" в "0" на SDA Мастером сразу же вызывает "беспокойство" у Slave-ов, имеющихся на шине - "А кого/чего Мастер желает ?..." ;)
Вот тут уже на шине начинается "движ"...
После обмена данными обе линии опять переводятся в состояние покоя до следующего "дрыга" Мастера.
Может через секунду, а может и через месяц... ;)
Протокол TWI/I2C никто не отменял...  :dontknow:

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

Если в БАСКОМЕ есть способ i2c программно "глушить" без всяких там условий, то "Париж стоит мессы!" (с), как говаривал один товарищ.

Оператор (команда) I2cstop переводит шину в состояние покоя (см. выше)
Едем в Париж ? ;)

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

Хех, это, стало быть, "часы" ежесекундно немаскируемое прерывание организуют? Хех, и правда! INT0, а я даже и не обратил внимания, думал, нафига секундный импульс на обычный порт подавать?

Именно так.
Но, независимо от прерывания, на индикаторах что-то отображается.
Прерывание же инициирует опрос датчиков и отображение (смену) значений на индикаторах.

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

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

Возможно и статика, я этими микрухами никогда не занимался.

В очередной раз пролистал всю программу. Уже больше 15 раз, наверно... ;)
Должна она работать, просто обязана...
А учитывая, что использованы наработки таких наших гуру, как sasha_1973 и radan, то сомнения в работоспособности просто отпадают... Лично у меня. ;)
Остаются только "аппаратные" вопросы...

0

33

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

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

Применительно к схеме из #7 ?
Кстати да !  Скорее все тут "собака и порылась"...
Делитель R10/R1 - прекрасное условие для "вечного INT0"...
Сделайте это ДО "сдувания" остальных микросхем... ;)
Можно катод светика подключить к ноге PD2 МК, а R1 удалить.

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

З.Ы.: в авторском варианте этого транзистора и светодиода нет, к слову...

Ваш косяк !  ;)
Ни слова не было про отклонения от исходной схемотехники !
И поэтому никто (наверняка) не вдавался в изучение схемы.

0

34

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

Для начала - не SCK, а SCL... ;)

Да, верно, спутал чутка :)

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

Оператор (команда) I2cstop переводит шину в состояние покоя (см. выше)
Едем в Париж ? ;)

В оригинале фразы не о Париже как таковом было дело, а о том, что ради действительно высокой цели можно иногда и пересмотреть устоявшиеся взгляды на жизнь ;) В ардуине тоже есть команды старта-остановки шины, но они не работают так, как мне надо. В этом была суть вопроса.
Если после I2cstop физически на шине еще присутствуют любые импульсы SCL, а просто убирается SDA, тогда это ничем не лучше ардуины, на мой взгляд. И Париж подождет. :)

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

Остаются только "аппаратные" вопросы...

Да, ответ уже очевиден, думаю.

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

Можно катод светика подключить к ноге PD2 МК, а R1 удалить.

Смысл транзистора со светодиодом был другим. Изначально светодиодов было два, стояли друг за другом и токоограничительный резистор был побольше. Питалось это дело от 12 вольт, т.к. два последовательно включенных светодиода достаточной яркости от пяти вольт зажечь было проблематично. И транзистор просто согласовывал ТТЛ-уровень на базе с напряжением коммутации светодиодов. Все это добро стояло (и стоит) в других часах, тоже схема из Интернета, на атмеге восьмой, там на базу сигнал идет со свободного порта. А я просто шесть лет назад не обратил на это внимания и тягнул весь этот узел в обсуждаемую схему. И сомнений не было: светодиод моргает? Моргает! Значит, схема работает и просто что-то с индикацией не то. В нынешнее время получилось ровно то же самое, но светодиод остался один для стенда :) Так что через часик мы узнаем всю правду...

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

Ваш косяк !  ;)

Несомненно.

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

И поэтому никто (наверняка) не вдавался в изучение схемы.

Просто никому это было не инетерсно. А кому интересно, тот не потрудился схемы сравнить, так что, по правде-то, косяк не только мой ;)

0

35

Ну, что же, убираем базовый резистор и...
https://upforme.ru/uploads/0000/25/b8/2186/t232653.jpg

Отредактировано Mantrid (2025-03-21 08:17:59)

0

36

Так, дело пошло. Прежде всего переписываем частоту в программе на 8 МГц, выкидываем кварц на 16 МГц из схемы и с платы, переходим на внутренний генератор. Чуть меньше радиопомех имеем, в моем случае это важно. Дальше: возвращаем базовый резистор на место, но транзистор BC847 меняем на банальный 2N7002, один в один на плате. Теперь входное сопротивление взлетело до небес и бывший базовый резистор не оказывает влияния на схему. Можно было и вообще убрать, заменив перемычкой, но лень :)  Осталось подправить код как надо.
По коду: вот картинка, где индикаторы условно идут слева направо в таком порядке: время - давление - дата - влажность - температура. Причем, последний разряд температуры как-то криво отображается, как будто сегменты перепутаны:

https://upforme.ru/uploads/0000/25/b8/2186/t935978.jpg

Вопрос к гуру БАСКОМа, можно на возмездной основе: как правильно в коде переставить блоки, чтобы было всего четыре индикатора: время - давление - влажность - температура? Дата не нужна совсем, как и прочие части кода, отвечающие за "графику" дня недели. В коде сейчас объявлены "максы" следующим образом:

  Const Const_amount_max7219 = 5                                     ' Количество используемых чипов MAX7219
  Const Const_skip_max7219 = Const_amount_max7219 * 1       ' Константа для пропуска чипов MAX7219

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

Отредактировано Mantrid (2025-03-21 09:39:08)

0

37

Пока ждал, сам сделал большинство хотелок. Вот как-то так я себе это и представлял:
https://upforme.ru/uploads/0000/25/b8/2186/t776050.jpg
Теперь надо получившийся код почистить от всяких там дат, лет и прочего, что не будет мной использоваться. И да, отличная новость: все это дело влезает в атмегу168-ю, которые все равно без дела валялись! :) 328-ю жалко, у меня их мало, а этих как раз много. Так что в тему. Теперь можно будет подумать о том, как к "максу" приделать здоровенные индикаторы с общим анодом. Где-то я что-то такое видел... Тут задача чисто аналоговая, так что сделаю.  А вот еще вопрос: где-то в коде более продвинутой версии этих часов мелькало что-то про пульт RC5: в БАСКОМе есть обработка инфы от пультов? Если да, то интересует: хочу всю индикацию включать-выключать по кнопочке с пульта от телека, чтобы ночью не светило :) Ну а если нет, то и ладно, реализую внешней схемой.

Отредактировано Mantrid (2025-03-21 12:03:16)

+1

38

Рад, что все получается !  :cool:

Про общие аноды/катоды покопайтесь в примерах sasha_1973, где вы уже нашли что-то по текущей теме.
Было у него и про это...

RC5 и даже прием сторонних ИК неоднократно обсуждалось на Форуме.
Через "Поиск" легко ищется, а так же есть отдельный раздел, где фигурируют эти вопросы.

0

39

Хорошо, спасибо.

0

40

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

В ардуине тоже есть команды старта-остановки шины, но они не работают так, как мне надо.
В этом была суть вопроса.
Если после I2cstop физически на шине еще присутствуют любые импульсы SCL, а просто убирается SDA, тогда это ничем не лучше ардуины, на мой взгляд. И Париж подождет.

Увы, поездке быть !;)
Вот скриншот из Proteus.
Желтый - канал A, линия SCL
Синий - канал C, линия SDA
МК с интервалом шлет на PCF8574 байт, добавляя побитно "1" на выходе - 1, 3, 7, 15 и т.д.
Что мы видим ?
Канал А в паузе "висит" в высоком уровне, даже не шелохнется...
Канал С в это время в "0" и тоже "не брыкается"...
Шина остановлена !
Каюсь, в #32 был неправ, утверждая, что обе линии в состоянии покоя в "1", но сути это не меняет... ;)
Стартовый импульс на SDA (под вертикальным пунктиром) - началось тактирование шины до окончания сеанса (I2cstop в программе).
Все в соответствии с протоколом TWI/I2C (второй скриншот).
https://upforme.ru/uploads/0000/25/b8/1743/t67252.jpg
https://upforme.ru/uploads/0000/25/b8/1743/757197.jpg

+1

41

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

Увы, поездке быть !;)
Вот скриншот из Proteus.

Это все равно, что у мошенников билет в Большой покупать: выглядит красиво и вполне реалистично, но проверку на входе вряд ли пройдет.  В итоге потерянные деньги и нервы, расстроенная жена и одинокая ночь на диване, возможно, что даже не одна ;)
Пока осциллограммы не увижу при работающей шине и при отключенной, в Париж не поедем. ;)

0

42

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

Пока осциллограммы не увижу при работающей шине и при отключенной, в Париж не поедем.

Конструкция уже собрана и вроде работает. :)  Лог. анализатор на шину и смотреть что там. :)

0

43

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

Конструкция уже собрана и вроде работает.

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

Отредактировано Mantrid (2025-03-24 21:26:42)

0

44

Ну, вобщем-то, допилил до нужного состояния заготовку:

https://upforme.ru/uploads/0000/25/b8/2186/t299903.jpg
https://upforme.ru/uploads/0000/25/b8/2186/t949790.jpg
https://upforme.ru/uploads/0000/25/b8/2186/t523521.jpg

Со светофильтром вообще зашибись, хотя спектр индикаторов чуть различается: время - изумрудно-зеленый красивый цвет, к нему подобраны светодиоды "точек"; мелкие табло - желовато-зеленые, обычные. Но все равно красиво. Дистанционное управление тоже есть, сделано, как и раньше, отдельной схемой.
В принципе, все. Надо только додуматься, как в коде влажность и температуру без десятых долей выводить. БАСКОМ все-таки очень мутная вещь для меня, непонятно,  что и где, но осилю со временем.

+1

45

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

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

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

Вечером гляну точнее.

0

46

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

FORMAT.

Гуглил, и через FORMAT, и через Str и еще как-то пытался выводить. Нашел пример, даже через Int что-то делать пытался.  Четыре цифры, с запятой или без. Или не компилируется, ругается.  А чего ругается? А фиг знает. В этом программировании сам черт ногу сломит. Ладно, непринципиально, пусть так остается. Перфекционизм перетопчется в это  раз.

0

47

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

В этом программировании сам черт ногу сломит. Ладно, непринципиально, пусть так остается. Перфекционизм перетопчется в это  раз.

Чуток ошибся... Не Format, а Fusing...
Несколько меняется подход, но суть остается.

В листинге, который в архиве вначале темы, исправляете:
в подпрограмме
Int_ds3231:                                                 'Прерывание 1Гц

Вместо строки
Temperature_str = Fusing(temperature , "#.#") + "°C"

Пишите
temperature = INT(temperature)
Temperature_str = STR(temperature) + "° "

Вместо строки
3_buffer_str = "H" + Fusing(humidity , "#.#")

Пишите
humidity = INT(humidity)
3_buffer_str = "H " + STR(humidity)

Компилируете (у меня BASCOM 2.0.8.5) и рассказываете о результатах... ;)

Гуглить ничего не надо. ;)
Просто открываете Справку https://avrhelp.mcselec.com/ и читаете.

+1

48

Привел к виду:

Код:
      Temp_word = Pressure
      1_buffer_str = "P" + Str(temp_word)
      temperature = INT(temperature)
      Temperature_str = STR(temperature) + "°"
      'Temperature_str = "°"  + Fusing(temperature , "#.#")
      humidity = INT(humidity)
      3_buffer_str = "H " + STR(humidity)
      '3_buffer_str = "H" + Fusing(humidity , "#.#")
      Temperature_str_1 = Mid(temperature_str , 1 , 4)
      Temperature_str_2 = Mid(temperature_str , 5 , 3)

Итог:

https://upforme.ru/uploads/0000/25/b8/2186/t77910.gif

Уже теплее, но пока температура ведет ос счетом 1:0: такой вывод с точностью до сотых (при возможностях BME280 от силы в пять десятых) я нынче видал уже раза четыре или пять. У влажности бы десятичную точку отпилить и сдвинуть на разряд влево.  Сегодня читал все эти справки из интернетов, там мелькнуло описание команды Mid, которая, как я понял, может дергать нужное число знаков из набора, с произвольного места. ММожет, ее как-то запилить? Пусть целую часть дергает из переменной да и выводит куда надо.

З.Ы.: не работает температура-то! Это ВРЕМЯ! :)  Децимальная точка при питании от "свистка" не моргала, а питание подцепил нормальное -   на нижнее табло, где была температура, выводится действиельно ВРЕМЯ, на двух табло сейчас оно одинаковое.

Отредактировано Mantrid (2025-04-02 21:51:11)

0

49

Пропробуйте строку
Temperature_str = STR(temperature) + "°"

Заменить на
Temperature_str = "° " + STR(temperature)
После значка ° - обязательно пробел !

Плохо, когда под рукой нет "железа"...
Такой дистанционный метод программирования - ужасно неудобный... ;)

0

50

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

Пропробуйте строку
Temperature_str = STR(temperature) + "°"

Заменить на
Temperature_str = "° " + STR(temperature)
После значка ° - обязательно пробел !

Скопипастил  в точности, предыдущий вариант закомментил. Получилось то же самое:

https://upforme.ru/uploads/0000/25/b8/2186/t274016.gif

Выложить актуальный код? Может, я чего лишнего чикнул ненароком... Вот: https://disk.yandex.ru/d/F7kwPob72O_lFw

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

Плохо, когда под рукой нет "железа"...
Такой дистанционный метод программирования - ужасно неудобный... ;)

Давайте, пришлю схему и плату: вытравить и спаять недолго, за пару дней не спеша можно ;)

Отредактировано Mantrid (2025-04-02 21:57:47)

0

51

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

Это ничего, вопрос в следующем: коль скоро в цикле болтается переменная Bright, то нельзя ли ее на время вывести на верхнее табло, вместо давления? Тоже в целочисленных значениях.

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

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

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

Сегодня читал все эти справки из интернетов, там мелькнуло описание команды Mid, которая, как я понял, может дергать нужное число знаков из набора, с произвольного места.
Может, ее как-то запилить? Пусть целую часть дергает из переменной да и выводит куда надо.

Она и так активно используется при формировании буфера вывода.
В этой же подпрограмме.

0

52

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

Скопипастил  в точности, предыдущий вариант закомментил. Получилось то же самое:

Но пробел пропал...  :dontknow:
Поковыряюсь с буфером вывода.
Надо вкурить логику его формирования... ;)

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

Выложить актуальный код? Может, я чего лишнего чикнул ненароком...

Сенкс. Забрал.

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

Давайте, пришлю схему и плату: вытравить и спаять недолго, за пару дней не спеша можно

И комплектующие ? ;)
Да вот куда только потом мне эту радость девать ?
У меня на Nextion домашняя сеть прекрасно работает... ;)

0

53

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

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

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

Все-все, разобрался. Правда, нужно было выводить не Bright, а temp_word  из той подпрограммы. Но справился, переписал. Теперь действующие значения яркости от 3 до 12.

- Но как?! Шифу не мог научить тебя мизинчиковому захвату Уси!..
- Он и не учил. Я сам разобрался.

(с), из одного хорошего мультфильма ;)

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

И комплектующие ? ;)
Да вот куда только потом мне эту радость девать ?

Разобрать и выслать обратно :)

Отредактировано Mantrid (2025-04-02 22:22:10)

0

54

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

Но справился, переписал.

Искренне рад.
Надеюсь, не методом "научного тыка" ? ;)

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

Разобрать и выслать обратно

Вот развлекуха-то для пенсионера ! ;)

0

55

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

Надеюсь, не методом "научного тыка" ? ;)

Причем тут тык? Подпрограмма более-менее понятна, что и куда. Ошибся поначалу с выводом, но сразу исправил, а то он мне всего три значения показывал: 3, 12 и 15 :)

0

56

Судя по последним фото конструкции, схема уже не соответствует имеющимся в архиве ?
Файлов Proteus не было в наличии ?

Можно было бы смоделировать...

0

57

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

Судя по последним фото конструкции, схема уже не соответствует имеющимся в архиве ?

Да, там отладочный макет был всего лишь. Он уже разобран :) Вот рабочий вариант, предоставлен чисто для ознакомления, поэтому все вопросы в духе "а что там делает ПИК?" будут считаться риторическими:

https://upforme.ru/uploads/0000/25/b8/2186/t495636.gif

Здесь применено правильное "скрещение ужа с ежом": 12-вольтовые здоровенные индикаторы с общим анодом мирно работают на одном и том же "максе" с пятивольтовым индикатором с общим катодом. Разработка не моя изначально, моя только адаптация под свои задачи. Но можно использовать смело, результат на картинках выше.

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

Файлов Proteus не было в наличии ?

Я же объяснял: я такими программами не пользуюсь.

Отредактировано Mantrid (2025-04-02 22:42:18)

0

58

На скриншоте, приведенном в #50, на месте температуры - текущее время ?

0

59

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

На скриншоте, приведенном в #50, на месте температуры - текущее время ?

Именно, на обоих табло время, даже точка мигает. Если это важно, то мы тут, на Севере, живем по GMT - General Moscow Time ;)

Отредактировано Mantrid (2025-04-02 22:47:16)

0

60

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

Я же объяснял: я такими программами не пользуюсь.

Имелось в виду изначально, вместе с исходниками ?
Если "исходниками" были местные наработки, то вопрос снят.

0