| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Малко помощ за грешен код http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=11149 |
Страница 1 от 1 |
| Автор: | Stefan Bu [ Чет Фев 28, 2013 11:45 am ] |
| Заглавие: | Малко помощ за грешен код |
Здравейте! Имам нужда от малко помощ с кода на един pic16f84a. Искам да използвам прекъсването на TMR0 за редуване на високо и ниско ниво на RB0, но с кода написан по-долу изхода стои вдигнат на 3 волта без да сваля на ниско ниво. Може ли някой да помогне като ми каже къде ми е грешката. Благодаря! list p=16F84A #include <P16F84.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC w EQU 0 f EQU 1 Begin_value EQU D'96' ;*********************************** CBLOCK H'0C' Cicle_counter ENDC #define DATAA PORTB,0 ;*********************************** ORG H'0000' goto start ORG H'0004' goto Int_service ;************************************* start bcf STATUS,RP0 clrf PORTB clrf PORTA bsf STATUS,RP0 movlw B'11111110' movwf TRISB movlw B'11111111' movwf TRISA bcf STATUS,RP0 goto main ;************************************* Int_service btfss INTCON,T0IF goto end_int TMR0_int movlw Begin_value movwf TMR0 call Inc_timer end_int bcf INTCON,T0IF retfie ;******************************************** Inc_timer incf Cicle_counter,w xorlw D'200' btfsc STATUS,Z goto migane incf Cicle_counter,f return migane btfsc DATAA goto turn_off bsf DATAA return turn_off bcf DATAA return ;*********************************************** Timer_config bsf STATUS,RP0 movlw B'10000100' movwf OPTION_REG bcf STATUS,RP0 clrf Cicle_counter movlw Begin_value movwf TMR0 return ;*********************************************** main call Timer_config movlw B'10100000' movwf INTCON loop nop goto loop END |
|
| Автор: | fan [ Чет Фев 28, 2013 12:57 pm ] |
| Заглавие: | Re: Малко помощ за грешен код |
То, сигурно мига, ама като нямаш осцилоскоп да го свържеш на порта не виждаш генерациите (сигурно са с период около 10ms при 4 MHz кварц). |
|
| Автор: | CarBeta [ Чет Фев 28, 2013 1:49 pm ] |
| Заглавие: | Re: Малко помощ за грешен код |
По принцип мига, но явно не както очакваш. Грешката ти е следната: При прекъсване от TMR0 увеличаваш Cicle_counter с 1. Дотук добре, но първо го инкрементираш във W, проверяваш дали е 200 и ако не е инкрементираш и регистъра. Когато Cicle_counter достигне 199 и го инкрементираш във W се получава 200 и се изпълнява подпрограма за инвертиране на PORTB, 0, но никъде след излизане от подпрограмите не променяш Cicle_counter, който си остава със стойност 199. При следващото прекъсване, W пак ще има стойност 200 и отново се изпълнява реверсиране на PORTB, 0 т.е. започва реверсиране на PORTB, 0 при всяко прекъсване(~5mSec) а не след 200 прекъсвания(~1Sec), както ти се иска. |
|
| Автор: | Stefan Bu [ Чет Фев 28, 2013 2:57 pm ] |
| Заглавие: | Re: Малко помощ за грешен код |
Много благодаря за помощта. Добавих командата clrf Cicle_counter на точното място и схемата заработи както трябва. За да не отварям нова тема искам да задам друг въпрос. От същия чип подавам импулси към HCF4017 за да управлявам динамично 10 колони със светодиоди. Изходите на делителя ги включвам през 2,2 Ком резистор на базата на един биполярен 2Т6551. До тук всичко е наред. Но защо когато заменя транзистора с МОS (IRF630 или STP60nNF10) светодиодите започват да светят много по слабо? Преди гейта съм поставил 20 ома а между гейт и сорс 20Кома. |
|
| Автор: | Cekins [ Чет Фев 28, 2013 4:16 pm ] |
| Заглавие: | Re: Малко помощ за грешен код |
В тая конфигурация IRF630 далеч не е "мос транзистора" за там. Има мосфети с доста по малък капацитет на гейта и гейтовото съпротивление го смяташ толкова че да не изгори изхода на тва с което го драйвиш - ако е ттл-ка между 15 и 30 милиампера - съпротивление около 200 до 500 ома. |
|
| Автор: | Stefan Bu [ Чет Фев 28, 2013 7:11 pm ] |
| Заглавие: | Re: Малко помощ за грешен код |
Смених транзистора и резистора и всичко се оправи.Благодаря |
|
| Автор: | Stefan Bu [ Пон Окт 21, 2013 9:57 pm ] |
| Заглавие: | Re: Малко помощ за грешен код |
Здравейте отново! Имам нужда от някои насоки. Направих си една мигалка от 800 светодиода. 10 колони по 80 упреснявани динамично като използвам ИС 4017 и 74НС595. Данните ги изваждам от една таблица. Проблема е че сега че, искам да подавам на всяка колона различни данни от различни таблици за да мога да визуализирам различни фигури. Може ли някой да помогне като даде някакво обяснение как да стане това или линк в интернет. Използвам PIC16f628A. |
|
| Автор: | Cekins [ Вто Окт 22, 2013 12:20 pm ] |
| Заглавие: | Re: Малко помощ за грешен код |
Ами честно казано не е най-подходящия пик за целта. Нито рам има нито флаш достатъчно че да можеш да вкараш "няколко картинки" щото всяка "картинка" ти е 100 байта в най-добрия случай... В еепрома можеш да вкараш ... една картинка. в рамта две ама няма да остане рам за програмата. Във флаша теоретично 20 картинки с retlw таблица ама гимнастиката ще е титанична. А иначе за направата - ами подреждаш си битмап-а подходящо в рамта и после байт по байт (колона по колона) на 595-ците ... Та съвета ми е да вземеш първо един 18F1320 щото отговаря по крака. Можеш да вкараш картинките във флаша и да ги четеш директно от там по много по-безболезнен начин отколкото с 628-цата. |
|
| Автор: | Stefan Bu [ Вто Окт 22, 2013 7:45 pm ] |
| Заглавие: | Re: Малко помощ за грешен код |
Благодаря за информацията. Като за начало ще поработя върху 16-ката и след това ще премина на препоръчаният от вас. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|