Отговори на тема  [ 23 мнения ]  Отиди на страница Предишна  1, 2
PIC16F676 проблем 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Аз пак не ти вярвам :D Как ли работят всичките ми устройства с вътрешен генератор и забранен MCLR (в повечето случаи, особено при 12-ките го ползвам като input) ?! :D


Съб Дек 22, 2007 11:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 10, 2004 9:55 am
Мнения: 1718
Мнение Mm
Syrius-B написа:
При всички е така.
Освен това има проблеми с програмирането - проблема е, че обикновено не се програмира :o
Това, което го пише в Datasheets за разните функционални възможности, е вярно поотделно, но не е безусловно и винаги.
Специално за MCLR пина, не можеш да го ползваш като I/O, при вътрешен генератор по нормалния начин.
Има обиколен път, но е "с едно наум".
Трябва при програмирането да го излъжеш, че няма да го ползваш, и после да го включиш, но номера не минава на всички процесори :cry:
Затова, просто не го ползвай, и няма да имаш проблем нито с програмирането, нито с дебъга.

Нищо вярно няма в тези твърдения !!!
1.Защо твърдиш че не ти се програмира, явно в програматора ти куца нещо ?
2.Специално на този професор управлението на MCLR се насочва при програмиране , най добре си го сложи вътрешно за да нямаш ядове и така освобождаваш порта за свой цели и си става порт за вход . Никога не съм имал ядове в такъв случай въпреки че си бачка с вътрешен генератор !

_________________
Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !


Нед Дек 23, 2007 1:31 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 01, 2007 7:33 pm
Мнения: 35
Мнение УСПЕХ !!!
Здравейте, :)
нещата се оправиха,PIC-a го програмирам като съм извел лентов кабел от програматора и чрез него програмирам PIC-a на платката. Като разбира се чрез джъмпери изключвам PIC-a от останалата част от платката. Проблемът беше че не бях поставил кабела както трябва. След като го оправих PIC-a се прочете успешно. Така че предположението че PIC-a не е свързан добре излезе вярно.
Сега относно генератора. Стана точна така, както каза plameniv. Първо прочетох процесора и на проследният адрес от програмната памет 0х3FF имаше записана стойност 0х3444.
Записах стойността на лист и после от File -> Open вкарах моя код. След това записах 0х3444 на адрес 0х3FF и пуснах PIC-a да се програмира. При програмирането в началото започва да се чете PIC-a и в един момент излиза съобщение че на адрес 0х3FF от файла е намерена стойност 0х3444 и в съобщението се пита дали да се ползва тази стойност при програмирането. Дадох му Yes и програмирането продължи нататък. След като се програмира пуснах платката и всичко си тръгна както трябва.
След тези опити мога да кажа, че без конфигуриращата стойност на тактовия генератор изобщо не тръгва а стойността не е само за донагаждане на тактовата честота,както си мислех в началото.
Относто извода MCLR, при INTOSC може да се ползва но само като вход, като изход не работи. Това го проверих на практика.

Благодаря на всички да съдействието и най-вече на plameniv, че иначе кой знае колко време щях да се тормозя докато подкарам PIC-a!

Сега ми става да се проборя с аналоговия компаратор :) че нещо ми създава ядове за сега.
Имам и още един въпрос. Понякога АЦП-то ми дава лъжливи стойности. В началото меря от един вход от АЦП-то и след това сменям от друг. Може ли от това да се дължи. Между превключването съм оставил закъснения и пак така се получава. Като пусна програмата в Proteus-a ми изписва съобщение че при този генератор може АЦП-то да не работи коректно и май наистина ще излезе така. Как може да се оправи това.
Утре ще пусна и код за да видите програмата.


Нед Дек 23, 2007 10:07 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 10, 2004 9:55 am
Мнения: 1718
Мнение Re: УСПЕХ !!!
=D> :supz:
GDTRON написа:
След тези опити мога да кажа, че без конфигуриращата стойност на тактовия генератор изобщо не тръгва а стойността не е само за донагаждане на тактовата честота,както си мислех в началото.

Как ще тръгне генератора ако не пишеш нищо там нали имаш обръщение към този адрес , то отива там за да вземе каква е настройката и посля я записва ако го пратиш на NOP или 3FFF е съвсем друга команда !!!
А между другото нали си сложил в началото на програмата обръщение към този адрес ?

GDTRON написа:
Сега ми става да се проборя с аналоговия компаратор :) че нещо ми създава ядове за сега.
Имам и още един въпрос. Понякога АЦП-то ми дава лъжливи стойности. В началото меря от един вход от АЦП-то и след това сменям от друг. Може ли от това да се дължи. Между превключването съм оставил закъснения и пак така се получава. Като пусна програмата в Proteus-a ми изписва съобщение че при този генератор може АЦП-то да не работи коректно и май наистина ще излезе така. Как може да се оправи това.
Утре ще пусна и код за да видите програмата.

Цифровия компаратор има доста настройки :
1.трябва да решиш как да си конфигурираш компаратора кой извод къде ще е насочен според конфигуриращите битове
2.трябва да решиш с какъв Vref ще е вътрешен или външен пак според конфигуриращите битове, ако е вътрешен този VREF също има настройки за какво ниво да ти се преобръща компаратора и т.н.
3.имай в предвид че АДЦ-то е бавно , има един бит който се вдига когато си е свършил работата слушай него , дори може и прекъсване да ползваш вместо празни цикли да редиш , като пекъсне изчиташ го и върши нещо , може напремер основната програма да проверява този флаг ако е вдигнат изчита АДЦ-то и го пуска на дисплей или за някакви операции с тия данни ако трябва да се правят :)

