| Автор |
Съобщение |
|
kirchi
Ранг: Минаващ
Регистриран на: Сря Яну 03, 2007 8:52 pm Мнения: 89 Местоположение: Димитровград
|
 12F683 не изработва 1 едновременно на два порта.
Задействам две релета когато напрежението измерено от ацепето мине определена стойност. Релетата се намират на GP1 и GP2, като транзистора е bc639 и между базата и пика съм сложил 1,5к резистор. Проблема е в това че пика не изработва едновременно 1 на двата изхода. Поотделно си работят но заедно винаги GP1 е 0. От какво може да е?
Това е софта:
while(1)
{
acp();
if (volt >= 4250)
{
GP1=1;
GP2=1; //като изтрия този ред работи GP1
}
else{GP1=0;}
}
Последна промяна kirchi на Сря Мар 30, 2011 7:28 pm, променена общо 1 път
|
| Вто Мар 29, 2011 9:58 pm |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
А защо не ги установяваш двете едновременно? Това с какъв компилатор?
|
| Вто Мар 29, 2011 10:14 pm |
|
 |
|
kirchi
Ранг: Минаващ
Регистриран на: Сря Яну 03, 2007 8:52 pm Мнения: 89 Местоположение: Димитровград
|
На htsoft 9.81
|
| Вто Мар 29, 2011 10:23 pm |
|
 |
|
fan
Ранг: Почетен член
Регистриран на: Съб Окт 13, 2007 12:12 pm Мнения: 712
|
А това 12F628 от къде го измисли? Най-близкото до него е 12F629, но е без АЦП. С АЦП е 12F675. А проблема ти ми прилича на неизключени компаратори към входовете. Доста гадаене е така... 
|
| Вто Мар 29, 2011 11:08 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
Проблема само с GP1 ли е или с този, който пръв се сетва? Опитай да сетнеш първо GP2 и после GP1 и виж дали проблема няма да се прехвърли на GP2.
|
| Вто Мар 29, 2011 11:27 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
Ако правилно си конфигурирал пиновете, проблемът може да идва от "read-modify-write".
По това има изписано много, вкл. и тук.
Пробвай да използваш т.нар. засенчващ регистър- вместо да записваш данните директно в PORTx, запиши ги първо в някой регистър (променлива) SHADOW и после го копирай в PORTx.
например:
вместо просто
_________________ Хайде де!
|
| Сря Мар 30, 2011 9:16 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
По-правилно е да се прави с ANDWF/IORWF за да не се променя случайно състоянието на някой друг бит. Ама това само принципно. А ако ги сетваш BSF(BCF) те така или иначе не се включват "едновременно" а един след друг. А това за read-modify-write в случая няма нищо общо.
Ако наистина става въпрос 12f629 - той има само компаратор. И баш тези (GP0 - 2) са му пиновете. Компаратора е включен по дефолт.
|
| Сря Мар 30, 2011 11:18 am |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
какво толкова му им се чудите и маете на тия пикове !?
явно и двата пина са на един порт и компилатора приема CP1=1 за байтова а не битова операция
(да беше погледнал асемблерския листиг ли !?)
|
| Сря Мар 30, 2011 11:43 am |
|
 |
|
Reader
Ранг: Новодошъл
Регистриран на: Нед Апр 17, 2005 9:23 am Мнения: 112
|
На мен пък ми прилича точно на RMW-проблем.
Пробвай съвета на CarBeta и ако проблемът се прехвърли на GP2, значи трябва да използваш решението, дадено от dan.
|
| Сря Мар 30, 2011 11:52 am |
|
 |
|
fan
Ранг: Почетен член
Регистриран на: Съб Окт 13, 2007 12:12 pm Мнения: 712
|
Тука не позна изобщо!  Тука GP1(а не CP1) и GP2 са предварително дефинирани битове... и т.н. 
|
| Сря Мар 30, 2011 11:57 am |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
не съм се и опитвал да гадая ... още по-малко ме интересува дели е GP или CP
ако питащия имаше поне малко мозък - щеше да види какво е генерирал компилатора ... и щеше да го постне (ако не може да го проумее).
в последно време форуна се напълни с малоумни питания ... явно е тенденция и ще трябва да се свиква 
|
| Сря Мар 30, 2011 12:37 pm |
|
 |
|
fan
Ранг: Почетен член
Регистриран на: Съб Окт 13, 2007 12:12 pm Мнения: 712
|
Прав си, много си прав! 
|
| Сря Мар 30, 2011 12:42 pm |
|
 |
|
valioman
Ранг: Почетен член
Регистриран на: Съб Сеп 17, 2005 5:07 pm Мнения: 813 Местоположение: Сливен
|
Според мен не се е напълнил с глупави питания а с умни отговори .
Просто забравихме от де тръгнахме и ние .... изровете си постове от преди 3 години да видите къв смях ще падне.
Няма смисъл да се избиват комплекси .. питащия попита дадоха му се насоки ... и той млъкна... просто оставяме темата да потъне и това е.. а не както се прави напоследък да се обърне на говорилня от типа НЕЩО vs ДРУГО НЕЩО
|
| Сря Мар 30, 2011 4:43 pm |
|
 |
|
kirchi
Ранг: Минаващ
Регистриран на: Сря Яну 03, 2007 8:52 pm Мнения: 89 Местоположение: Димитровград
|
Опа процесора е 12f683, не знам защо съм написал 628. Проблема винаги е на GP1 каквото и да въртя и да сменям. Написах
GP1=1;
delay_s(1);
GP2=1;
и в момента GP2=1 на GP1 измервам 0,23V.
В асемблерския листиг всичко си е ок. Пробвах с real pic simulator и си баца. Може ли пика да е изтрищял?
|
| Сря Мар 30, 2011 7:16 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
Би ли пуснал асемблерския листинг или направо хекса(ако, разбира се, не са строго секретни)?
|
| Сря Мар 30, 2011 7:37 pm |
|
|