Виж темите без отговор | Виж активните теми
Дата и час: Чет Апр 25, 2024 7:34 pm
Програматор за сушилня с PIC16f1937
Автор |
Съобщение |
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8902 Местоположение: Разград
|
Re: Програматор за сушилня с PIC16f1937
Вобще не се разминава даже.
Значи BusIn ти ги вкарва като две думи а не като 4 байта. Горните байтове на думите са си *256 - значи от тая сметка няма нужда. X / 16384 * 100 става Х * 100 / 16384 или Х / 163.84 - това е алгебра от началните класове. За температурата е същото. Направи го както съм ти го написал.
Ако те притеснява това за температурата - като направиш два шифта на цялата дума се получава точно това което трябва.
Сега ти видях грешката за температурата. Значи ... първо умножаваш старшия байт - ок - получава се някаква стойност - ама после защо я OR-ваш с долния байт and-нат с $FC ? С това андване ти само нулираш младшите два бита а трябва изцало да ги махнеш - с други думи да разделиш младшия байт на 4 или еквивалента е два шифта на дясно. А с OR-ването съвсем омешваш крайния резултат. Както казах ефекта от шифтването на цялата дума 2 бита надясно е точно това което ти трябва.
|
Вто Ное 18, 2014 10:41 pm |
|
|
bobi534
Ранг: Новодошъл
Регистриран на: Сря Юли 30, 2014 9:29 pm Мнения: 116 Местоположение: Пловдив
|
Re: Програматор за сушилня с PIC16f1937
Ето за това пасажче изразих съмнение.. OR-ването го правя за да събера двата байта - младши и старши. С предложението за шифтване надясно съм съгласен, но въпреки че го няма системата работи. И така...след дълги измервания и разни "упражнения" по програмния код се установи, че основната причина за двата ми последни проблема е нещо много тъпо - използвам перфорирано капаче от предишния датчик за влага и с него съм покрил новия I2C датчик. Да, обаче се оказа, че това капаче прави голяма "сянка" за преминаващия покрай него въздух - това първо. Второ - в програмния код, по принцип, в началото на всеки програмен цикъл от по 80 секунди се отваря магнетвенил за време от 20 секунди, който пропуска външен въздух /за измерване на външната влажност/. Е, аз при всяко ново стартиране на системата хващам точно този момент - външен въздух смесен с частично "засенчен" вътрешен, при което температурата се стопира на около 50 градуса. Проблемът с влажността е по-комплициран: Първо , видях, че при всяко първо мерене, въпреки че има зададено време от 60mS, датчика не отчита правилно всеки първи изпратен байт, т.е. губи се първия най-старши бит още преди да бъдат отнети двата статус бита. Това ме накара да преработя кода така, че да има две последователни прочитания на датчика, като се обработва само второто четене. Второ, предполагам, че и влажността е била някаква "вътрешно/външна". След като махнах перфорираното капаче и околните пласмасарии около датчика, всичко си дойде на мястото - температурата си дойде на 80 градуса, а влажността смятам, че вече си следва нормалния ход.
|
Сря Ное 19, 2014 12:54 am |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8902 Местоположение: Разград
|
Re: Програматор за сушилня с PIC16f1937
Ти май не четеш какво пиша?
Направи го както ти го написах - дори не си направи труда да копнеш 5 реда...
Значи - проблема ти с четенето е, че не си прочел хубавичко как точно работи I2C протокола. Има си опредлена последователност от "служебни" байтове които са задължителни. С тая команда дето я ползваш, тая последователност не се изпълнява много точно. За това си има команда в библитеката за I2C която прави цялата последователност както си му е реда.
Второ - караш ме сега да ти разписвам какво точно ти се получава с твойта сметка за температурата:
ако имаш примерно следния отговор в битове : горен байт : 0011 1100 долен байт : 1111 0000
ти правиш за горния байт: 60 * 64 = 3840 (0000 1111 0000 0000 в битове) за долния байт : 1111 0000 & 1111 1100 = 1111 0000 и като ги or-неш двете става : 0000 1111 1111 0000 = 4080 десетично а трябва да е 3900.
Ясно са ти го написали в даташита че е ляво подравнен резултата - за да вкарат двата статус бита накрая - това ще рече, че нямаш нужда от някакви сложни сметки - просто си изчиташ двата статус бита и шифтваш целия резултат два пъти надясно - колко по простичко да ти го обясня - не знам вече...
|
Сря Ное 19, 2014 8:36 am |
|
|
bobi534
Ранг: Новодошъл
Регистриран на: Сря Юли 30, 2014 9:29 pm Мнения: 116 Местоположение: Пловдив
|
Re: Програматор за сушилня с PIC16f1937
Ясно, време е за отговори.... Cekins, както винаги досега, и сега си напълно прав, и аз не бих си позволил да споря за неща, които не са ми съвсем ясни. Ще преправя кода, както предлагаш, защото виждам, че, както се изразих "системата работи", но температурата няма как да е 80 градуса, а вероятно е по-малко, заради неизчистените десни недефинирани битове. По въпроса за командите I2CIN и BUSIN, може би бях подведен от готовия код, който ползвах и от това http://www.protonbasic.co.uk/showthread.php/64744-I2Cin-vs-BUSin, където пише това Тъй като ползвам I2C PIC и хардуерните му линии сметнах, че няма да има проблем, но може и да бъркам, и в тази връзка те моля да ми изясниш какви са допълнителните байтове, за които говориш при протокола на I2C. Виждам, че BUSIN е по-универсална, но в моя случай кое налага да я ползвам? ..И още нещо.. човек понякога трябва да бъде оставен да сгреши за да си научи урока
|
Сря Ное 19, 2014 10:34 am |
|
|
bobi534
Ранг: Новодошъл
Регистриран на: Сря Юли 30, 2014 9:29 pm Мнения: 116 Местоположение: Пловдив
|
Re: Програматор за сушилня с PIC16f1937
Cekins, преработих процедурата MERENE, със сметките и командите, които ми предложи. Ще ползвам: Не ми стана ясно, обаче, 1. Не може ли вместо Humid.byte0=Humid1.byte0 & $3F да пиша просто Humid = Humid & $3F2. Как HBUSIN/HBUSOUT прави разлика между различните I2C канали в ПИК-а - в случая първи и втори канал? Вярно, задал съм , ама ако ползвам и двата канала? След като си отговоря на по-горните въпроси, довечера ще пробвам новия код и ще пиша.
|
Сря Ное 19, 2014 2:58 pm |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8902 Местоположение: Разград
|
Re: Програматор за сушилня с PIC16f1937
Ами по подразбиране HBusIn/Out ползва MSSP1. Когато ползваш хардуерния модул, няма нужда да дефинираш пиновете - те пак са си по подразбиране. Когато компилатора срещне някъде в кода HBusIn/Out си прави автоматично инициализация на модула. Единствено може да настроиш скоростта.
За humid.byte0 - не ми се гледа сега какво съм писал, ама съм сбъркал ако съм писал byte0 - трябва да е Byte1 - сори. А ако напишеш само Humid = Humid & $3F ще остане малдшия байт анднат с $3F а старшия ще стане 0. Като зададеш конкретен байт от думата, работи само върху него. Същия ефект има и ако напишеш HumidH - байта така се дефинира в асемлатора. Аз си го пиша byteX така после ми е по-лесно да си чета кода. По същия начин можеш да достъпваш байтове от DWord и Float. Това си го пише в хелп-а как става.
|
Сря Ное 19, 2014 7:19 pm |
|
|
bobi534
Ранг: Новодошъл
Регистриран на: Сря Юли 30, 2014 9:29 pm Мнения: 116 Местоположение: Пловдив
|
Re: Програматор за сушилня с PIC16f1937
Ами аз ползвам MSSP2, но ще пробвам каква ще е реакцията при това положение. Докато тършувах из нета попаднах на изказването на Админа на http://www.protonbasic.co.uk/showthread.php/70827-MSSP1-and-MSSP2 и по-точно: Това за мен означава, че варианта за команда HBUSIN/OUT поне засега отпада..
|
Сря Ное 19, 2014 7:58 pm |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8902 Местоположение: Разград
|
Re: Програматор за сушилня с PIC16f1937
Ами то може и сам да си разпишеш директно с модула, ама е малко тегаво и ще трябва хубаво да прочетеш как работи I2C. То не е зле по принцип да си го прочетеш де
|
Сря Ное 19, 2014 8:22 pm |
|
|
bobi534
Ранг: Новодошъл
Регистриран на: Сря Юли 30, 2014 9:29 pm Мнения: 116 Местоположение: Пловдив
|
Re: Програматор за сушилня с PIC16f1937
След дългите среднощни битки установих, че операторът HBUSIN не работи при комуникация с I2C Slave устройства с номер на I2C канала по-голям от 1 /при PIC18F45K22 - 2канала, аз ползвам втория/. С оператор BUSIN/OUT и I2CIN/OUT проблеми няма. Особеното, според мен е това, че преди всяко четене на данни трябва да имаме WRITE /UPDATE/ на Slave устройството. По предложение на CEKINS използвах оператор BUSIN за четене като данните ги вкарвам в две думи: Температурата в сушилнята си дойде на мястото - 80градуса по дисплей и 82градуса по цифров уред. Прави впечатление, обаче, голямата инертност в отчитане на температурата/влажността, което може би е така поради закрития тип датчик / в кутийка/ и се замислям дали не е по-добре да се ползва датчик от открит тип.
|
Чет Ное 20, 2014 10:42 am |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8902 Местоположение: Разград
|
Re: Програматор за сушилня с PIC16f1937
Такааа... ако инертността не е голям проблем в случая ти препоръчвам даже още повече да го закриеш... Някакъв вид прахов филтър или каквото ще да е такова. Аз за промишлени приложения ползвам обезшумители за пневматични разпределители - пресовка от бронзови топчета. Колкото по добре е защитен датчика от всякакви видове частици, толкова повече време ще си го позлваш безпроблемно. Физическия датчик за влагата е променлив чип кондензатор и е много чувствителен на всичко - прах, мазно, кисело - абе всичко. Колкото по-малко досег има с такива работи, толкова повече ще работи.
|
Чет Ное 20, 2014 12:22 pm |
|
|
bobi534
Ранг: Новодошъл
Регистриран на: Сря Юли 30, 2014 9:29 pm Мнения: 116 Местоположение: Пловдив
|
Re: Програматор за сушилня с PIC16f1937
В моя случай инертността е важна, защото в началото на програмата, по време на темпериране, температурния датчик отчита примерно 35 градуса, а в барабана вече е 65 градуса! Когато датчика отчете 80 градуса в барабана вече е над 95! Днес издърпах датчика по-навън от вътрешния обем на ел.вентила и пак ще пробвам, но си мисля, че не е лошо да има допълнителен - контактен или съпротивителен датчик, който да изключва подгрева при надвишаване на "абсолютния" /условно казано/ температурен максимум за сушилнята. Ето как съм го скрил във вентила - втора и трета снимка - /това е мястото на повредения оригинален аналогов капацитивен датчик HS1101 от първа снимка/. Евентуално някаква мрежичка пред него ще сложа или ще ползвам капачето на оригиналния датчик. Забележка: Който ще ползва такъв датчик - SMTHS08I да внимава със странично изведените изводи - позлатени полуотвори - защото са суперкрехки и със съвсем леко усилие изскачат навън и се късат от платката
|
Чет Ное 20, 2014 12:34 pm |
|
|
bobi534
Ранг: Новодошъл
Регистриран на: Сря Юли 30, 2014 9:29 pm Мнения: 116 Местоположение: Пловдив
|
Re: Програматор за сушилня с PIC16f1937
Здравейте колеги, знаещи и можещи! Моята сушилня ме изостави преди два месеца и ще трябва отново да се поборим с нея! Вдигна температура и се оказа, че датчика за влага/температура си е заминал. За лош късмет такъв не намерих и затова реших да продължа с AM2320, поръчан от Aliexpress. Тук, обаче, отново ударих на камък, защото протоколите през I2C за двата датчика съществено се различават. За SMTHS08I изпращаме команда "Update" и четем това, което върне датчика, но при AM2320 нещата ми изглеждат доста по-сложни. Бих помолил някой, който ползва такъв или сходен по параметри датчик и работи на Proton Basic /визирам Cekins/ или подобен Basic-ов компилатор да "удари" едно рамо в разработване на кода. Досега ползвах този код: Dim Answer1 As Word ' store manipulated byte Dim Answer2 As Word Dim humidhigh As Answer1.Byte1 Dim humidlow As Answer1.Byte0 Dim temphigh As Answer2.Byte1 Dim templow As Answer2.Byte0 Dim Chipread As Byte ' address to read from HYT Dim Chipwrite As Byte ' address to write to HYT Dim Humidity As Float ' to get a xx.yy result Dim Temperatura As Float ' to get a xx.yy result MERENE: ; SENSOR SMTHS08I ' Main Chipwrite = Chipaddr Chipwrite = Chipwrite << 1 ' address for write based on Chipaddr Chipread = Chipaddr Chipread = Chipread << 1 Chipread = Chipread | $01 I2COut SDA, SCL, Chipwrite, [$00] DelayMS 100 BusIn Chipread, [Answer1,Answer2] ' Calculate humidity humidhigh = humidhigh & $3F Answer2 = Answer2 >> 2 Humidity = Answer1 / 163.84 Temperatura = Answer2 /99.3 Temperatura = Temperatura - 40 Return Прилагам pdf-и на двата датчика: https://cdn.sos.sk/productdata/de/2d/72c7acf5/smths08i.pdfhttps://akizukidenshi.com/download/ds/aosong/AM2320.pdf
|
Пет Юни 09, 2017 2:54 pm |
|
|
bobi534
Ранг: Новодошъл
Регистриран на: Сря Юли 30, 2014 9:29 pm Мнения: 116 Местоположение: Пловдив
|
Re: Програматор за сушилня с PIC16f1937
До сега използвах операторът "I2COut" , но в инструкцията на AM2320 e посочено, че за комуникация се използва протокол MODBUS, който е с по-специален фрейм, например: START + (I2C address + W) + function code (0x03) + start address + number of registers + STOP , а в PROTON Basic няма такъв оператор, който ползва този протокол. Мисля, че "I2COut" не може да се ползва в случая! Как мислите? Има ли благоприятен вариант в случая?
|
Нед Юни 18, 2017 3:30 pm |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8902 Местоположение: Разград
|
Re: Програматор за сушилня с PIC16f1937
Е няма проблем. Ама по-добре ползвай командата BusOut (HBusOut за хардуерния I2C модул) като за BusOut трябва да си сложиш Declare SDA_PIN, Declare SCL_PIN и Declare Bus_bitrate. Може да си укажеш и да не ползваш пулъп в софтуерен режим. После си нареждаш командата както си искаш. В твоя случай ще стане : , след което вероятно веднага трябва да четеш с BusIn. С тези команди няма нужда да пипаш R/W бита в първия байт - компилатора сам си го оправя.
|
Нед Юни 18, 2017 4:53 pm |
|
|
bobi534
Ранг: Новодошъл
Регистриран на: Сря Юли 30, 2014 9:29 pm Мнения: 116 Местоположение: Пловдив
|
Re: Програматор за сушилня с PIC16f1937
Мерси! При първа възможност ще пробвам. Може би ще мога да ползвам BUSOUT и така:
BStart ' Send a Start condition BusOut 0xB8 ' Send of the address + Write command BusOut 0x03 ' Send the function Code BusOut 0x00 ' Send the start address BusOut 0x04 ' Send the number of registers BStop ' Send a Stop condition
|
Сря Юни 21, 2017 12:17 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|