• Объявления

    • admin

      Внимание! Постить только по теме "электроника"   02.09.2016

      Внимание! В данном разделе разрешено создавать только темы связанные с электроникой. Для проблем с ПО не связанных с электроникой существует специальный раздел.
      Нарушители будут забанены на 5 суток!
SDD39

Программа подбора комбинаций элементов

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

SDD39    126

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

В чём её суть.  Ну к примеру нам надо спаять мост Винна. Для него , как известно нужны пары деталей конденсаторов и резисторов с желательно близкими значениями. Особенно трудно обычно подобрать конденсаторы но не в этом сейчас суть.  Так вот , пускай у нас есть несколько десятков  конденсаторов  и мы можем соединив параллельно по два конденсатора получить нужный номинал . Но при этом имеется вероятность , что подобрав пары  должным образом , мы можем получить весьма низкое отклонение  подобранных  пар , соединённых последовательно или параллельно.  Так вот , если к примеру у нас имеется 31 промеренный конденсатор (что я сделал и занеёс в таблицу для МБМ конденсаторов 0.1 мкФ , чтобы иметь практические данные это не так уж долго и вполне осуществимо на практике)  , то количество только возможных не повторяющихся  комбинаций будет составлять (31*31 - 31)/2= 465 . Просчитать  такое  количество  в ручную , отсеить невозможные комбинации где один и тот же конденсатор присутствует более одного раза , да ещё выбрать наилучший вариант задача компьютера , а не человека.   И он справляется с ней  за секунду.

По скольку в программировании я не очень силён то какой то графической оболочки у меня нет (я вообще пока не знаю как это делается). Так же не придумал способа ввода данных в программу. Наверно надо будет попробовать как то делать это из текстового файла. Результаты программа уже выводит на экран и создаёт текстовый файл Rezalts.txt с результатами вычислений. Хотелось бы что бы опытные программисты взглянули на мой труд и указали на недочеты , ошибки и возможные решения в лучшем направлении. В общем буду благодарен за незлобные указания моих ошибок . Прилагаю исходник на Си и сопутствующие файлы данных и результатов в архиве . А так же скриншот результатов вывода на экран.

 

 

 

 

   

 

 

 

 

  

 

а.png

Rezalts.rar

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


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

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

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

  • x
    мм
Заказать Получить купон на $5.00
SDD39    126

Сегодня попробовал распаять конденсаторы в группы и практически померить точность побора . Из двух конденсаторов спаивается один большой конденсатор . Его ёмкость получается  в среднем около 260 нФ . Так вот разность ёмкостей между большими конденсаторами  в среднем  не более 500 пФ получилась . У лучшей пары больших конденсаторов около 300пФ . У пары худших не более 1.5нФ.  Поражает то , что из 31го , практически мусорного конденсатора не при делах  осталось только три. И не смотря на то , что точность   самих конденсаторов практически ни какая до +50% разброса от номинала. При этом удалось подобрать пары больших конденсаторов отличающихся менее чем на пол процента. А это уже прецизионная точность для весьма дорогих конденсаторов. 

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


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

вертится только АдЫн вопрос нефига все это...

47 минут назад, SDD39 сказал:

что точность   самих конденсаторов практически ни какая до +50% разброса от номинала

это грит только о хреновости ТКЕ конденсаторов и применение их в мосте Винна, глупость не сусветная

если уж так хотелось подобрать пару для этого всего-то нужен был  мост Уитстона

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


Ссылка на сообщение
Поделиться на других сайтах
SDD39    126
4 часа назад, IMXO сказал:

это грит только о хреновости ТКЕ конденсаторов

О ТКЕ это точно не говорит. Только о точности их изготовления. 

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


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

Вот такая на данный момент получилась  уже "функциклирующая" программа  program.exe .Она попросит ввести имя файла данных. Вводим data_0.txt , для вывода результатов предыдущего примера.

Этот файл-шаблон  data_0.txt  , можно создать второй программой data.exe . В нём довольно подробно указано что и для чего. И его можно изменить  в текстовом редакторе. Так же можно изменить и его имя. Потом надо будет просто ввести его в программе  program.exe .В результате работы   program.exe  получаем вывод результатов на экран и созданный ей файл Rezalts.txt с теми же результатами обработки данных. 

