Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
Проблемче със 16F84A и мигащ светодиод 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пон Ное 26, 2007 11:34 pm
Мнения: 95
Местоположение: Видин
Мнение Проблемче със 16F84A и мигащ светодиод
Добър вечер и честита коледа на всички!
Мъча се тук с книгата на Млад конструктор PIC Микроконтролери част първа и най-сетне стигнах до примерите. Обаче нещо мигащия светодиод не тръгва... Така като го гледам сорса ми се струва че е грешка в програмата.
Код:
      list   p=16F84A
      #INCLUDE <p16F84A.inc>
      __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

w      EQU      0
f      EQU      1
Counter   EQU      H'0C'

      bsf      STATUS,RP0
      movlw   B'11010111'
      movwf   OPTION_REG
      bcf    STATUS,RP0
      clrf   PORTB
      bsf    STATUS,RP0
      movlw    B'11111110'
      movwf   TRISB
      bcf      STATUS,RP0
      goto   main

Wait   movlw   D'7'
      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


Точно тук програмата изпада в безкраен Loop - T0IF постоянно се сменя м/у 0X0E и 0X0F
Код:
Wait   movlw   D'7'
      movwf   Counter
      clrf   TMR0
again   BCF      INTCON,T0IF
loop   btfss   INTCON,T0IF
      goto   loop


Това ми се струва логично, понеже докато стигне програмата до тази част таймера е навъртял до 0F и btfss вади единица от него и се получава 0E, после goto връща на loop и понеже брояча продължава да върти и добавя на 0E + 1 и става 0F и така до безкрай. Нали уж всички примери в тази книга работели, защо не ми се получава работата, преписал съм всичко точно. Във следващите примери се изполва абсолютно същия код което ме навежда на мисълта че трябва да е верен, но не е. Моля ви се помогнете ми защото съ начинаещ и все пак празници са, смилете се над мен :cry:

п.п. дори програмирах един 16F84A но светодиода не мига.


Чет Дек 27, 2007 2:54 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 10, 2004 9:55 am
Мнения: 1718
Мнение Re: Проблемче със 16F84A и мигащ светодиод
:D
Защо мислиш че е грешно ?
Имаш няколко неща който не си изяснил за да мига тоя светодиод трябва да работи на някаква честота а тя се определя в този контролер от външен кварц и достатъчно много цикли, какъв кварц си сложил опиши схемата ако ти е по лесно начертай я и я покажи защото това също говори за опитната постановка малко или много , може да се окаже че и диода не е където трябва ?
Мигането става като се прави закъснение и те за да го направят голямо са използвали вътрешния таймер с предделител 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
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение Re: Проблемче със 16F84A и мигащ светодиод
wolfshark написа:
Добър вечер и честита коледа на всички!
Мъча се тук с книгата на Млад конструктор PIC Микроконтролери част първа и най-сетне стигнах до примерите. Обаче нещо мигащия светодиод не тръгва... Така като го гледам сорса ми се струва че е грешка в програмата.
Код:
      list   p=16F84A
      #INCLUDE <p16F84A.inc>
      __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

w      EQU      0
f      EQU      1
Counter   EQU      H'0C'

      bsf      STATUS,RP0
      movlw   B'11010111'
      movwf   OPTION_REG
      bcf    STATUS,RP0
      clrf   PORTB
      bsf    STATUS,RP0
      movlw    B'11111110'
      movwf   TRISB
      bcf      STATUS,RP0
      goto   main

Wait   movlw   D'7'
      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


Точно тук програмата изпада в безкраен Loop - T0IF постоянно се сменя м/у 0X0E и 0X0F
Код:
Wait   movlw   D'7'
      movwf   Counter
      clrf   TMR0
again   BCF      INTCON,T0IF
loop   btfss   INTCON,T0IF
      goto   loop


Това ми се струва логично, понеже докато стигне програмата до тази част таймера е навъртял до 0F и btfss вади единица от него и се получава 0E, после goto връща на loop и понеже брояча продължава да върти и добавя на 0E + 1 и става 0F и така до безкрай. Нали уж всички примери в тази книга работели, защо не ми се получава работата, преписал съм всичко точно. Във следващите примери се изполва абсолютно същия код което ме навежда на мисълта че трябва да е верен, но не е. Моля ви се помогнете ми защото съ начинаещ и все пак празници са, смилете се над мен :cry:

п.п. дори програмирах един 16F84A но светодиода не мига.



Ако си писал дословно примера от книгата, си изпуснал 2 реда в началото на програмата, а те са много важни

ORG H'0000'
goto start


Чет Дек 27, 2007 11:58 am
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пон Ное 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
MCLR го свързваш към +5V през резистор от примерно 10 килоома.Между изхода на контролера RB0 и светодиода слагаш един резистор 470 ома.Купи си кварц и два кондензатора 22 пФ и си пусни тактовия генератор както трябва.Иначе ще имаш и други проблеми.


Чет Дек 27, 2007 10:54 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пон Ное 26, 2007 11:34 pm
Мнения: 95
Местоположение: Видин
Мнение 
Ки4о написа:
MCLR го свързваш към +5V през резистор от примерно 10 килоома.Между изхода на контролера RB0 и светодиода слагаш един резистор 470 ома.Купи си кварц и два кондензатора 22 пФ и си пусни тактовия генератор както трябва.Иначе ще имаш и други проблеми.

Кварца утре се заемам с него иначе какво му е на вградения? Чул съм че не е особено точен ама за един мигащ светодиод това предполагам не е проблем.


Пет Дек 28, 2007 12:24 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Яну 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
Профил WWW
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пон Ное 26, 2007 11:34 pm
Мнения: 95
Местоположение: Видин
Мнение 
Забравих да кажа - сложих и тръгна :D
Но пък единият ми контролер изгроря! Вързах го както си му е реда и сложих резистор 220ома през светодиода микроконтролера взе че спря да работи и дори да се програмира. Чипа беше 16LF84A. На следващия не рискувах и сложих 470ома резистор и тръгна. Това ли е било причината за изгарянето му?


Пон Дек 31, 2007 3:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Ти как мислиш ?


Пон Дек 31, 2007 4:33 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пон Ное 26, 2007 11:34 pm
Мнения: 95
Местоположение: Видин
Мнение 
Ами мисля че дори със 220ома тока не е достатъчен че да го изгори. Нали уж може 25ma да пусне


Пон Дек 31, 2007 5:49 pm
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 26, 2005 12:36 am
Мнения: 353
Мнение 
wolfshark написа:
Ами мисля че дори със 220ома тока не е достатъчен че да го изгори. Нали уж може 25ma да пусне


Много си лаконичен в разясненията си и не може да ти се разбере какво точно правиш и откъде ти идва проблема! Опитай се да бъдеш малко по-подробен !

_________________
Сичкото що е транзистор за илядо и пестотин волта се е BU ...


Чет Яну 03, 2008 4:23 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 20, 2006 8:24 pm
Мнения: 3
Мнение 
Тази същата програма, как би изглеждала, ако се напише на C.


Вто Яну 08, 2008 6:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 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
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 20, 2006 8:24 pm
Мнения: 3
Мнение 
Ще те помоля, ако ти се занимава, да я напишеш цялата (с инициализации и т.н ) за да ги сравня с асемблерската и да разбера кое какво заменя.


Вто Яну 08, 2008 8:37 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 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
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

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


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

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