roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 17:40

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Газоразрядный термометр
СообщениеДобавлено: 31 янв 2017, 19:31 
Не в сети

Зарегистрирован: 16 авг 2015, 00:22
Сообщения: 112
Всем привет.
Решил сделать термометр на газоразрядниках.
Плата готова, все собрано. В программировании полный нуль!!!!
Начал вспоминать то, что забыл лет 5 назад. И похоже не очень получается.
С горем пополам заставил работать сами индикаторы и даже переключаться с температуры на влажность и обратно.
Но вот датчик не получается заставит работать(((
Кстати: Датчик DHT22, МК мега168. Пишу в CVAVR.
Прошу помощи в доведении до ума)))
Вложение:
1.c [11.63 КиБ]
Скачиваний: 446


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 31 янв 2017, 20:42 
Не в сети

Зарегистрирован: 26 мар 2008, 12:45
Сообщения: 326
pirat777knj
Скажи в чем проблема, прочитать чужой код, сомнительного качества невозможно .... ПОМОГУ
loox


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 31 янв 2017, 21:16 
Не в сети

Зарегистрирован: 16 авг 2015, 00:22
Сообщения: 112
Проблема в том, что этот код не реагирует на присутствие датчика вообще никак. Что есть, что нет.
Выглядит это безобразие так:https://youtu.be/qF1EXywnnkc
Притом, что если закоментировать код в цикле while(1), а в начале прописать переменным просто значения, то все работает отлично.
Никаких дерганий как на видео.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 01 фев 2017, 13:23 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Схему выложили бы, может кто бы и написал вам код/прошивку.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 02 фев 2017, 09:51 
Не в сети

Зарегистрирован: 16 авг 2015, 00:22
Сообщения: 112
Боюсь моя схема путаницу введёт. Не старался её в удобоваримом виде делать. Делал чисто чтоб плату развести. Получилась каша.
А вот в программе в шапке подключения описаны все. Индикация динамическая. Датчик один.
А может кто скинет 100500 рабочий код для dht22?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 02 фев 2017, 12:39 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Тогда нарисуйте нормальную схему подключения по ногам МК.
Я например, в вашем коде возится не собираюсь, ибо ничего там не понятно по мелочам.
И вам обязательно Си или чтобы работало?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 02 фев 2017, 18:27 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
pirat777knj писал(а):
Прошу помощи в доведении до ума)))

Вообще код эпичный.
В прерывании: "if (type-=0x44)"
Во-первых "type" должен быть "volatile", иначе компилятор его может выкинуть.
Во-вторых, вдумайся в "if (type-=0x44)" :shock:
Отнять 0x44 от type и если он "true" то что-то выполнить. True - любое значение кроме нуля. Сам type = "unsigned char". При вычитании из такого типа, когда новое значение будет отрицательным, байт просто пройдет через 0xff и опять станет >0. Шансов у переменной type, при вычитании 0х44, стать нулем - минимальный. Код после if будет исполняться практически всегда. И иногда будет исполнятся "else // Если датчика нет - отображать ошибку "
И вообще, что это за хитрое использование "{...}" ???
Код:
if (type-=0x44)
    {if (time<2500)
    {zoff;
     if (type==0x11)
        {mon;
        indicating(1);
        }

Это же надо иметь бинарное мышление как у компилятора, чтоб понять такой код.
Если ты для "if" используешь один оператор, то делай без фигурных скобок:
Код:
if (type-=0x44) бла-бла-бла;


Если в if используется несколько операторов, то:
Код:
if (type-=0x44)
{
    бла-бла-бла;
    бла-бла-бла;
    бла-бла-бла;
}

Но не так как у тебя...

И конечно заменить "if (type-=0x44)" на:
Код:
type-=0x44;
if (type > 0)
{
    бла-бла-бла;
    бла-бла-бла;
    бла-бла-бла;
}

Соответственно type должен быть не беззнаковым "unsigned char", а каким-нибудь "char", а лучше "byte" или каким-нибудь int_8, ну что прописано в заголовочных файлах типов переменных...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 02 фев 2017, 19:53 
Не в сети

Зарегистрирован: 16 авг 2015, 00:22
Сообщения: 112
Ой Ой. Запинали :D
Мужики, я не программист и не когда на него не учился, написал как знаю...
Судя по ответу - лучше мне это дело забросить вообще(((
А так писал на С тока потому, что хоть какое то понимание происходящего есть)))
Люблю знаете посидеть и поломать голову над тем, а как это сделано.
Кстати, CVAVR не воспринимает int_8, int_16 и прочее. Пишет ошибку.
А схема вот
Вложение:
nixie_term.png
nixie_term.png [ 108.76 КиБ | Просмотров: 3097 ]


/*******************************************************************************************************************/
Я почему-то думал что
Код:
if (type-=0x44)

Будет значить не равно. А оказывается он его как вычитание воспринимает.... Не знал.
Попробовал заменить на
Код:
if ((type>0x44)&(type<0x44))

Теперь стабильно горит символ "n" как и положено.
Теперь собственно датчик....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 02 фев 2017, 20:37 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
pirat777knj писал(а):
Кстати, CVAVR не воспринимает int_8, int_16 и прочее. Пишет ошибку.

Хорошо, "signed char" есть? :wink:

pirat777knj писал(а):
Я почему-то думал что "if (type-=0x44)" Будет значить не равно.

Не равно будет так: "!=". A "type-=0x44" - это краткая форма присвоения: "type = type - 0x44"

Добавлено спустя 4 минуты 35 секунд:
Как и:
Код:
type +=0x44 = type + 0x44
type ^=0x44 = type ^ 0x44
type &=0x44 = type & 0x44

И.т.д.

Добавлено спустя 4 минуты 20 секунд:
pirat777knj писал(а):
Попробовал заменить на "if ((type>0x44)&(type<0x44))

Это тоже ошибка. Один "&" - значит сделать логический and. А если ты хотел условие: "если бла-бла-бла И бла-бла-бла, то надо 2 символа "&", т.е. "if ((type>0x44)&&(type<0x44))

Добавлено спустя 3 минуты 48 секунд:
Ой, и что это вообще за условие? :)
Код:
if ((type>0x44)&&(type<0x44))

Такого значения не существует в природе, число не может одновременно быть больше и меньше определенного значения :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 02 фев 2017, 20:41 
Не в сети

Зарегистрирован: 16 авг 2015, 00:22
Сообщения: 112
Ой да. Что то я совсем не внимателен. Спасибо что терпите и объясняете)
А как будет не равно?
Стоп. А насчёт 0х44 все правильно.
Меньше 44 и больше 44. это значит, что не равно 44! Или я путаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 02 фев 2017, 21:12 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
pirat777knj писал(а):
Стоп. А насчёт 0х44 все правильно.
Меньше 44 и больше 44. это значит, что не равно 44! Или я путаю?

Ну так ты русским языком повтори строчку:
"if ((type>0x44)&&(type<0x44))"
Если type больше 0x44 И type меньше 0x44, то :). T.e. type должен быть одновременно и больше и меньше.
Наверно ты хотел:
Если type больше 0x44 ИЛИ type меньше 0x44. Или = ||
"if ((type>0x44)||(type<0x44))"
А проще "не равно", т.е.:
"if (type != 0x44)"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 02 фев 2017, 21:39 
Не в сети

Зарегистрирован: 16 авг 2015, 00:22
Сообщения: 112
:lol:
А ведь в самом начале я так и написал. Тока просто|, а потом подумал что фигня выйдет и написал type-=0x44.
Но суть не в этом. Вы наверно поняли что я хотел просто флаг сделать. Как объявить флаг, ну т.е. 1 бит?
Иииии.... фигня в релультате, но хоть перестало дергаться. Датчик по прежнему не видит. И ему без разницы подключен тот или нет.
Притом почему то после примерно 3-4х секунд начинает дублировать цифры 7 и 6 на все индикаторы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 02 фев 2017, 22:01 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Ну со мной можно на ты, а то мне придется переходить на Вы :)
А код тяжело смотреть, ты бы его причесал и положил опять в первое сообщение. Я встрял в разговор, увидев косяки, которые сразу бросились в глаза, а так надо моск морщить...
Отформатируй текст. Каждая открывающая фигурная скобочка должна отделятся от начала строки табуляцией. И соотв. каждая закр. скобочка должна быть на уровне соотв. открывающей скобочки. Иначе это читать невозможно.
Т.е. не так рандомно:
Код:
  if(bla-bla-bla)
  {
  {
     }
       }

А так:
Код:
  if(bla-bla-bla)
  {
       {

       }
  }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 03 фев 2017, 00:18 
Не в сети

Зарегистрирован: 16 авг 2015, 00:22
Сообщения: 112
Собственно вот:
Вложение:
1.c [12.29 КиБ]
Скачиваний: 429


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Газоразрядный термометр
СообщениеДобавлено: 03 фев 2017, 12:51 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Не хочу показаться занудой, но глядя на эту схему (порядок), сразу становится понятно, почему в коде такая неразбериха. ;)
Ну хоть и то хлеб...

С фюзвми уже знакомы в МК?
Какой частоты у вас там импульсник на лампы? Они вообще какую частоту динамики выдержат?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO