| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| 12F683 не изработва 1 едновременно на два порта. http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=8748 |
Страница 1 от 2 |
| Автор: | kirchi [ Вто Мар 29, 2011 9:58 pm ] |
| Заглавие: | 12F683 не изработва 1 едновременно на два порта. |
Задействам две релета когато напрежението измерено от ацепето мине определена стойност. Релетата се намират на GP1 и GP2, като транзистора е bc639 и между базата и пика съм сложил 1,5к резистор. Проблема е в това че пика не изработва едновременно 1 на двата изхода. Поотделно си работят но заедно винаги GP1 е 0. От какво може да е? Това е софта: while(1) { acp(); if (volt >= 4250) { GP1=1; GP2=1; //като изтрия този ред работи GP1 } else{GP1=0;} } |
|
| Автор: | milenjs [ Вто Мар 29, 2011 10:14 pm ] |
| Заглавие: | |
А защо не ги установяваш двете едновременно? Това с какъв компилатор? |
|
| Автор: | kirchi [ Вто Мар 29, 2011 10:23 pm ] |
| Заглавие: | |
На htsoft 9.81 |
|
| Автор: | fan [ Вто Мар 29, 2011 11:08 pm ] |
| Заглавие: | |
А това 12F628 от къде го измисли? Най-близкото до него е 12F629, но е без АЦП. С АЦП е 12F675. А проблема ти ми прилича на неизключени компаратори към входовете. Доста гадаене е така... |
|
| Автор: | CarBeta [ Вто Мар 29, 2011 11:27 pm ] |
| Заглавие: | |
Проблема само с GP1 ли е или с този, който пръв се сетва? Опитай да сетнеш първо GP2 и после GP1 и виж дали проблема няма да се прехвърли на GP2. |
|
| Автор: | dan [ Сря Мар 30, 2011 9:16 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Ако правилно си конфигурирал пиновете, проблемът може да идва от "read-modify-write". По това има изписано много, вкл. и тук. Пробвай да използваш т.нар. засенчващ регистър- вместо да записваш данните директно в PORTx, запиши ги първо в някой регистър (променлива) SHADOW и после го копирай в PORTx. например:
вместо просто
|
|||||||||||||||||||
| Автор: | Cekins [ Сря Мар 30, 2011 11:18 am ] |
| Заглавие: | |
По-правилно е да се прави с ANDWF/IORWF за да не се променя случайно състоянието на някой друг бит. Ама това само принципно. А ако ги сетваш BSF(BCF) те така или иначе не се включват "едновременно" а един след друг. А това за read-modify-write в случая няма нищо общо. Ако наистина става въпрос 12f629 - той има само компаратор. И баш тези (GP0 - 2) са му пиновете. Компаратора е включен по дефолт. |
|
| Автор: | ps66 [ Сря Мар 30, 2011 11:43 am ] |
| Заглавие: | |
какво толкова му им се чудите и маете на тия пикове !? явно и двата пина са на един порт и компилатора приема CP1=1 за байтова а не битова операция (да беше погледнал асемблерския листиг ли !?) |
|
| Автор: | Reader [ Сря Мар 30, 2011 11:52 am ] |
| Заглавие: | |
На мен пък ми прилича точно на RMW-проблем. Пробвай съвета на CarBeta и ако проблемът се прехвърли на GP2, значи трябва да използваш решението, дадено от dan. |
|
| Автор: | fan [ Сря Мар 30, 2011 11:57 am ] | |||||||||
| Заглавие: | ||||||||||
Тука не позна изобщо! |
||||||||||
| Автор: | ps66 [ Сря Мар 30, 2011 12:37 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
не съм се и опитвал да гадая ... още по-малко ме интересува дели е GP или CP ако питащия имаше поне малко мозък - щеше да види какво е генерирал компилатора ... и щеше да го постне (ако не може да го проумее). в последно време форуна се напълни с малоумни питания ... явно е тенденция и ще трябва да се свиква |
|||||||||||||||||||
| Автор: | fan [ Сря Мар 30, 2011 12:42 pm ] |
| Заглавие: | |
Прав си, много си прав! |
|
| Автор: | valioman [ Сря Мар 30, 2011 4:43 pm ] |
| Заглавие: | |
Според мен не се е напълнил с глупави питания а с умни отговори . Просто забравихме от де тръгнахме и ние .... изровете си постове от преди 3 години да видите къв смях ще падне. Няма смисъл да се избиват комплекси .. питащия попита дадоха му се насоки ... и той млъкна... просто оставяме темата да потъне и това е.. а не както се прави напоследък да се обърне на говорилня от типа НЕЩО vs ДРУГО НЕЩО |
|
| Автор: | kirchi [ Сря Мар 30, 2011 7:16 pm ] |
| Заглавие: | |
Опа процесора е 12f683, не знам защо съм написал 628. Проблема винаги е на GP1 каквото и да въртя и да сменям. Написах GP1=1; delay_s(1); GP2=1; и в момента GP2=1 на GP1 измервам 0,23V. В асемблерския листиг всичко си е ок. Пробвах с real pic simulator и си баца. Може ли пика да е изтрищял? |
|
| Автор: | CarBeta [ Сря Мар 30, 2011 7:37 pm ] |
| Заглавие: | |
Би ли пуснал асемблерския листинг или направо хекса(ако, разбира се, не са строго секретни)? |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|