Микроконтролери и електроника
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/