_________________
Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !


Нед Дек 23, 2007 4:16 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 01, 2007 7:33 pm
Мнения: 35
Мнение 
Цитат:
3.имай в предвид че ADC-то е бавно , има един бит който се вдига когато си е свършил работата слушай него , дори може и прекъсване да ползваш вместо празни цикли да редиш , като пекъсне изчиташ го и върши нещо , може напремер основната програма да проверява този флаг ако е вдигнат изчита ADC-то и го пуска на дисплей или за някакви операции с тия данни ако трябва да се правят

Сигурно имаш в предвид бит-а GO/DONE. Понеже работя с CCS компилатора не бях много сигурен дали в функцията read_adc() прави проверка за край на ADC преобразуването, обаче като проверих чрез МПЛАБ-а се оказа че в асемплерския файл който се прави от C файла има такава проверка. В снимката отдолу може да погледнеш в дясно на ред 114.
Сега да обясня на кратко какво искам да направя. Искам да измеря стойностите на напрежението от двата канала на ADC-то, 6-ти и 7-ми. Ако напрежението на 6-ти например е > от напрежението на 7-ми се светва един светодиод ако напрежението на 6-ти например е <от напрежението на 7-ми. В Proteus-a всичко си върви перфектно обаче на практика съвсем не е така. По принцип светодиодите се превключват нормално в зависимост от напрежението обаче в един момент става превключване на светодиодите за момент без причина за около 0.1 сек след което нещата пак си тръгват нормално. Разликата между напреженията е много малка около 30мВ. Обаче при опорно напрежението на ADC-то 5В и резолюция от 1024 това прави 5/1024=0.0049В на импулс което е достатъчно да хване разлика от 30мВ.
Идва ми една идея как да оправя нещата ама е много тъпо. Да направя една проверка дали примерно напрежението на 6-ти например е > от напрежението на 7-ми след което да изчакам 200mS и пак да повторя проверката така превключванията с време < 0.1 сек няма да отказват влияние. Ама нещо не ми харева много този метод щото каква е гаранцията че след 200nS няма пак да има импулс. Е не че вероятнота е много голяма, ама све пак.
Пускам и кода на програмата


Прикачени файлове:
kod_C.txt [4.94 KiB]
157 пъти
ADC.JPG
ADC.JPG [ 104.8 KiB | Прегледано 1027 пъти ]
Пон Дек 24, 2007 10:20 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 10, 2004 9:55 am
Мнения: 1718
Мнение 
GDTRON написа:
Сега да обясня на кратко какво искам да направя. Искам да измеря стойностите на напрежението от двата канала на ADC-то, 6-ти и 7-ми. Ако напрежението на 6-ти например е > от напрежението на 7-ми се светва един светодиод ако напрежението на 6-ти например е <от напрежението на 7-ми. В Proteus-a всичко си върви перфектно обаче на практика съвсем не е така. По принцип светодиодите се превключват нормално в зависимост от напрежението обаче в един момент става превключване на светодиодите за момент без причина за около 0.1 сек след което нещата пак си тръгват нормално. Разликата между напреженията е много малка около 30мВ. Обаче при опорно напрежението на ADC-то 5В и резолюция от 1024 това прави 5/1024=0.0049В на импулс което е достатъчно да хване разлика от 30мВ.
Идва ми една идея как да оправя нещата ама е много тъпо. Да направя една проверка дали примерно напрежението на 6-ти например е > от напрежението на 7-ми след което да изчакам 200mS и пак да повторя проверката така превключванията с време < 0.1 сек няма да отказват влияние. Ама нещо не ми харева много този метод щото каква е гаранцията че след 200nS няма пак да има импулс. Е не че вероятнота е много голяма, ама све пак.
Пускам и кода на програмата

Мисля че имаше подобна тема във форума за този проблем , когато следиш с АДЦ на 2-та порта в професора трябва да имаш при превключване когато мериш по голямо закъснение между тях за да успее капацитета на АДЦ-то да се зареди с новата стойност :idea:

_________________
Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !


Вто Дек 25, 2007 3:09 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 01, 2007 7:33 pm
Мнения: 35
Мнение 
Цитат:
Мисля че имаше подобна тема във форума за този проблем , когато следиш с АДЦ на 2-та порта в професора трябва да имаш при превключване когато мериш по голямо закъснение между тях за да успее капацитета на АДЦ-то да се зареди с новата стойност

Да и аз мисля че някъде из форума бях чел за нещо подобно. Ще се поразровя дано да открия темата.


Вто Дек 25, 2007 8:02 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 01, 2007 7:33 pm
Мнения: 35
Мнение 
Здравейте,
прегледах темите из форума по въпроса с АЦП-то. Това което намерих в една от темите беше че преди смяната на каналите АЦП-то трябва да се изключи и да се изчака известно време след което да се смени канала и пак да се включи. Добавих това в моята програма обаче за съжаление това не помогна. Отново от време на време се получават лъжливи стойности. Проблемът го реших по много тъп начин, но пък работи. Решението което измислих е следното. Прави се едно измерване на стойностите на канал 6 и 7, след което измерването се повтаря ако резултатът е същия т.е напрежинието на канал 6 е <( > ) от напрежението на канал 7 тогава се преминава нататък в програмата. Или на кратко ако трябва да обобщя, ако 2 последователни изнервания дадат един и същи резултат тогава се изпълнява нататък. Ако измерванията се различават се преминава към ново измерване. Наясно съм че това е едно от най-тъпите решения но за момента само то върви работа.


Чет Дек 27, 2007 3:02 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 23 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

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


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

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