DS18B20 проблемы... Наверно туплю...
|
|
xvovanx |
Дата: Пн, 01.06.2015, 15:45 | Сообщение # 31 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
328
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата ibragimnk ( ) как удалить незначащие нули?
Print At 0,0 Dec TEMP. Сколько действующих знаков у числа TEMP, столько и будет печататься. Не вижу проблемы. Справа можно добавить пустое знакоместо, чтоб корректно затирало при переходе с двух знаков на один Print At 0,0 Dec TEMP," "
Сообщение отредактировал
xvovanx - Пн, 01.06.2015, 15:47
|
|
|
|
ibragimnk |
Дата: Вт, 02.06.2015, 07:47 | Сообщение # 32 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 26.03.2012
Статус:
Offline
|
Цитата ibragimnk ( ) Еще вопрос к знатокам: в чем разница между индикаторами с общим катодом и общим анодом, кроме инверсии сигналов? Может надо как-то инвертировать сигнал с датчика?
Добавлено (02.06.2015, 07:47) --------------------------------------------- Цитата xvovanx ( ) Сколько действующих знаков у числа TEMP, столько и будет печататься. Не вижу проблемы. Насколько я понял это при работе с ЖКИ применяется команда Print At, а у меня стоят ССИ. Но все равно спасибо за ответ. Когда буду работать с ЖКИ, буду иметь в виду.
Сообщение отредактировал
ibragimnk - Вт, 02.06.2015, 07:47
|
|
|
|
Matrix252005 |
Дата: Вт, 02.06.2015, 09:55 | Сообщение # 33 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Приятного времени суток!!!
Цитата ibragimnk ( ) Цитата ibragimnk ()Еще вопрос к знатокам: в чем разница между индикаторами с общим катодом и общим анодом, кроме инверсии сигналов? По сути не какой... В одном управляется по плюсу, в другом по минусу... Ну и конечно в таблице выводов...Добавлено (02.06.2015, 09:55) ---------------------------------------------
Цитата ibragimnk ( ) Проблему с незначащими нулями решил несколько извращенным способом, но тем не менее работает: Не совсем понял Ваш код, но можно и так:
If TemperC >= 100 Then DigitDisp = TemperC Dig 2 ; цыфра после точки PORTA.0 = 1: PORTA.1 = 1: PORTA.2 = 0: PORTA.3 = 1 ; включить пследнюю цифру, а остальные выключить GoSub LOOK ; сходить на преобразование в семисегментный код DelayMS 4 ; ждать 4 Мс для отображения PORTB = 0 ; выключить все сегменты Else Return End If
Больше 100С не проверял, но судя по коду, там такого и нет...
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
ibragimnk |
Дата: Вт, 02.06.2015, 12:20 | Сообщение # 34 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 26.03.2012
Статус:
Offline
|
Честно говоря я сам пока не разобрался, как в данном коде записывается температура (основа кода заимствована из чужого проекта). Но на сколько я понял цифры здесь берутся без плавающей запятой, а точка ставится "внагую" . Отсюда в коде 100С=1000
If TemperC < 1000 Then ; если температура меньше 100 PORTB = led ; то показывать минус EndIf DelayMS 4 ; ждать 4 Мс для отображения PORTB = 0
Экспериментально я обнаружил, что такая запись при положительной температуре убирает незначащие нули, но при этом не мешает выводить температуры выше 100С. Так как переменная led=0.
Сообщение отредактировал
ibragimnk - Вт, 02.06.2015, 12:23
|
|
|
|
ivan_fd |
Дата: Вт, 02.06.2015, 15:39 | Сообщение # 35 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
ibragimnk, смотрите, температуру выше 100 не рассматриваем. Теперь просто, ели первая цифра 0, то ее просто не показываем и все.
|
|
|
|
ibragimnk |
Дата: Ср, 03.06.2015, 09:53 | Сообщение # 36 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 26.03.2012
Статус:
Offline
|
Цитата ibragimnk ( ) If TemperC < 1000 Then ;если температура меньше 100 PORTB = led ; то показывать минус EndIf Так в том то и дело, что пока я не ввел в код эти строчки ноль перед температурами выходил и на третьем и на четвертом разряде, даже если температура была меньше 10С, что мешало индикации минуса.
|
|
|
|
ibragimnk |
Дата: Чт, 04.06.2015, 07:34 | Сообщение # 37 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 26.03.2012
Статус:
Offline
|
С температурой я более менее разобрался. Уважаемый ivan_fd, может Вы мне подскажите почему у меня не идет индикация с общим анодом, но при этом с общим катодом нормально работает? Архив с проектом приложен. По задумке, когда включаешь перемычку сс проект автоматически должен переключатся на индикатор с общим анодом. Переключатся то он переключается, а индикация не идет. Может надо инвертировать не только питание, но и код получаемый с термодатчика?
Сообщение отредактировал
ibragimnk - Чт, 04.06.2015, 07:47
|
|
|
|
ivan_fd |
Дата: Чт, 04.06.2015, 14:19 | Сообщение # 38 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Бегло посмотрел Ваш код. Вот Вы с Катодом гасите сегменты записывая в PORTB = 0. А если с Анодом туда записать то же самое, то что будет? Правильно, будут показывать все сегменты.
Да и схема Ваша, только для протеуса, для науки, в железе не пойдет.
|
|
|
|
ibragimnk |
Дата: Пт, 05.06.2015, 08:08 | Сообщение # 39 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 26.03.2012
Статус:
Offline
|
Цитата ivan_fd ( ) Да и схема Ваша, только для протеуса, для науки, в железе не пойдет. На самом деле этот проект вполне рабочий, разработан он был в 2012 г. и до сих пор успешно работает. Разница только в том, что сейчас работает только вторая скорость насоса и микроконтроллер pic16f628A. http://radiokot.ru/forum/viewtopic.php?f=2&t=77990 (19 сентября) Программу писал Soir, но он с Украины и понятно что ему сейчас не до нас. Поэтому я взялся дорабатывать проект самостоятельно. Что касается индикаторов, то в реальной схеме будут стоять или с общим анодом или с катодом, но ни как не вместе. Извиняюсь, забыл об этом сообщить . Это в протеусе я установил вместе для удобства проверки. Большинство программистов пишут программы для анода отдельно, для катода отдельно и только у Soir я встретил идею с перемычкой. Когда одна программа работает и для анода и для катода, в зависимости от того установлена перемычка или нет. Вот это то я и хотел повторить в своем проекте, однако ни как не могу разобраться с индикацией. При установленной перемычке индикатор с общим анодом должен работать, а с катодом показывать кракозябликов, но это не работает. Но ведь с катодом показывает, когда перемычка не установлена. Я бы хотел, чтобы в этом проекте скорости насоса переключались автоматически в зависимости от граничных пределов температуры задаваемой пользователем.
Сообщение отредактировал
ibragimnk - Пт, 05.06.2015, 08:22
|
|
|
|
ivan_fd |
Дата: Пт, 05.06.2015, 09:08 | Сообщение # 40 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Цитата ibragimnk ( ) На самом деле этот проект вполне рабочий, разработан он был в 2012 г. и до сих пор успешно работает. Вы посмотрите внимательно на ту схему и найдите отличия. В Вашем варианте выйдет из строя или контроллер(порты) или индикатор, Цитата ibragimnk ( ) При установленной перемычке индикатор с общим анодом должен работать, а с катодом показывать кракозябликов, но это не работает. Но я же Вам написал причину, почему не работает.
А вообще, динамическую индикацию, желательно, делать через прерывания.
Удачи.
|
|
|
|
ivan_fd |
Дата: Пт, 05.06.2015, 11:35 | Сообщение # 41 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Если Вам будет интересно, то вот Вам пример дин. индикации через прерывание для индикатора с общим катодом.
|
|
|
|
Matrix252005 |
Дата: Пн, 08.06.2015, 07:41 | Сообщение # 42 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Приятного времени суток!!!
Цитата ibragimnk ( ) Программу писал Soir, но он с Украины... ibragimnk, если Вы заглянули в "профиль", то Вы заметили, что мы с Иваном тоже с Украины (как и много других ребят)... Но это к делу не относится...
По Вашей проблеме: Цитата ibragimnk ( ) Большинство программистов пишут программы для анода отдельно, для катода отдельно и только у Soir я встретил идею с перемычкой. Я такое уже где то встречал и это, в принципе, легко реализовать... Просто, для начала напишите 2 кода (просто, тестовые) для ОА и ОК, потом, в начале кода сделайте обработку Вашей перемычки, если вход = 1, значит ОА, если 0 то ОК...
И это с условием если у МК хватит памяти....
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
ibragimnk |
Дата: Пн, 08.06.2015, 08:36 | Сообщение # 43 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 26.03.2012
Статус:
Offline
|
Большое спасибо за помощь, буду разбирать пример. Цитата Matrix252005 ( ) Я такое уже где то встречал и это, в принципе, легко реализовать... Просто, для начала напишите 2 кода (просто, тестовые) для ОА и ОК, потом, в начале кода сделайте обработку Вашей перемычки, если вход = 1, значит ОА, если 0 то ОК... Вот у меня именно так и выполнено, только вот по аноду почему-то не работает. Буду переписывать с прерываниями (если с ходу разберусь), может лучше получится. Потом мне надо будет с алгоритмом кнопок разбиратся , но это уже потом.
Добавлено (08.06.2015, 08:36) --------------------------------------------- Уважаемый ivan_fd, просмотрел Ваш пример с прерываниями, если из цифры 1820 убрать первую единицу, т.е. 820, то на индикаторе высвечивается 0820. Опять наткнулся на проблему незначащего нуля . Получается по этому коду, если будет минусовая температура, скажем -5С, то на индикаторе получится 805,0С.
Сообщение отредактировал
ibragimnk - Пн, 08.06.2015, 08:49
|
|
|
|
ivan_fd |
Дата: Пн, 08.06.2015, 10:34 | Сообщение # 44 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Цитата ibragimnk ( ) если из цифры 1820 убрать первую единицу, т.е. 820, то на индикаторе высвечивается 0820. Ну правильно, как написано, так и отображает. Код, который я Вам дал, только тестовый. В нем есть такие строчки:
Код DigitDisp = Dig Number, 3 GoSub LOOKS Digit1 = Digits DigitDisp = Dig Number, 2 GoSub LOOKS Digit2 = Digits DigitDisp = Dig Number, 1 GoSub LOOKS Digit3 = Digits DigitDisp = Dig Number, 0 GoSub LOOKS Digit4 = Digits И, если Вы запишите в переменную Number число 820, то естественно DigitDisp = Dig Number, 3 даст нам 0. Показывать, или нет, его Вы сами решаете. Например: Код DigitDisp = Dig Number, 3 if DigitDisp = 0 then Digit1 = 0 else GoSub LOOKS Digit1 = Digits endif Удачи.
|
|
|
|
ibragimnk |
Дата: Пн, 08.06.2015, 13:01 | Сообщение # 45 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 26.03.2012
Статус:
Offline
|
Большое спасибо, вот теперь понятно. Буду дальше разбираться.
|
|
|
|