|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 5:32 am
Проблемче със 16F84A и мигащ светодиод
| Автор |
Съобщение |
|
wolfshark
Ранг: Минаващ
Регистриран на: Пон Ное 26, 2007 11:34 pm Мнения: 95 Местоположение: Видин
|
 Проблемче със 16F84A и мигащ светодиод
Добър вечер и честита коледа на всички!
Мъча се тук с книгата на Млад конструктор PIC Микроконтролери част първа и най-сетне стигнах до примерите. Обаче нещо мигащия светодиод не тръгва... Така като го гледам сорса ми се струва че е грешка в програмата.
Точно тук програмата изпада в безкраен Loop - T0IF постоянно се сменя м/у 0X0E и 0X0F
Това ми се струва логично, понеже докато стигне програмата до тази част таймера е навъртял до 0F и btfss вади единица от него и се получава 0E, после goto връща на loop и понеже брояча продължава да върти и добавя на 0E + 1 и става 0F и така до безкрай. Нали уж всички примери в тази книга работели, защо не ми се получава работата, преписал съм всичко точно. Във следващите примери се изполва абсолютно същия код което ме навежда на мисълта че трябва да е верен, но не е. Моля ви се помогнете ми защото съ начинаещ и все пак празници са, смилете се над мен
п.п. дори програмирах един 16F84A но светодиода не мига.
|
| Чет Дек 27, 2007 2:54 am |
|
 |
|
plameniv
Ранг: Форумен бог
Регистриран на: Нед Окт 10, 2004 9:55 am Мнения: 1718
|
 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
_________________ Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !
|
| Чет Дек 27, 2007 3:34 am |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
 Re: Проблемче със 16F84A и мигащ светодиод
Ако си писал дословно примера от книгата, си изпуснал 2 реда в началото на програмата, а те са много важни
ORG H'0000'
goto start
|
| Чет Дек 27, 2007 11:58 am |
|
 |
|
wolfshark
Ранг: Минаващ
Регистриран на: Пон Ное 26, 2007 11:34 pm Мнения: 95 Местоположение: Видин
|
Благодаря и на двама ви!
Сега на симулацията работи обаче в реални условия - не но най-вероятно заради неправилното свързване. Вързал съм му само VCC и VSS а на RB0 съм сложил светодиода. Използвам вътрешния резонатор. Не работи сигурно защото трябва на OSC2 да вържа резистор към VCC и кондензатор към VSS както тук http://www.mstracey.btinternet.co.uk/pi ... rogtu1.jpg
А да попитам нужно ли е да забивам на MCLR VCC???
|
| Чет Дек 27, 2007 10:29 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
MCLR го свързваш към +5V през резистор от примерно 10 килоома.Между изхода на контролера RB0 и светодиода слагаш един резистор 470 ома.Купи си кварц и два кондензатора 22 пФ и си пусни тактовия генератор както трябва.Иначе ще имаш и други проблеми.
|
| Чет Дек 27, 2007 10:54 pm |
|
 |
|
wolfshark
Ранг: Минаващ
Регистриран на: Пон Ное 26, 2007 11:34 pm Мнения: 95 Местоположение: Видин
|
Кварца утре се заемам с него иначе какво му е на вградения? Чул съм че не е особено точен ама за един мигащ светодиод това предполагам не е проблем.
|
| Пет Дек 28, 2007 12:24 am |
|
 |
|
Syrius-B
Ранг: Форумен бог
Регистриран на: Пон Яну 30, 2006 2:48 am Мнения: 1248 Местоположение: София
|
Този процесор НАМА вътрашен генератор
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
Сложи си кристал отвън, както си му е реда и ще тръгне
|
| Пон Дек 31, 2007 2:39 am |
|
 |
|
wolfshark
Ранг: Минаващ
Регистриран на: Пон Ное 26, 2007 11:34 pm Мнения: 95 Местоположение: Видин
|
Забравих да кажа - сложих и тръгна
Но пък единият ми контролер изгроря! Вързах го както си му е реда и сложих резистор 220ома през светодиода микроконтролера взе че спря да работи и дори да се програмира. Чипа беше 16LF84A. На следващия не рискувах и сложих 470ома резистор и тръгна. Това ли е било причината за изгарянето му?
|
| Пон Дек 31, 2007 3:07 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Ти как мислиш ?
|
| Пон Дек 31, 2007 4:33 pm |
|
 |
|
wolfshark
Ранг: Минаващ
Регистриран на: Пон Ное 26, 2007 11:34 pm Мнения: 95 Местоположение: Видин
|
Ами мисля че дори със 220ома тока не е достатъчен че да го изгори. Нали уж може 25ma да пусне
|
| Пон Дек 31, 2007 5:49 pm |
|
 |
|
WDW
Ранг: Популярен
Регистриран на: Сря Окт 26, 2005 12:36 am Мнения: 353
|
Много си лаконичен в разясненията си и не може да ти се разбере какво точно правиш и откъде ти идва проблема! Опитай се да бъдеш малко по-подробен !
_________________ Сичкото що е транзистор за илядо и пестотин волта се е BU ...
|
| Чет Яну 03, 2008 4:23 pm |
|
 |
|
Rezos
Ранг: Минаващ
Регистриран на: Пон Ное 20, 2006 8:24 pm Мнения: 3
|
Тази същата програма, как би изглеждала, ако се напише на C.
|
| Вто Яну 08, 2008 6:48 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
for( ; ; )
{
__asm__ volatile("BSET PORTB,#0" );
delay_mS(1000);
__asm__ volatile("BCLR PORTB,#0" );
delay_mS(1000);
}
|
| Вто Яну 08, 2008 8:09 pm |
|
 |
|
Rezos
Ранг: Минаващ
Регистриран на: Пон Ное 20, 2006 8:24 pm Мнения: 3
|
Ще те помоля, ако ти се занимава, да я напишеш цялата (с инициализации и т.н ) за да ги сравня с асемблерската и да разбера кое какво заменя.
|
| Вто Яну 08, 2008 8:37 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
void main (void) {
while(1) {
RB0 = !RB0; // MOVLW 0x1 XORWF PORTB, F
delay_mS(1000);
}
}
_________________ main[-1u]={1};
|
| Вто Яну 08, 2008 8:40 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|