|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 1:41 pm
| Автор |
Съобщение |
|
MAX_PG
Ранг: Минаващ
Регистриран на: Вто Май 26, 2009 8:49 pm Мнения: 46
|
 Re: I2C малко помощ
Не не използвам библиотеки ,не съм им фен.Пиша си кодовете сам. Моля потребителя CarBeta ,ако има възможност да хвърли един поглед на поста ми от 21.01.2017 от 5.58 pm .
|
| Съб Яну 21, 2017 9:51 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: I2C малко помощ
Ако ти си пишеш кода не би трябвало да имаш какъвто и да е проблем, единствено може да са ти малко тези 4 Мхц но лесно можеш да ги вдигнеш. 6us ти е най-малкото време, а 60us ти е такта, тоя проц трябва като мин да е 200 ns на инструкция, т.е. имаш 30 инструкции в най-лошия случай да реагираш и 300 инструкции между два бита, напълно достатъчно да работиш и с i2c то. Ако се успиваш така рискуваш или да караш мастъра да чака, или ако го направиш ма сличайни интервали да не получава данни в 1 от 4 опита.
|
| Нед Яну 22, 2017 1:38 am |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
 Re: I2C малко помощ
Аз не мога все още да разбера: 1. Каква е причината зареждането да се следи от два проца. Мастъра толкова ли е зает, че не може сам да мери напрежение, ток и температура? И защо трябва въобще да се мерят, при положение, че има куп зареждачки, които могат сами са следят тези параметри и да рапортуват при настъпване на съответно събитие - край на заряда, повишена температура, понижена температура... 2. Защо се използва температурен сензор с 1-wire. Аз бих използвал аналогов, щом се използва АЦП. 1-wire бих използвал, ако сензорите са надалеч. 3. Както вече се писа, нито напрежението, нито тока или температурата се изменят бързо, за да се налага толкова често тяхното мерене. Спокойно това меже да става през минута, че и по-нарядко. Слейвът настройва таймер да генерира прекъсване през определения интервал на меренето и влиза в слийп. При прекъсване от таймера мери напрежение ток и температура и записва данните. Второто прекъсване с по-висок приоритет е от i2c мастъра, при което слейва рапортува последно измерените стойности.
Като се има предвид криво избрания интерфейс, омазването е започнало оше от идеята и е продължило през харда, та до софта.
|
| Нед Яну 22, 2017 12:52 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: I2C малко помощ
Аз мисля, че и през 20 мс да се мерят пак няма да има проблем, времето на слейва е достатъчно. Друг е въпроса защо изобщо има слейв и защо комуникира по i2c, не забравяй че това е протокол за вътрешно схемна комуникация, предполагам нямш идеята да го изнасяш през кабели.
|
| Нед Яну 22, 2017 1:16 pm |
|
 |
|
MAX_PG
Ранг: Минаващ
Регистриран на: Вто Май 26, 2009 8:49 pm Мнения: 46
|
 Re: I2C малко помощ
