Valerius_San

Простые вопросы новичка.

67 сообщений в этой теме

6 минут назад, oldmao сказал:

Во-первых процесс не настолько быстрый, что нужно одновременное наблюдение сразу всех параметров. Минимальный вариант - четырехзначный семисегментник с контроллером TM1637, типа такого:
59d1207c134ad_Untitled-2copy.jpg.36aa5ed4628b343446cd6f7934a45bc6.jpg

Для подключения к МК нужно всего две ножки. Для индикации названия параметра - четыре светодиода. Или даже два: первый горит/не горит = термопара 1/2, второй = уставка/текущая температура.
Хочется больше информативности - такой с контроллером MAX7219, будет видно сразу две температуры или уставки:
59d12216c5df5_Untitled-3copy.jpg.1aaa0a05b2f3c5c8256d5af7b682f82d.jpg

Ещё лучше использовать двухстрочный ЖК:
EK66871_B.PNG

Во-вторых для вашей задачи скорость процессора - вообще дело десятое! Опросить два канала АЦП раз в секунду, а то и реже, перевести из "попугаев" в реальные градусы и отправить это на индикатор - это вообще задача плёвая.


Процесс действительно не настолько быстрый, но есть еще такое как "инертное нагревание" - ты его выключил, а он все равно топит.
"Во-вторых для вашей задачи скорость процессора - вообще дело десятое! " - как раз и нет.
Я работал на конторе, мы делали печи под порошковую покраску - так там + 10 град  и порошковая краска сползла как сметана.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
BARS_    529
1 минуту назад, Valerius_San сказал:

как раз и нет.

Как нет, если процесс медленный?

1 минуту назад, Valerius_San сказал:

так там + 10 град

Так с вашей аналоговой частью именно такая точность и будет, если не хуже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, BARS_ сказал:

Как нет, если процесс медленный?

Так с вашей аналоговой частью именно такая точность и будет, если не хуже.

Ну да....

Так поэтому и взялся за эту затею.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529

Аналоговую часть все равно придется делать по человечески + хорошую обвязку самого МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, BARS_ сказал:

Аналоговую часть все равно придется делать по человечески + хорошую обвязку самого МК.

Я не ленивый, и халтурить не люблю.
Если уже что-то делать, так естественно по человечески и до конца.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529

Вот это правильный подход. Тогда для начала сделайте именно аналоговую часть, а параллельно изучите МК. Советую взять макетку с дырками и напаять туда МК, к его выводам подключить PLS гребенки, несколько светодиодов и кнопок. С таким набором удобно отлаживаться и учиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, BARS_ сказал:

Вот это правильный подход. Тогда для начала сделайте именно аналоговую часть, а параллельно изучите МК. Советую взять макетку с дырками и напаять туда МК, к его выводам подключить PLS гребенки, несколько светодиодов и кнопок. С таким набором удобно отлаживаться и учиться.

Я одну платку видел - tsop32 to dip32.

Я понимаю что задумка детская. Но я не могу понять как такое и рабочее:

#define PORT_Strob_Signal_E PORTC
#define PIN_Strob_Signal_E 1

/*
 *указываем порт МК, к которому подключена линия RS
 *указываем номер бита порта МК, к которому подключена линия RS
 */
#define PORT_Strob_Signal_RS PORTC
#define PIN_Strob_Signal_RS 0


Сделать таким.


#define PORT_Strob_Signal_E PORTC.0
#define PIN_Strob_Signal_E 0

#define PORT_Strob_Signal_RS PORTC.1
#define PIN_Strob_Signal_RS 1

///////////////////////////////////////////////////////////////////////

#define PORT_Strob_Signal_E PORTC.2
#define PIN_Strob_Signal_E 2

#define PORT_Strob_Signal_RS PORTC.3
#define PIN_Strob_Signal_RS 3

 

Я пробывал переменные продублировать и переименовать (топорный способ) - но компилятор ругался "переменные не задикларированны" (include stdio.h был включен ну сами библиотеки перебраны).

От того я ко всем и пристал с этим define.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529

Потому я и говорю, начните с самого начала, без дефайнов и т.п. (хотя довольно странно, что зная программирование вы не знаете о дефайнах).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alexeyslav    575

Для термопар используй MAX31855 - там всё и компенсация холодного спая и встроенный АЦП - ты только по SPI забираешь готовое значение в цифре.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 214

У вас ошибка в наименованиях. Первая запись 
#define PORT_Strob_Signal_RS PORTC
правильная, просто именует ВЕСЬ порт С (везде ниже по тексту программы PORT_Strob_Signal_RS заменит на описанное в header-файле имя порта PORTC). Следующая строка делает то же самое, заменяет "человекопонятную" запись PIN_Strob_Signal_RS на номер бита в порту.

Во втором примере запись
#define PORT_Strob_Signal_E PORTC.0
заменяет PORT_Strob_Signal_E  на имя НЕ всего порта, а только конкретной ножки (бит 0).

Я такими дефайнами предпочитаю не пользоваться, только если использую чужую библиотеку.
Начинаю проектирование с разводки печатной платы, развожу порты так, как получается удобнее (дорожки короче, не пересекаются). На листочек бумаги выписываю какие ножки порта с чем соединяются. Например
PORTB.0 = CLK
PORTB.1 = DATA
PORTB.2 = CS
PORTB.3 = кнопка "стрелка влево"
PORTB.4 = кнопка "стрелка вправо"
PORTB.5 = кнопка "Ввод"
PORTA.6 = выход ШИМ
и пользуясь этой шпаргалкой ставлю в нужные места программы сразу правильные имена ножек, не загромождая код дефайнами и нестандартными именами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Sergey-Ufa    508
9 часов назад, Valerius_San сказал:

