| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблемче със 16F84A и мигащ светодиод http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=5255 |
Страница 1 от 2 |
| Автор: | wolfshark [ Чет Дек 27, 2007 2:54 am ] | ||||||||||||||||||
| Заглавие: | Проблемче със 16F84A и мигащ светодиод | ||||||||||||||||||
Добър вечер и честита коледа на всички! Мъча се тук с книгата на Млад конструктор PIC Микроконтролери част първа и най-сетне стигнах до примерите. Обаче нещо мигащия светодиод не тръгва... Така като го гледам сорса ми се струва че е грешка в програмата.
Точно тук програмата изпада в безкраен Loop - T0IF постоянно се сменя м/у 0X0E и 0X0F
Това ми се струва логично, понеже докато стигне програмата до тази част таймера е навъртял до 0F и btfss вади единица от него и се получава 0E, после goto връща на loop и понеже брояча продължава да върти и добавя на 0E + 1 и става 0F и така до безкрай. Нали уж всички примери в тази книга работели, защо не ми се получава работата, преписал съм всичко точно. Във следващите примери се изполва абсолютно същия код което ме навежда на мисълта че трябва да е верен, но не е. Моля ви се помогнете ми защото съ начинаещ и все пак празници са, смилете се над мен п.п. дори програмирах един 16F84A но светодиода не мига. |
|||||||||||||||||||
| Автор: | plameniv [ Чет Дек 27, 2007 3:34 am ] |
| Заглавие: | Re: Проблемче със 16F84A и мигащ светодиод |
Защо мислиш че е грешно ? Имаш няколко неща който не си изяснил за да мига тоя светодиод трябва да работи на някаква честота а тя се определя в този контролер от външен кварц и достатъчно много цикли, какъв кварц си сложил опиши схемата ако ти е по лесно начертай я и я покажи защото това също говори за опитната постановка малко или много , може да се окаже че и диода не е където трябва ? Мигането става като се прави закъснение и те за да го направят голямо са използвали вътрешния таймер с предделител 1:256 , ако си на 4 MHz кварц се вдига бита за прекъсване на всеки 0.065536 сек или 15.2587890625 Hz , но понеже това е твърде бързо за човешкото око и за да вижда че мига го намаляват още 7 пъти аз бих го сложил дори 10 . Не видях в тоя код какво става с прекъсванията и защо са лепнали прекъсване на порта ако ще е само за 1 мигане пък после в кода няма нищо указано Я пробвай този код list p=16F84A #INCLUDE <p16F84A.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;========================================================== Counter equ 0x20 ;========================================================== org 0x000 GOTO Osnovna_Programa DATA 0x41 DATA 0x53 org 0x004 GOTO Osnovna_Programa ;========================================================== Osnovna_Programa bsf STATUS,RP0 movlw B'00000111' movwf OPTION_REG movlw B'11111110' movwf TRISB bcf STATUS,RP0 clrf INTCON clrf PORTB goto main Wait movlw D'10' movwf Counter clrf TMR0 again BCF INTCON,T0IF loop btfss INTCON,T0IF goto loop decfsz Counter,w goto again return main bsf PORTB,0 call Wait bcf PORTB,0 call Wait goto main END |
|
| Автор: | Zeus [ Чет Дек 27, 2007 11:58 am ] | |||||||||||||||||||||||||||
| Заглавие: | Re: Проблемче със 16F84A и мигащ светодиод | |||||||||||||||||||||||||||
Ако си писал дословно примера от книгата, си изпуснал 2 реда в началото на програмата, а те са много важни ORG H'0000' goto start |
||||||||||||||||||||||||||||
| Автор: | wolfshark [ Чет Дек 27, 2007 10:29 pm ] |
| Заглавие: | |
Благодаря и на двама ви! Сега на симулацията работи обаче в реални условия - не но най-вероятно заради неправилното свързване. Вързал съм му само VCC и VSS а на RB0 съм сложил светодиода. Използвам вътрешния резонатор. Не работи сигурно защото трябва на OSC2 да вържа резистор към VCC и кондензатор към VSS както тук http://www.mstracey.btinternet.co.uk/pi ... rogtu1.jpg А да попитам нужно ли е да забивам на MCLR VCC??? |
|
| Автор: | Ки4о [ Чет Дек 27, 2007 10:54 pm ] |
| Заглавие: | |
MCLR го свързваш към +5V през резистор от примерно 10 килоома.Между изхода на контролера RB0 и светодиода слагаш един резистор 470 ома.Купи си кварц и два кондензатора 22 пФ и си пусни тактовия генератор както трябва.Иначе ще имаш и други проблеми. |
|
| Автор: | wolfshark [ Пет Дек 28, 2007 12:24 am ] | |||||||||
| Заглавие: | ||||||||||
Кварца утре се заемам с него иначе какво му е на вградения? Чул съм че не е особено точен ама за един мигащ светодиод това предполагам не е проблем. |
||||||||||
| Автор: | Syrius-B [ Пон Дек 31, 2007 2:39 am ] |
| Заглавие: | |
Този процесор НАМА вътрашен генератор The PIC16F84A can be operated in four different oscillator modes. The user can program two configuration bits (FOSC1 and FOSC0) to select one of these four modes: PIC16FXX • LP Low Power Crystal • XT Crystal/Resonator • HS High Speed Crystal/Resonator • RC Resistor/Capacitor Сложи си кристал отвън, както си му е реда и ще тръгне |
|
| Автор: | wolfshark [ Пон Дек 31, 2007 3:07 pm ] |
| Заглавие: | |
Забравих да кажа - сложих и тръгна Но пък единият ми контролер изгроря! Вързах го както си му е реда и сложих резистор 220ома през светодиода микроконтролера взе че спря да работи и дори да се програмира. Чипа беше 16LF84A. На следващия не рискувах и сложих 470ома резистор и тръгна. Това ли е било причината за изгарянето му? |
|
| Автор: | Ки4о [ Пон Дек 31, 2007 4:33 pm ] |
| Заглавие: | |
Ти как мислиш ? |
|
| Автор: | wolfshark [ Пон Дек 31, 2007 5:49 pm ] |
| Заглавие: | |
Ами мисля че дори със 220ома тока не е достатъчен че да го изгори. Нали уж може 25ma да пусне |
|
| Автор: | WDW [ Чет Яну 03, 2008 4:23 pm ] | |||||||||
| Заглавие: | ||||||||||
Много си лаконичен в разясненията си и не може да ти се разбере какво точно правиш и откъде ти идва проблема! Опитай се да бъдеш малко по-подробен ! |
||||||||||
| Автор: | Rezos [ Вто Яну 08, 2008 6:48 pm ] |
| Заглавие: | |
Тази същата програма, как би изглеждала, ако се напише на C. |
|
| Автор: | Ки4о [ Вто Яну 08, 2008 8:09 pm ] |
| Заглавие: | |
for( ; ; ) { __asm__ volatile("BSET PORTB,#0" ); delay_mS(1000); __asm__ volatile("BCLR PORTB,#0" ); delay_mS(1000); } |
|
| Автор: | Rezos [ Вто Яну 08, 2008 8:37 pm ] |
| Заглавие: | |
Ще те помоля, ако ти се занимава, да я напишеш цялата (с инициализации и т.н ) за да ги сравня с асемблерската и да разбера кое какво заменя. |
|
| Автор: | TheWizard [ Вто Яну 08, 2008 8:40 pm ] |
| Заглавие: | |
void main (void) { while(1) { RB0 = !RB0; // MOVLW 0x1 XORWF PORTB, F delay_mS(1000); } } |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|