Отговори на тема  [ 9 мнения ] 
Малко помощ за грешен код 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 27, 2013 9:36 pm
Мнения: 30
Мнение Малко помощ за грешен код
Здравейте! Имам нужда от малко помощ с кода на един 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


Чет Фев 28, 2013 11:45 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение Re: Малко помощ за грешен код
То, сигурно мига, ама като нямаш осцилоскоп да го свържеш на порта не виждаш генерациите (сигурно са с период около 10ms при 4 MHz кварц). :)


Чет Фев 28, 2013 12:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение 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), както ти се иска.


Чет Фев 28, 2013 1:49 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 27, 2013 9:36 pm
Мнения: 30
Мнение Re: Малко помощ за грешен код
Много благодаря за помощта. Добавих командата clrf Cicle_counter на точното място и схемата заработи както трябва. За да не отварям нова тема искам да задам друг въпрос. От същия чип подавам импулси към HCF4017 за да управлявам динамично 10 колони със светодиоди. Изходите на делителя ги включвам през 2,2 Ком резистор на базата на един биполярен 2Т6551. До тук всичко е наред. Но защо когато заменя транзистора с МОS (IRF630 или STP60nNF10) светодиодите започват да светят много по слабо? Преди гейта съм поставил 20 ома а между гейт и сорс 20Кома.


Чет Фев 28, 2013 2:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Малко помощ за грешен код
В тая конфигурация IRF630 далеч не е "мос транзистора" за там. Има мосфети с доста по малък капацитет на гейта и гейтовото съпротивление го смяташ толкова че да не изгори изхода на тва с което го драйвиш - ако е ттл-ка между 15 и 30 милиампера - съпротивление около 200 до 500 ома.


Чет Фев 28, 2013 4:16 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 27, 2013 9:36 pm
Мнения: 30
Мнение Re: Малко помощ за грешен код
Смених транзистора и резистора и всичко се оправи.Благодаря


Чет Фев 28, 2013 7:11 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 27, 2013 9:36 pm
Мнения: 30
Мнение Re: Малко помощ за грешен код
Здравейте отново!
Имам нужда от някои насоки. Направих си една мигалка от 800 светодиода. 10 колони по 80 упреснявани динамично като използвам ИС 4017 и 74НС595. Данните ги изваждам от една таблица. Проблема е че сега че, искам да подавам на всяка колона различни данни от различни таблици за да мога да визуализирам различни фигури. Може ли някой да помогне като даде някакво обяснение как да стане това или линк в интернет. Използвам PIC16f628A.


Пон Окт 21, 2013 9:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Малко помощ за грешен код
Ами честно казано не е най-подходящия пик за целта. Нито рам има нито флаш достатъчно че да можеш да вкараш "няколко картинки" щото всяка "картинка" ти е 100 байта в най-добрия случай... В еепрома можеш да вкараш ... една картинка. в рамта две ама няма да остане рам за програмата. Във флаша теоретично 20 картинки с retlw таблица ама гимнастиката ще е титанична. А иначе за направата - ами подреждаш си битмап-а подходящо в рамта и после байт по байт (колона по колона) на 595-ците ... Та съвета ми е да вземеш първо един 18F1320 щото отговаря по крака. Можеш да вкараш картинките във флаша и да ги четеш директно от там по много по-безболезнен начин отколкото с 628-цата.


Вто Окт 22, 2013 12:20 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 27, 2013 9:36 pm
Мнения: 30
Мнение Re: Малко помощ за грешен код
Благодаря за информацията. Като за начало ще поработя върху 16-ката и след това ще премина на препоръчаният от вас.


Вто Окт 22, 2013 7:45 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 9 мнения ] 

Кой е на линия

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


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

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