Не е неободимо да се обеснявам: но все пак ще ви разяня някои неща относно моето у-во ,но това ни отдалечава от първоначалната тема. Първо аз не правя нещо ново ,а преправям старо такова,използвам готови корпуси на зарядно и батерия. Въз основа на това съм си измислил схемата,принципа на работа ,платките спрямо корпусите,и софтуера съответно. Старото зарядно беше за никел-кадмиеви клетки ,а сега новото е за литиево-йонни клетки. В кутията на батерията се налага да има платка,поради няколко причини: 1.)Намален брой на електрически изводи между батерия и зарядно (само пинове за комуникация и захранване на тази платка с цел да не се ползва от енергията на клетките ,когато батерията е извън зарядното) 2.)Следене на температурата в корпуса на батерията,следене на напрежението на всяка клетка по отделно,а не общото за цялата батерия.Защо е неоходимо това ли ,ами защото след 5-6 зареждания последователно свързаните клетки се разбалансират и по време на зареждане някоя може да се цъфне да се презареди повече от другите преди преди напрежението на целият пакет да е стигнало максимума. 3.)Вътре в батерията имам хардуерна схема и софтуерна подръжка за балансиране на клетките ,ако е необходимо такова разбира се. При всяко поставяне на батерията в зарядното първо за това се проверява и ако се налага зарядният ток е спрян и се разреждат клетките до напрежението на клетката с най-ниско такова.След изравняването на напреженията на отделните клетки се пристъпва към зареждане със заряден ток вече ако се налага разбира се . Тук немога да не отбележа че софтуера за балансиране ми е доста сложен ,бих казал че е по-сложен от всички други процеси в зарядното. 4.Избрал съм цифров датчик за температурата ,защото ми е по-лесно само да прочета готовите данни от него ,докато ако беше аналогов трябва да се правят едни примерно 100 измервания за 1 сек и да се прави осредняване на данните иначе не са реални. 5.)След всичко това сами виждате ,че ако бях избрал да командвам всички тези функции на зареждането само през контролера в зарядното ,то тогава аз трябва да имам около 8 елек. извода между батерията и зарядното,което е неприемливо за мен. 6.)В общи линии съм замислил софта в няколко сегмента като този за контролера в кутията на батерията (слейв) съм го написал почти 1500 реда инструкции на асемблер. Първи сегмент е измерване на необходимите данни и тяхното складиране в паметта на контролера(рам) Вторият сегмент е разтоварване на тези данни при поискване към зарядното Третият сегмент е следене за правилна работа на ус-вото.Това съм го предвидил с пускането на WATCH DOG TIMER ,ако програмата някаде зацикли да се рестартира,и съм разрешил бит BOREN та ако има евентуално някакво пропадане за кратко на захранването поради смущение или нещо друго също да се рестартира у-вото.
Хардуерно съм ги изработил у-вата ,платки по фото метод ,намотал съм си импулсните трафове,налепил съм всички детайли,като почти всичко е за повърхностен монтаж(харесва ми у-вата да са ми миниатурни с много хардуер). Сега остава да му вдъхна живот на у-вото ,да му дам душа ,чрез софтуера.
|
| Нед Яну 22, 2017 7:37 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: I2C малко помощ
Лошо няма в това, просто с I2C не си направил най-добрият избор, както и с OneWire сензора, но това не променя кой зане колко нещата, и в този вид спокойно можеш да ги обработваш и двете паралелно, гледай да изпозлваш повече хардеура и по малко да пишеш и да стоиш в цикли. Доколкото i2C ти е хардуерно, остава малко да си улесниш живота за Onewire и си готов. Не мисли че цифровият датчик дава много по стабилен резултат от аналоговия. На аналоговия най-простото е да си направиш една 32 битова променлива и там да сумираш резултата ако искаш за 100 ако искаш за 1000 измервания, ама не 100 и 1000 ами да речем 128 или 1024 за да можеш да направиш деленто със шифт, въпреки че изобщо не е нужно да сумираш от 100 измервания. Това просто като информация. Иначе за onewire изпозлвай таймер който да ти генерира нужните тайминги. Спокойно с един таймер и подходящо избран прескалер може да се реализират всички нужни времена.
|
| Нед Яну 22, 2017 7:53 pm |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
 Re: I2C малко помощ
По-скоро ми се струва, че си сбъркал в това да използваш вътрешния осцилатор. Първо скоростта е ниска, второ има голямо отклонение от тази честота. Хардуерът ти не е толкова изискващ и не е особено необходимо да се използват хардуерни интерфейси. Когато разполагаш с висока скорост, без проблем можеш да си ги реализираш софтуерно и да не обръщаш внимание на проблемите, на които си се натъкнал...
_________________www.elkran.com
|
| Нед Яну 22, 2017 8:03 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: I2C малко помощ
Нищо му няма на осцилатора, но да не го ползва на 4 Mhz, има си PLL спокойно може да работи на 32 Mhz.
|
| Нед Яну 22, 2017 8:53 pm |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
 Re: I2C малко помощ
Тони, 4х4 е 16! И имаше някъде AN за вътрешния осцилатор. Май беше при RTC. Там се обясняваше, че за предпочитане използването на външен осцилатор, за да бъде по-точно измерването и че вътрешния дава голямо отклонение. Може и да се бъркам. Не помня.
_________________www.elkran.com
|
| Нед Яну 22, 2017 10:40 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: I2C малко помощ
По добре прочети мануала  Вътрешният осцилатор може да го сетваш до 16 Mhz, от там имаш pll х4 до 64 Mhz, и от изхода на PLL се взема /2 за клока, та е точно 32 Mhz.
|
| Нед Яну 22, 2017 11:29 pm |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
 Re: I2C малко помощ
Вярно! Да му се ненадява човек. А е серия 16. Даже пише, че е прецизен. Ем авторът да вдигне честотата и да не се мъчи с тези 4MHz. Ето прост метод за реализиране на софтуерен I2C:
_________________www.elkran.com
|
| Нед Яну 22, 2017 11:54 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: I2C малко помощ
Абе той си има хардуерен, дет се вика като слънце .. като го погледнеш и ослепяваш, ама си го има и работи. 1Wire е това което го бави защото го полира и може би чака, най-малкото вместо да чака може да използва таймер ..
|
| Пон Яну 23, 2017 12:07 am |
|
 |
|
MAX_PG
Ранг: Минаващ
Регистриран на: Вто Май 26, 2009 8:49 pm Мнения: 46
|
 Re: I2C малко помощ
Хора спрете се малко с тия високи честоти ,да има ги като опция в този контролер ,но не мисля че е неоходимо да се използват чак толкова високи за нещо което работи доста бавно и вътрешният осцилатор го дават с точност 1% което за моите цели е напълно достатъчно. Колкото по-висока е тактовата честота ,толкова по-малки времеинтервали могат да се изработват с таймерите. Говоря за елементарно препълване ,не да пиша по-сложни кодове за времеинтервали.Ще ви дам и пример: вземам най-дългият таймер TIMER1 ,който при 64MHz ще се препълва за 32ms .Има начини за по-дълги интервали ,но това отнема излишно ресурси като програмна памет ,рам памет,брой цикли и т. н.
|
| Пон Яну 23, 2017 3:54 am |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Re: I2C малко помощ
дори на асемблер само превключването на банките ще отнеме повече код, отколкото да си направиш таймери с произволна дължина. нещата нито са толкова страшни, нито контролера трябвва да се щади. просто пиши 
|
| Пон Яну 23, 2017 10:50 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: I2C малко помощ
Няма нужда да пишеш сложни кодове, таймерите си имат прескалери и постскалери, какъв интервал искаш да направиш който не можеш на 32 Мхц ? Въпросният таймер 1, ако си на 32 Mhz, можеш да го клокваш на Fosc/4, т.е. на 8 Mhz, отделно имаш прескалер който е /8 и така получаваш период от 65 ms. Ако искаш повече просто броиш прекъсванията, които ще стават на всяки 65 mS и цялото нещо ще отнеме има няма 20 операции, с влизането в прекъсване, ако го полираш няма и толкова. Ти сам си усложняваш живота като си слагаш безсмислени лимитации, ако ти трябва системно време тия таймери ги прави да ти генерират прекъсване на 1 или 10 ms и от там нататък си го смятай. В един момент ще ти потрябва друго време но таймери няма да имаш повече. Използвай таймери за времена които са критични, еидн да ти прави някакъво системно време, и другите два по предназначение, еидн може да генерира тайминга за 1Wire, другия за каквото ти потрябва, да ти стартира ADC-то примерно, ако семплирането ти е критично, при теб не е но едва ли има значение.
|
| Пон Яну 23, 2017 11:29 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|