Так же в архиве есть ещё два файла данных data_1.txt data_2.txt для обработки в качестве примера. А так же файл  data_0.txt , хотя его можно и просто создать. 

 

Program.rar

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


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

Подправил некоторые места , исправил некоторые ошибки , добавил контроль ошибок файла данных. 

base6.rar

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


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

В интернете много схем резистивных УНЧ класса А ,  типа такого  http://cxem.net/video.php?id=669 .

В большинстве своём рассчитаны они не оптимально с энергетической стороны. И имеют КПД ниже достижимого. А он и так ниже 10% , даже у оптимально рассчитаного. Дпнная простая програмка позволяет немного исправить такое положение дел . И может служить ориентиром. В неё нужно ввести сопротивление нагрузки , напряжение питания , и минимальное напряжение на транзисторе при котором он сохраняет свои усилительные свойства. Для приведённого выше случая нагрузка 16 Ом , питание 12 Вольт , а минимальное напряжение для составного транзистора можно пркдположить в 1,5 Вольт . Дробные цифры надо вводить в программу с помощью запятой. Результат её работы на скриншоте , сама она в архиве.   

UNC A.png

UncA.rar

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


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

немного дополнил программу УНЧ А.

UncA.rar

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


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

Исправил ошибку с выводом по флагу Р

 

 

program1.rar

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

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


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

Молодец! Дерзай!

Если можно, пересядь на делфи. Смотреть на ч/б экран не комильфо.

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


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

@солар

Спасибо!  

Мне пока что Си бы изучить и не забыть.))

Программа LCFR расчёта колебательного контура .

К примеру мне надо рассчитать колебательный контур на 50 Килогерц с реактивными сопротивлениями  катушки и конденсатора 10 Ом.

Ввожу строку 50Kf10r  и программа рассчитывает результат. Этот же пример на скрине.

lcfr.png.e66b9de165354d3c3abc64ca9cddc39c.png

 Возможны и все остальные комбинации двух вводных параметров.

LCFR.rar

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


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

Программа расчёта параллельных резисторов. 

 

Rrr.rar

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: ximik_se
      Всем привет.

      Решил сделать небольшую домашнюю метеостанцию.

      Есть приемник с экраном, куда выводится инфа (построено на ATMEGA 328P) и есть передатчик, который посылает инфу по возудху (построено на ATtiny85).

      В передатчике использую обычные DHT22. В принципе качество чуть ниже среднего. Но главный недостаток - порой сбоит, присылая данные в 2 раза больше предидущих, потом опять приходит в себя. и так повторяется постоянно.

      При этом время между измерениями не меньше 20 сек.

      В общем заказал я себе с Китаюшки более точные датчики - 

      CJMCU-1080 HDC1080
      Вещица прекрасная, но общается по I2C.

      А библиотеку рабочую под нее я смог найти только одну "ClosedCube_HDC1080.h" и никаких модификаций под ATtiny я найти не смог.

      Для ее работы соответственно нужен Wire.h

      В общем решил я его поковырять самостоятельно, хоть и не прогер. Забрался во внутренности ClosedCube_HDC1080.cpp и везде заменил Wire на TinyWireM (некий аналог Wire для ATtiny).

      И у меня даже получилось считывать валжность, но вот вместо температуры приходит гадость. Ибо при компиляции Arduino IDE ругалась на строку (я ее ниже в коде закомментировал)
      uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } Ошибку пишет следующую:

      \ClosedCube_HDC1080.cpp: In member function 'void ClosedCube_HDC1080::heatUp(uint8_t)':

      \ClosedCube_HDC1080.cpp:81:13: error: 'class USI_TWI' has no member named 'readBytes'

      TinyWireM.readBytes(buf, (size_t)4);
      Может есть ребята более понимающие в коде и сумеющие победить эту проблему, чтобы и температуру этот датчик смог передавать через ATtiny85.

      Вот полный текст файла ClosedCube_HDC1080.cpp (уже замененный ну и строчка закоментирована):
      #include <TinyWireM.h> #include "ClosedCube_HDC1080.h" ClosedCube_HDC1080::ClosedCube_HDC1080() { } void ClosedCube_HDC1080::begin(uint8_t address) { _address = address; TinyWireM.begin(); // Heater off, 14 bit Temperature and Humidity Measurement Resolution TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(0x0); TinyWireM.write(0x0); TinyWireM.endTransmission(); } HDC1080_Registers ClosedCube_HDC1080::readRegister() { HDC1080_Registers reg; reg.rawData = (readData(CONFIGURATION) >> 8); return reg; } void ClosedCube_HDC1080::writeRegister(HDC1080_Registers reg) { TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(reg.rawData); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(10); } void ClosedCube_HDC1080::heatUp(uint8_t seconds) { HDC1080_Registers reg = readRegister(); reg.Heater = 1; reg.ModeOfAcquisition = 1; writeRegister(reg); uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } reg.Heater = 0; reg.ModeOfAcquisition = 0; writeRegister(reg); } float ClosedCube_HDC1080::readT() { return readTemperature(); } float ClosedCube_HDC1080::readTemperature() { uint16_t rawT = readData(TEMPERATURE); return (rawT / pow(2, 16)) * 165 - 40; } float ClosedCube_HDC1080::readH() { return readHumidity(); } float ClosedCube_HDC1080::readHumidity() { uint16_t rawH = readData(HUMIDITY); return (rawH / pow(2, 16)) * 100; } uint16_t ClosedCube_HDC1080::readManufacturerId() { return readData(MANUFACTURER_ID); } uint16_t ClosedCube_HDC1080::readDeviceId() { return readData(DEVICE_ID); } uint16_t ClosedCube_HDC1080::readData(uint8_t pointer) { TinyWireM.beginTransmission(_address); TinyWireM.write(pointer); TinyWireM.endTransmission(); delay(9); TinyWireM.requestFrom(_address, (uint8_t)2); byte msb = TinyWireM.read(); byte lsb = TinyWireM.read(); return msb << 8 | lsb; }  
    • Автор: 55nlo
      Написать программу Асм атмега 1284.
      Фрагмент: после команды считать рабочий регистр (в котором может появиться число от 1 до 50) каждому числу  соответствует 4 значения  (это таблица) их нужно загрузить в четыре рабочих регистра для дальнейшей обработки)
       Где лучше хранить таблицу?
      Пример: считали 48  числа 5; 8; 21; 25
                      Считали 31 числа 4;  9; 11; 35
       
    • Автор: VisualNT
      Доброго времени суток!
      Может кто-нибудь объяснить, в чём смысл и преимущества использования специализированных программаторов для STM32 типа ST-Link и клонов, работающих по интерфейсам SWD/JTAG, если записать флеш можно прямо по UART/ISP или быстрее по USB (при его наличии)?
      Я так понимаю, что программаторы, кроме записи в память, ещё умеют выполнять отладку - и это их единственное отличие.
      А если отладка не нужна? Вернее, часто ли она используется при написании каких-нибудь маленьких прикладных программ типа реле времени? Я собираюсь развести свою печатную плату для STM32F107, а потом хочется поэкспериментировать с STM32F407ZGT - в них в обоих есть USB интерфейс, они оба есть в списке поддерживаемых USB DFU (согласно AN 3156). Но на форуме я прочитал, что пока все сидят на дискавери, в основном из-за того, что в ней есть встроенный программатор ST-LINK прямо на плате, но почему его наличие так важно и не заменяется возможностью программирования по UART/ISP или по USB? Есть ли какое-либо отличие кроме возможности отладки? Может быть, как и в случае со фьюзами у AVR, у STM32 есть какие-то функции/настройки, которые можно использовать/изменять только программатором ST-LINK?
      И да, разве скорость программирования по USB будет существенно ниже, чем по тому же JTAG или SWD?
      Заранее спасибо за ответы! Заранее предупрежу, чот с микроконтроллерами я раньше работал, но вот от ST что-то более-менее делал только на STM32F030...
    • Автор: Дуч
      Здравствуйте.
      Есть два программатора Pickit3. Один из них китайский клон, другой оригинал от Microchip.
      Китаец стирает калибровочную константу Pic12f629, а оригинал прошивает и проблем нет. Подскажите причину стирания константы?
    • Автор: Stellaris
      Доброго здравия всем участникам.
      Помогите разобраться.Прибор,управляемый контроллером LM3S5749,не хочет работать,требуя ТО, провести которое не представляется возможным.
      Уважаемые форумчане, подскажите как разобраться с этой проблемой. Перевести время назад с вторичного прибора не получается, может сделать сброс счётчика часов наработки ?,но из-за маленького опыта боюсь снести всю программу. Выручайте,помогите добрым советом.