Отговори на тема  [ 241 мнения ]  Отиди на страница Предишна  1 ... 13, 14, 15, 16, 17  Следваща
Програматор за сушилня с PIC16f1937 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 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
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Юли 30, 2014 9:29 pm
Мнения: 116
Местоположение: Пловдив
Мнение Re: Програматор за сушилня с PIC16f1937
Цитат:
Temperatura = word2 / 99.3
Temperatura = Temperatura - 40

Ето за това пасажче изразих съмнение.. OR-ването го правя за да събера двата байта - младши и старши. С предложението за шифтване надясно съм съгласен, но въпреки че го няма системата работи.

И така...след дълги измервания и разни "упражнения" по програмния код се установи, че основната причина за двата ми последни проблема е нещо много тъпо - използвам перфорирано капаче от предишния датчик за влага и с него съм покрил новия I2C датчик. Да, обаче се оказа, че това капаче прави голяма "сянка" за преминаващия покрай него въздух - това първо.
Второ - в програмния код, по принцип, в началото на всеки програмен цикъл от по 80 секунди се отваря магнетвенил за време от 20 секунди, който пропуска външен въздух /за измерване на външната влажност/. Е, аз при всяко ново стартиране на системата хващам точно този момент - външен въздух смесен с частично "засенчен" вътрешен, при което температурата се стопира на около 50 градуса.
Проблемът с влажността е по-комплициран:
Първо , видях, че при всяко първо мерене, въпреки че има зададено време от 60mS, датчика не отчита правилно всеки първи изпратен байт, т.е. губи се първия най-старши бит още преди да бъдат отнети двата статус бита. Това ме накара да преработя кода така, че да има две последователни прочитания на датчика, като се обработва само второто четене.
Второ, предполагам, че и влажността е била някаква "вътрешно/външна". След като махнах перфорираното капаче и околните пласмасарии около датчика, всичко си дойде на мястото - температурата си дойде на 80 градуса, а влажността смятам, че вече си следва нормалния ход.


Сря Ное 19, 2014 12:54 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 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
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Юли 30, 2014 9:29 pm
Мнения: 116
Местоположение: Пловдив
Мнение Re: Програматор за сушилня с PIC16f1937
Ясно, време е за отговори....
Cekins, както винаги досега, и сега си напълно прав, и аз не бих си позволил да споря за неща, които не са ми съвсем ясни.
Ще преправя кода, както предлагаш, защото виждам, че, както се изразих "системата работи", но температурата няма как да е 80 градуса, а вероятно е по-малко, заради неизчистените десни недефинирани битове.
По въпроса за командите I2CIN и BUSIN, може би бях подведен от готовия код, който ползвах и от това http://www.protonbasic.co.uk/showthread.php/64744-I2Cin-vs-BUSin, където пише това
Цитат:
when the pic has HARDWARE supported I2C use I2CIN / OUT, if it aint, use busin out etc which is a software implementation of the hardware module.
This is a general guide.
IF your pic does not support hardware I2C, then you MUST use bus in etc, if you need I2c, however, you may also choose to use busin out even IF your pic supports it at a hardware level...

Тъй като ползвам I2C PIC и хардуерните му линии сметнах, че няма да има проблем, но може и да бъркам, и в тази връзка те моля да ми изясниш какви са допълнителните байтове, за които говориш при протокола на I2C. Виждам, че BUSIN е по-универсална, но в моя случай кое налага да я ползвам?
..И още нещо.. човек понякога трябва да бъде оставен да сгреши за да си научи урока :)


Сря Ное 19, 2014 10:34 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Юли 30, 2014 9:29 pm
Мнения: 116
Местоположение: Пловдив
Мнение Re: Програматор за сушилня с PIC16f1937
Cekins, преработих процедурата MERENE, със сметките и командите, които ми предложи. Ще ползвам:
Цитат:
HBusOut Chipwrite, [$00] и HBusIn Chipread,[Humid, Temp]

Не ми стана ясно, обаче,
1. Не може ли вместо Humid.byte0=Humid1.byte0 & $3F да пиша просто Humid = Humid & $3F
2. Как HBUSIN/HBUSOUT прави разлика между различните I2C канали в ПИК-а - в случая първи и втори канал? Вярно, задал съм
Цитат:
Declare SCL_Pin PORTD.0 ; clock
Declare SDA_Pin PORTD.1 ; data
, ама ако ползвам и двата канала?

След като си отговоря на по-горните въпроси, довечера ще пробвам новия код и ще пиша.


Сря Ное 19, 2014 2:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 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
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Юли 30, 2014 9:29 pm
Мнения: 116
Местоположение: Пловдив
Мнение Re: Програматор за сушилня с PIC16f1937
Ами аз ползвам MSSP2, но ще пробвам каква ще е реакцията при това положение.
Докато тършувах из нета попаднах на изказването на Админа на http://www.protonbasic.co.uk/showthread.php/70827-MSSP1-and-MSSP2 и по-точно:
Цитат:
The Hbus commands always use the MSSP1 peripheral.
In order to use the MSSP2 peripheral, the relevant SFRs will require manipulating.

Това за мен означава, че варианта за команда HBUSIN/OUT поне засега отпада.. :(


Сря Ное 19, 2014 7:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8902
Местоположение: Разград
Мнение Re: Програматор за сушилня с PIC16f1937
Ами то може и сам да си разпишеш директно с модула, ама е малко тегаво и ще трябва хубаво да прочетеш как работи I2C. То не е зле по принцип да си го прочетеш де :)


Сря Ное 19, 2014 8:22 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Юли 30, 2014 9:29 pm
Мнения: 116
Местоположение: Пловдив
Мнение Re: Програматор за сушилня с PIC16f1937
След дългите среднощни битки установих, че операторът HBUSIN не работи при комуникация с I2C Slave устройства с номер на I2C канала по-голям от 1 /при PIC18F45K22 - 2канала, аз ползвам втория/.
С оператор BUSIN/OUT и I2CIN/OUT проблеми няма. Особеното, според мен е това, че преди всяко четене на данни трябва да имаме WRITE /UPDATE/ на Slave устройството.
По предложение на CEKINS използвах оператор BUSIN за четене като данните ги вкарвам в две думи:
Цитат:
I2COut SDA, SCL, Chipwrite, [$00]
/BusOut ChipAdr,[0] - това не съм го пробвал/
DelayMS 60
BusIn ChipAdr,[Word1, Word2]
Word1.byte1=Word1.byte1 & $3F
word2=word2>>2
Humidity = word1 / 163.84 ' Humidity трябва да е float
Temperatura = word2 / 99.3 `Temperatura може да е sword или float
Temperatura = Temperatura - 40

Температурата в сушилнята си дойде на мястото - 80градуса по дисплей и 82градуса по цифров уред.
Прави впечатление, обаче, голямата инертност в отчитане на температурата/влажността, което може би е така поради закрития тип датчик / в кутийка/ и се замислям дали не е по-добре да се ползва датчик от открит тип.


Чет Ное 20, 2014 10:42 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8902
Местоположение: Разград
Мнение Re: Програматор за сушилня с PIC16f1937
Такааа... ако инертността не е голям проблем в случая ти препоръчвам даже още повече да го закриеш... Някакъв вид прахов филтър или каквото ще да е такова. Аз за промишлени приложения ползвам обезшумители за пневматични разпределители - пресовка от бронзови топчета. Колкото по добре е защитен датчика от всякакви видове частици, толкова повече време ще си го позлваш безпроблемно. Физическия датчик за влагата е променлив чип кондензатор и е много чувствителен на всичко - прах, мазно, кисело - абе всичко. Колкото по-малко досег има с такива работи, толкова повече ще работи.


Чет Ное 20, 2014 12:22 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Юли 30, 2014 9:29 pm
Мнения: 116
Местоположение: Пловдив
Мнение Re: Програматор за сушилня с PIC16f1937
В моя случай инертността е важна, защото в началото на програмата, по време на темпериране, температурния датчик отчита примерно 35 градуса, а в барабана вече е 65 градуса! Когато датчика отчете 80 градуса в барабана вече е над 95!
Днес издърпах датчика по-навън от вътрешния обем на ел.вентила и пак ще пробвам, но си мисля, че не е лошо да има допълнителен - контактен или съпротивителен датчик, който да изключва подгрева при надвишаване на "абсолютния" /условно казано/ температурен максимум за сушилнята.
Ето как съм го скрил във вентила - втора и трета снимка - /това е мястото на повредения оригинален аналогов капацитивен датчик HS1101 от първа снимка/. Евентуално някаква мрежичка пред него ще сложа или ще ползвам капачето на оригиналния датчик.
Забележка: Който ще ползва такъв датчик - SMTHS08I да внимава със странично изведените изводи - позлатени полуотвори - защото са суперкрехки и със съвсем леко усилие изскачат навън и се късат от платката


Прикачени файлове:
HS1101.png
HS1101.png [ 22.85 KiB | Прегледано 3059 пъти ]
Снимки0025[1].jpg
Снимки0025[1].jpg [ 1.31 MiB | Прегледано 3077 пъти ]
Снимки0023[1].jpg
Снимки0023[1].jpg [ 1.28 MiB | Прегледано 3077 пъти ]
Чет Ное 20, 2014 12:34 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Юли 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.pdf
https://akizukidenshi.com/download/ds/aosong/AM2320.pdf


Пет Юни 09, 2017 2:54 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Юли 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8902
Местоположение: Разград
Мнение Re: Програматор за сушилня с PIC16f1937
Е няма проблем. Ама по-добре ползвай командата BusOut (HBusOut за хардуерния I2C модул) като за BusOut трябва да си сложиш Declare SDA_PIN, Declare SCL_PIN и Declare Bus_bitrate. Може да си укажеш и да не ползваш пулъп в софтуерен режим. После си нареждаш командата както си искаш. В твоя случай ще стане :
Код:
BusOut I2C_address,$03,[start_address, number_of_registers]
, след което вероятно веднага трябва да четеш с BusIn. С тези команди няма нужда да пипаш R/W бита в първия байт - компилатора сам си го оправя.


Нед Юни 18, 2017 4:53 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Юли 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
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 241 мнения ]  Отиди на страница Предишна  1 ... 13, 14, 15, 16, 17  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни