Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » DS18B20 проблемы... Наверно туплю...
DS18B20 проблемы... Наверно туплю...
xvovanx Дата: Пн, 01.06.2015, 15:45  |                                                                                                                Сообщение # 31
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата ibragimnk ()
как удалить незначащие нули?


Print At 0,0 Dec TEMP. Сколько действующих знаков у числа TEMP, столько и будет печататься. Не вижу проблемы. Справа можно добавить пустое знакоместо, чтоб корректно затирало при переходе с двух знаков на один
Print At 0,0 Dec TEMP," "

Сообщение отредактировал xvovanx - Пн, 01.06.2015, 15:47
ЯНДЕКС Дата: 01.06.2015
ibragimnk Дата: Вт, 02.06.2015, 07:47  |                                                                                                                Сообщение # 32
Группа: Проверенные
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 43   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 26.03.2012

Статус: Offline

Честно говоря я сам пока не разобрался, как в данном коде записывается температура (основа кода заимствована из чужого проекта).   Но на сколько я понял цифры здесь берутся без плавающей запятой, а точка ставится         "внагую" wacko .    Отсюда в коде  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
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

ibragimnk,  смотрите, температуру выше 100 не рассматриваем. Теперь просто,
ели первая цифра 0, то ее просто не показываем и все.
ibragimnk Дата: Ср, 03.06.2015, 09:53  |                                                                                                                Сообщение # 36
Группа: Проверенные
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 26.03.2012

Статус: Offline

Цитата ibragimnk ()
If TemperC < 1000 Then ;если температура меньше 100
PORTB = led ; то показывать минус
EndIf
Так в том то и дело, что пока я не ввел в код эти строчки ноль перед температурами выходил и на третьем и на четвертом разряде, даже если температура была меньше 10С, что мешало индикации минуса.
ibragimnk Дата: Чт, 04.06.2015, 07:34  |                                                                                                                Сообщение # 37
Группа: Проверенные
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 26.03.2012

Статус: Offline

С температурой я более менее разобрался. Уважаемый ivan_fd, может Вы мне подскажите почему у меня не идет индикация с общим анодом, но при этом с общим катодом нормально работает? Архив с проектом приложен. По задумке, когда включаешь перемычку сс проект автоматически должен переключатся на индикатор с общим анодом. Переключатся то он переключается, а индикация не идет. Может надо инвертировать не только питание, но и код получаемый с термодатчика?
Прикрепления: 8013897.rar (35.0 Kb)

Сообщение отредактировал ibragimnk - Чт, 04.06.2015, 07:47
ivan_fd Дата: Чт, 04.06.2015, 14:19  |                                                                                                                Сообщение # 38
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Бегло посмотрел Ваш код.
Вот Вы с Катодом гасите сегменты записывая в PORTB = 0.
А если с Анодом туда записать то же самое, то что будет?
Правильно, будут показывать все сегменты.

Да и схема Ваша, только для протеуса, для науки, в железе не пойдет.
ibragimnk Дата: Пт, 05.06.2015, 08:08  |                                                                                                                Сообщение # 39
Группа: Проверенные
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 26.03.2012

Статус: Offline

Цитата ivan_fd ()
Да и схема Ваша, только для протеуса, для науки, в железе не пойдет.
На самом деле этот проект вполне рабочий, разработан он был в 2012 г. и до сих пор успешно работает. Разница только в том, что сейчас работает только вторая скорость насоса и микроконтроллер pic16f628A. http://radiokot.ru/forum/viewtopic.php?f=2&t=77990 (19 сентября) Программу писал Soir, но он с Украины и понятно что ему сейчас не до нас. Поэтому я взялся дорабатывать проект самостоятельно. Что касается индикаторов, то в реальной схеме будут стоять или с общим анодом или с катодом, но ни как не вместе. Извиняюсь, забыл об этом сообщить cry . Это в протеусе я установил вместе для удобства проверки. Большинство программистов пишут программы для анода отдельно, для катода отдельно и только у Soir я встретил идею с перемычкой. Когда одна программа работает и для анода и для катода, в зависимости от того установлена перемычка или нет. Вот это то я и хотел повторить в своем проекте, однако ни как не могу разобраться с индикацией. При установленной перемычке индикатор с общим анодом должен работать, а с катодом показывать кракозябликов, но это не работает. Но ведь с катодом показывает, когда перемычка не установлена. Я бы хотел, чтобы в этом проекте скорости насоса переключались автоматически в зависимости от граничных пределов температуры задаваемой пользователем.

Сообщение отредактировал ibragimnk - Пт, 05.06.2015, 08:22
ivan_fd Дата: Пт, 05.06.2015, 09:08  |                                                                                                                Сообщение # 40
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата ibragimnk ()
На самом деле этот проект вполне рабочий, разработан он был в 2012 г. и до сих пор успешно работает.

Вы посмотрите внимательно на ту схему и найдите отличия. В Вашем варианте выйдет из строя
или контроллер(порты) или индикатор, 
Цитата ibragimnk ()
При установленной перемычке индикатор с общим анодом должен работать, а с катодом показывать кракозябликов, но это не работает.

Но я же Вам написал причину, почему не работает.

А вообще, динамическую индикацию, желательно, делать через прерывания.

Удачи.
ivan_fd Дата: Пт, 05.06.2015, 11:35  |                                                                                                                Сообщение # 41
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Если Вам будет интересно, то вот Вам пример дин. индикации через прерывание
для индикатора с общим катодом.
Прикрепления: DynamicIndicati.zip (88.8 Kb)
ЯНДЕКС Дата: 05.06.2015
Matrix252005 Дата: Пн, 08.06.2015, 07:41  |                                                                                                                Сообщение # 42
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 26.03.2012

Статус: Offline

Большое спасибо за помощь, буду разбирать пример.
Цитата Matrix252005 ()
Я такое уже где то встречал и это, в принципе, легко реализовать... Просто, для начала напишите 2 кода (просто, тестовые) для ОА и ОК, потом, в начале кода сделайте обработку Вашей перемычки, если вход = 1, значит ОА, если 0 то ОК...
Вот у меня именно так и выполнено, только вот по аноду почему-то не работает. Буду переписывать с прерываниями (если с ходу разберусь), может лучше получится. Потом мне надо будет с алгоритмом кнопок разбиратся surprised , но это уже потом.

Добавлено (08.06.2015, 08:36)
---------------------------------------------
Уважаемый ivan_fd, просмотрел Ваш пример с прерываниями, если из цифры 1820 убрать первую единицу, т.е. 820, то на индикаторе высвечивается 0820. Опять наткнулся на проблему незначащего нуля sad . Получается по этому коду, если будет минусовая температура, скажем -5С, то на индикаторе получится 805,0С.

Сообщение отредактировал ibragimnk - Пн, 08.06.2015, 08:49
ivan_fd Дата: Пн, 08.06.2015, 10:34  |                                                                                                                Сообщение # 44
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 26.03.2012

Статус: Offline

Большое спасибо, вот теперь понятно. Буду дальше разбираться.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » DS18B20 проблемы... Наверно туплю...
  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: