roboforum.ru

Технический форум по робототехнике.

Газоразрядный термометр

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Газоразрядный термометр

Сообщение Dmitry__ » 03 фев 2017, 14:24

Madf писал(а):Собственно вот:
1.c


Собственно там ничего не сделано. На лицо полное непонимание отступов и скобочек.
Кста, непонятно, ведь всякие IDE сами умеют форматировать сишный код? Ну вот я в редакторе Geany печатаю открыв. скобку, редактор сам делает отступ, потом правильно откорректирует отступ при закрыв. скобке.
Отступы нужны для понимания уровня вложения алгоритма. Скобка в начале строки - начальный уровень (нулевой) любой функции. Следующие отступы - уровень вложения алгоритма. Я отформатировал код до 150 строки, теперь это можно читать. У тебя есть программа сравнения файлов? Под чем ты работаешь, венды? В вендах есть хорошая сравнивалка, кажись merg. Сравни свой последний файл и мой. Только сначала будет сложно сравнивать, т.к. я весь твой текст обработал командой "удалить все лишние пробелы в конце строк".
Ну так вот, до 150 строки я отформатировал текст. Только в этом месте готов искать ошибки. Сразу бросается в глаза:
Код: Выделить всёРазвернуть
   switch (p1)
   {
      case 0: i0;
      case 1: i1;
      case 2: i2;
      case 3: i3;
      case 4: i4;
      case 5: i5;
      case 6: i6;
      case 7: i7;
      case 8: i8;
      case 9: i9;
      break;
   };


Почему у тебя "case" без break? После "case 0: i0;" Выполнится следующий "case 1: i1;" и так далее по цепочке. Не так ли ты хотел сделать?
Код: Выделить всёРазвернуть
   switch (p1)
   {
      case 0: i0;
         break;
      case 1: i1;
         break;
      case 2: i2;
         break;
      case 3: i3;
         break;
      case 4: i4;
         break;
      case 5: i5;
         break;
      case 6: i6;
         break;
      case 7: i7;
         break;
      case 8: i8;
         break;
      case 9: i9;
         break;
   };


Больше о switch по ссылкам из поисковика:
http://easy-code.ru/lesson/switch-case-cpp
Далее, вот этот goto "goto m0;" в "void indicating(unsigned char p0)". Я не против goto вообще, я их даже лублу, но ты уверен что не запутался в алгоритме? Последний "if (ind==3)" тоже выполнит код по метке m0:. Хотя, наверно, так и задумано. Но ведь ты мог все эти "if (ind==х)" заменить на case и избавиться от goto, не?
Мои правки, сравнивай meld-ом ой, merg-ом...
1.c
(11.81 КиБ) Скачиваний: 450
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Газоразрядный термометр

Сообщение pirat777knj » 03 фев 2017, 15:41

Я как бы намекал, что схема вызовет путаницу. Ибо она переделывалась под разводку платы. Как удобней дорожку было проложить - так и схему поменял. Отсюда и такие сплетения.
А про фьюзы... Сарказм не уместен.
Про частоту то забыл указать.
Вполне отлично 60Гц на индикатор идёт. Но я решил сделать поменьше, т.к. Фантомы убирать пришлось.

Хм... Вот почему switch не работал... Ясненько. А switch на if не заменил, т.к. другой код взял. У мну их два лежит. На всякий. Вот в другом if
pirat777knj
 
Сообщения: 112
Зарегистрирован: 16 авг 2015, 00:22

Re: Газоразрядный термометр

Сообщение Madf » 03 фев 2017, 18:59

pirat777knj писал(а):Ибо она переделывалась под разводку платы. Как удобней дорожку было проложить - так и схему поменял. Отсюда и такие сплетения.

Вам с таким подходом в схемотехнике, прямая дорога в FPGA, там это не принципиально. :D
pirat777knj писал(а):А про фьюзы... Сарказм не уместен.

Я не сарказил, просто проверял.
pirat777knj писал(а):Вполне отлично 60Гц на индикатор идёт. Но я решил сделать поменьше, т.к. Фантомы убирать пришлось.

Это очень мало для динамики, если поделить 60 на 4 цифры, то получим 15 кадровая - будет заметно глазом. Если рефрешить не в такт и быстрее, то часть индикаторов вообще может светится тускло. Поправьте меня, если я неправ. :oops: Насколько я помню схемы из махровых годов с такими индикаторами, то там как правило динамику не делали... (если в расчет брать калькуляторы всякие, то там на слух частота была КГц).
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Газоразрядный термометр

Сообщение pirat777knj » 03 фев 2017, 22:18

Да насчёт платы как то так. На односторонней проще разводку делать так.
И да. Поправлю пожалуй) написал же "на индикатор", то есть каждая лампа 60 раз. На самом деле потом снизил, до сколько не помню. Ибо фантомы были. Должно быть где то 42Гц. Или если брать общую частоту смены то 168Гц. И все отлично работает. Мерцания нет, да и яркость достаточная :good:
Быстрее не вышло. Фантомы остаются. Наверно декоратор не успевает.
Ой. Ведь её написал какой стоит. А на схеме то не видно. К133ид1. Знаете такой в керамическо-металлическом исполнении с военки ещё)
pirat777knj
 
Сообщения: 112
Зарегистрирован: 16 авг 2015, 00:22

Re: Газоразрядный термометр

Сообщение Dmitry__ » 03 фев 2017, 23:06

pirat777knj писал(а):Наверно декоратор не успевает.

Я так понимаю, что это какой-нибудь андроид так исправил слово "дешифратор"? :)
Когда появилась тема "Газоразрядный термометр", зашел чтоб посмотреть на новый тип термодатчика - газоразрядный, но случился облом.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Газоразрядный термометр

Сообщение pirat777knj » 03 фев 2017, 23:42

:lol:
Ага. Сейчас с телефона пишу.
Забавно вышло. Следовало написать на газоразрядных индикаторах.
pirat777knj
 
Сообщения: 112
Зарегистрирован: 16 авг 2015, 00:22

Re: Газоразрядный термометр

Сообщение pirat777knj » 09 фев 2017, 15:57

Друзья, что с кодом то? Есть какие мысли?
pirat777knj
 
Сообщения: 112
Зарегистрирован: 16 авг 2015, 00:22

Re: Газоразрядный термометр

Сообщение Dmitry__ » 09 фев 2017, 18:02

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

Добавлено спустя 3 минуты 35 секунд:
Я тебе указывал на ошибки в коде, которые сразу бросаются в глаза. Разбираться в твоем алгоритме, когда присутствуют ошибки - нет смысла. Вычищай где увидели ошибки, выкладывай сюда. Если ошибок больше не будет, то тогда можно разбираться с кодом. И не забудь рекомендации по форматированию текста. Подправленный твой пример до N строки я выкладывал. Никто не будет читать кашу.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Газоразрядный термометр

Сообщение pirat777knj » 09 фев 2017, 21:27

Окай. Посмотрим дальше что к чему
pirat777knj
 
Сообщения: 112
Зарегистрирован: 16 авг 2015, 00:22

Re: Газоразрядный термометр

Сообщение pirat777knj » 12 фев 2017, 23:38

Ну чтож. Докладываю что сделал:

-Немного переделал код работы с датчиком (чтоб не ждал бесконечно)
Код: Выделить всёРазвернуть
 vvv=0;
    while((DHT_IN == 0)&&(vvv<100))
        {
        delay_us(10);
        vvv++;   //может зависнуть - добавить код
        }
    if (vvv==100) {type=0x44;return 1;}


-Пересадил вывод информации на switch.
-После отработки GetHumidity(); поставил сравнение на присутствие датчика. Ибо какой смысл работать дальше, если датчика нет.
-Закоментировал запрет прерываний, из-за него на индикаторах по какой-то причине выводятся 777°С и 666%.

Теперь о непонятках.

1: Почему то на индикаторах заместо 999 отображает 000. В шапке прописал значение r2=9 ,r1=9, r0=9;
А при подключенном датчике показывает 000.

2: При КЗ датчика на плюс не выдает ошибки, хотя должен.

3. И совсем забыл. Датчик по прежнему не работает, хотя его видит. Если отключить будет отображать ошибку. Если оставить подключенным выдаёт 000
Вложения
3.c
(12.03 КиБ) Скачиваний: 451
pirat777knj
 
Сообщения: 112
Зарегистрирован: 16 авг 2015, 00:22

Re: Газоразрядный термометр

Сообщение pirat777knj » 17 фев 2017, 09:10

Тишинаааа
pirat777knj
 
Сообщения: 112
Зарегистрирован: 16 авг 2015, 00:22

Re: Газоразрядный термометр

Сообщение Dmitry__ » 17 фев 2017, 13:35

pirat777knj писал(а):Тишинаааа

Беглый осмотр последнего кода показал, что ничего не исправлено. Хотя бы строка 101: "if (flag1-=0)". Еще осмотр показал смену контроллера и.т.д. Как-то очень круто меняется начальный код. Давать советы на таких резких изменениях трудно. Поэтому и тишинаааааа. Общая рекомендация: Попить таблеточек, повышающих внимательность :)

Надо забыть на данном этапе про датчик DHT. Отладить код, чтоб все нормально отображалось на каком-нибудь виртуальном счетчике - например счетчик увеличивается каждые 0.5 сек. Когда код будет отлажен и ничего не будет рябить, тогда возвращаться к dht.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Газоразрядный термометр

Сообщение pirat777knj » 18 фев 2017, 13:52

Переделал конвертер в BCD_3.
НО!
Не догоняю почему при передаче значения из переменной на выходе всегда 000.
Если прописать ему значение - всё отлично, а вот указать переменную - не работает.
Вложения
3.c
(11.44 КиБ) Скачиваний: 471
pirat777knj
 
Сообщения: 112
Зарегистрирован: 16 авг 2015, 00:22

Re: Газоразрядный термометр

Сообщение Dmitry__ » 18 фев 2017, 14:16

pirat777knj писал(а):Не догоняю почему при передаче значения из переменной на выходе всегда 000.

Потому что опять не поняты операторы "==" в if:
Код: Выделить всёРазвернуть
void BCD_3(unsigned int value)                                 // Конвертер в десятичную
{if (value>1000) return;
  r0=0;
  r1=0;
  r2=0;
    if (value==100)
    {
        do                        // count 100
        {
        r2++;
        value-=100;
        }
        while (value>100);
    }
    if (value==10)
    {
        do                        // count 10
        {
        r1++;
        value-=10;
        }
        while (value>10);
    }
    if (value>0)                  // count 1
    {
        do
        {
        r0++;
        value-=1;
        }
        while (value>0); 
    }
}


Ты передаешь vr в BCD_3. Который определен "vr=546;". Далее в BCD_3 первое сравнение: "if (value==100)", что надо читать как: если значение равно 100, то. Твой vr не равен 100, значит пропускаем. Потом пропускаем и "if (value==10)", т.к. vr не равен 10. И все сваливается в:
Код: Выделить всёРазвернуть
    if (value>0)                  // count 1
    {
        do
        {
        r0++;
        value-=1;
        }
        while (value>0); 
    }


Где r0, который может принимать максимальное значение "255"(т.к он "unsigned char") 546 раз складывается с "1" :). Другие r1 и r2 не меняются и равны нулю.
Скорее всего, ты хотел не "если значение равно 100, то", а "если значение больше или равно 100, то". А это не "if (value==100)", а "if (value>=100)"
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Газоразрядный термометр

Сообщение pirat777knj » 18 фев 2017, 20:59

А ну да. Так и хотел.)
pirat777knj
 
Сообщения: 112
Зарегистрирован: 16 авг 2015, 00:22

Пред.След.

Вернуться в Микроконтроллеры

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 5