есть еще такое как "инертное нагревание" - ты его выключил, а он все равно топит

Для этого существует ПИД-регулирование. Если использовать регулирование температуры по принципу "499 градусов - включил нагрев, 500 градусов - выключил", то неизбежны колебания температуры из-за тепловой инерции печи. А при выходе на режим отклонения температуры выше и ниже установленной будут вообще очень большие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alexeyslav    575
Цитата

ставлю в нужные места программы сразу правильные имена ножек

Весело у вас... вот именно чтобы небыло такой фигни и придумали дефайны. Вы можете называть ножки ПОНЯТНЫМ способом и потом один раз дефайном слинковать с реальной ножкой. Потом что-то поменяется, переназначить ножку можно изменением одной строки а не шерстить весь исходник в поисках всех мест где используется ножка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 214

У меня устройства в единичном экземпляре, для изготовления серии (или программы на заказ) я не только дефайны использую, а ещё и комментарии в код добавляю :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529

Так один раз прописать дефайны куда удобнее, чем весь код по шпаргалке смотреть. Особенно, когда программа большая или её надо отредактировать через n-е количество времени...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alexeyslav    575

Не зависит это от серийности. Не сочиняете же элементарный код каждый раз для нового проекта с нуля? Поэтому наверняка уже имеются заготовки HAL на всякий случай, а там без дефайнов туго будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 214

Да так получается, что заготовки разве что библиотек  SPI, I2C да UART. Даже динамическую индикацию семисегментников сам пишу, потому как разводка платы и распиновка индикаторов непредсказуемая (какой под руку попался - на том и делаю). То есть может получиться так, что выводы сегментов могут быть на двух разных портах в случайном порядке, как и выводы общих анодов(катодов). Чем чьё-то приспосабливать, быстрее новое написать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 01.10.2017 в 21:50, BARS_ сказал:

хотя довольно странно, что зная программирование вы не знаете о дефайнах

А вы не подскажите

for(int i = 1; i < res;i++)

    {
       printf(buff);
    }

Это правильный кусок кода?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, BARS_ сказал:

Смотря для чего.

Да не для чего. Для всего.
Задавать переменную "внутри" - на Си не будет работать.
Потому-что это чистый  С++.

Вот и с дефайном я запутался.
Просто в С++ библиотек и ихнего функционала в разы больше.
Так что ничего странного.

Меня не интересует язык программирования (я давно заметил что у каждой "вау-пиздюльки" своя религия), меня интересует как мою писанину поймет контролер.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529

Я потому и спросил, для чего он верный, т.к. в Си так не пишется. Ну и не обязательно писать на Си. Есть Basic, Ассемблер. А дефайн он в любом ОО языке дефайн. Я же уже писал, разбирайтесь последовательно, а не пытайтесь понять готовую прошивку. На самом деле достаточно разобраться с одним МК, а потом спокойно переходить на любой другой, все будет похоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Извините за нескромность, но есть еще один вопрос на уточнение:

Сам микроконтролер понимет сравнение типа - 
0b01101101 >> 0b00111111 - двоичное 

или

0x6D >> 0x3F - шеснадцитеричное?

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

То что в протеусе и компиляторах пройдет все гладко,  я не сомневаюсь.
А вот как сам камень отреагирует на инструкции сравнения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529

Микроконтроллер ничего не понимает, главное, чтобы понял компилятор, тогда он сможет рассказать МК, что и как сделать. Только почему у вас сдвиг стал вдруг сравнением?..

Изменено пользователем BARS_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 минуты назад, BARS_ сказал:

Микроконтроллер ничего не понимает, главное, чтобы понял компилятор, тогда он сможет рассказать МК, что и как сделать. Только почему у вас сдвиг стал вдруг сравнением?..

А фиг его знет. На автомате.

То есть за простое сравнивание можно не переживать!!
Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 214

Ты не поверишь, но микроконтроллер ни одного языка программирования не понимает - на Си, ни Паскаля, ни Ассемблера... Исключительно машинные коды. И вот как сумеет компилятор перевести с человекопонятного языка в машкод - так и будет МК работать.
Самый низкоуровневый из "человеческих" языков - ассемблер. И в нём есть команда сравнения байтов. И ей глубоко по барабану, будет ли байт в листинге программы записан: как бинарный или как шестнадцатиричный, да хоть десятичный или троичный. Физически-то он всё равно будет в виде восьми битов на шине данных внутри АЛУ.

PS А теперь головоломное: знаешь, как физически происходит сравнение в мозгу АЛУ МК? Из первого значения вычитается второе и смотрим на бит Z (zero = ноль) в слове состояния процессора ;) Ну то есть если сравниваемые операнды равны - то получим ноль в результате. Если не получим - значит не равны.

Изменено пользователем oldmao

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ребята.

Меня все время мучает один вопрос.
Для чего в интернете (везде) есть такие приметы "прям няшные" даже код существует с файлом HEX (но это ко всем языкам программирования).
Я сколько программировал, я постоянно вижу ошибки.

Берем логически:
Пишете пример в Proteus-е, ложите HEX, и еще исходник даете.
А открываеш его в компиляторе, компилируеш а тут "хрен вам".
Если пример с HEX работает правильно. А код откомпилироваться не может (ошибки).
Значит человек целенаправленно вводит в заблуждение, делая рабочий код - не рабочим. 

Это вы поднимаете свое величее? Или вы хотите показать что вы такие умные а все вокруг дебилы?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...