Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
09.09.2011, 09:30
|
|
Частый гость
Регистрация: 07.08.2011
Адрес: Уфа
Сообщений: 22
Сказал спасибо: 10
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
Re: PIC16F876
Еще отличие 876 может быть в максимальной частоте тактирования 4, 10, 20 МГЦ в то время 876А обычно с максимальной 20МГц, может и другие бывают, но не встречал. Основное отличие в аналоговом компараторе, у 876 его нет.
|
|
|
|
09.09.2011, 10:39
|
|
Частый гость
Регистрация: 12.05.2009
Сообщений: 44
Сказал спасибо: 3
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: PIC16F876
------------
Последний раз редактировалось korsaj; 09.09.2011 в 10:45.
|
|
|
|
09.09.2011, 10:40
|
|
Частый гость
Регистрация: 12.05.2009
Сообщений: 44
Сказал спасибо: 3
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: PIC16F876
Сообщение от Pavel55
|
Подскажите а как тогда быть со второй кнопкой?. Кажись всеровно необходимо применять таймеры и прерывания. Пока кнопка нажата идет отчет, если отпустил раньше отчет возвращается к нулю. Может есть класический пример? Спасибо.
|
Вот пример, работы с прерываниями для тармера только для p16f874a. немного запутано, но все объяснимо, появятся вопросы спрашивай.
Код:
|
include "p16f874a.inc"
__config _PWRTE_ON & _CP_OFF & _BODEN_ON &_CPD_OFF & _DEBUG_OFF & _WRT_OFF & _WDT_OFF & _XT_OSC
;--------------------------------------------------------------------------------------------
; БЛОК ПЕРЕМЕННЫЕ
;--------------------------------------------------------------------------------------------
i equ 0x30
j equ 0x31
unithour equ 0x32 ;Единицы часов
unitmin equ 0x33 ;Единицы минут
helfsec equ 0x34
sec equ 0x35
buferTXD equ 0x36 ;Буфер передачи
t equ 0x37
Tc equ 0x38
flag equ 0x39
mode1 equ 0x00
mode2 equ 0x02
fbtmode equ 0x01 ;Признак нажатия кнопки "Mode"
btflag equ 0x3A
bthour equ 0x03
btmin equ 0x02
btmode equ 0x01
btres equ 0x00
volt equ 0x3B
decvolt equ 0x3C
unitvolt equ 0x3D
degvolt equ 0x3E
setpoint equ 0x3F
colon equ 0x04
letter_v equ 0x04
point equ 0x02
temp equ 0x40
W_temp equ 0x41
STATUS_temp equ 0x42
decademin equ 0x43 ;Десятки минут
decadehour equ 0x44 ;Десятки часов
temp_1 equ 0x45
num0 equ 0x46
num1 equ 0x47
num2 equ 0x48
num3 equ 0x49
Bank_0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm
Bank_1 macro
bsf STATUS,RP0
bcf STATUS,RP1
endm
Bank_2 macro
bcf STATUS,RP0
bsf STATUS,RP1
endm
Bank_3 macro
bsf STATUS,RP0
bsf STATUS,RP1
endm
CS macro bit
if bit
bsf PORTD,5
else
bcf PORTD,5
endif
endm
WR macro bit
if bit
bsf PORTC,3
else
bcf PORTC,3
endif
endm
CD macro bit
if bit
bsf PORTC,5
else
bcf PORTC,5
endif
endm
;--------------------------------------------------------------------------------------------
; Начало программы
;--------------------------------------------------------------------------------------------
org 0x00
goto Start
;--------------------------------------------------------------------------------------------
; Обработка прерывания
;--------------------------------------------------------------------------------------------
org 0x04
movwf W_temp ;Сохраняем аккамулятор
swapf STATUS,W
movwf STATUS_temp
btfsc INTCON,T0IF ;Прерывание по TMR0?
goto ClearIntTMR0 ;Да переход на обработчик прерывания
endInt
swapf STATUS_temp,W
movwf STATUS
swapf W_temp,F
swapf W_temp,W ;Востанавливаем значение аккамалятора
retfie
ClearIntTMR0
movlw 0x15 ;Дополнительная задержка
movwf t
CITMR01
decfsz t,F
goto CITMR01
nop
nop
bcf INTCON,T0IF ;Очишаем флаг прерывания по TMR0
Bank_0
movlw 0x3D ;Запускаем таймер на счет (задержка 50mC)
movwf TMR0
incf Tc,F
movf Tc,W ;Переход к обработке АЦП каждые 0.5С (10*50mC)
bcf STATUS,Z
xorlw 0x07
btfsc STATUS,Z
goto ADC
movf Tc,W ;Переход к обработке нажатия кн. каждые 0.5С (10*50mC)
bcf STATUS,Z
xorlw 0x08
btfsc STATUS,Z
goto Button
movf Tc,W ;Переход к обработке часов каждые 0.5С (10*50mC)
bcf STATUS,Z
xorlw 0x09
btfsc STATUS,Z
goto PointBlink
movf Tc,W ;Переход к обработке RAMLCD каждые 0.5С (10*50mC)
bcf STATUS,Z
xorlw 0x0A
btfsc STATUS,Z
goto OutLCD
goto endInt
;--------------------------------------------------------------------------------------------
; НАСТРОЙКА МИКРОКОНТРОЛЛЕРА
;--------------------------------------------------------------------------------------------
Start
;Очистка памяти регистров по адрессу 0х30..0х49
movlw 0x30 ;initialize pointer
movwf FSR ; to RAM
St3
clrf INDF
incf FSR,F ;inc pointer
movf FSR,W
bcf STATUS,Z
xorlw 0x49
btfss STATUS,Z
goto St3
;Установка нолей индикатора часов и гашение знака "C" и "V"
movlw 0x20 ;initialize pointer
movwf FSR
movlw b'00000000'
movwf INDF
incf FSR,F ;inc pointer
movlw b'11111001'
movwf INDF
incf FSR,F
movlw b'01101111'
movwf INDF
incf FSR,F ;inc pointer
movwf INDF
Bank_1 ;Bank 1
movlw b'11010111'
movwf OPTION_REG
nop
nop
Bank_0 ;Bank 0
movlw 0x3D ;Установка таймера
movwf TMR0
clrf PORTA
Bank_1 ;Bank 1
movlw b'11111111' ;RA0..RA7 - in
movwf TRISA
clrf ADCON1 ;[7] левое выравнивание, Vref+ = Vdd Vref- = Vss
Bank_0
movlw b'01011001' ;[7,6] Fosc/8, [5..3] AN3, [2] перобразование отключено, [0] ADC - включен
movwf ADCON0
clrf PORTC
Bank_1 ;Bank 1
movlw b'11010111' ;RC5, RC3 - out
movwf TRISC
Bank_0 ;Bank 0
clrf PORTD
Bank_1 ;Bank 1
movlw b'11011111' ;RD5 - out, RD3..RD0 - in
movwf TRISD
Bank_0 ;Bank 0
CD 1
WR 1
CS 1
Bank_1 ;Bank 1
clrf Tc
call EPROMtoRAM
movlw b'11110000'
movwf INTCON ;Разрешение прерывания TMR0.
;--------------------------------------------------------------------------------------------
; ГЛАВНАЯ ПРОГРАММА
;--------------------------------------------------------------------------------------------
OsProg
call InitLCD
aa
goto aa |
Последний раз редактировалось korsaj; 09.09.2011 в 10:43.
|
|
|
|
09.09.2011, 11:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: PIC16F876
Вот здесь описан алгоритм.
Дальше есть код. Но на С...
|
|
|
|
09.09.2011, 19:01
|
|
Прохожий
Регистрация: 17.06.2008
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: PIC16F876
Сообщение от MisterDi
|
В первую очередь алгоритмом программирования. 876 пишется по словам, а 876А - блоками по 8 слов. Поэтому бывают проблемы со старыми версиями самодельных программаторов.
Кроме того по-моему есть небольшие различия во внутренней структуре, но это нужно внимательно смотреть документацию.
|
Понял спасибо приму к сведенью.Просто немогу запустить устройство кто до меня повторял запускалось сразу а у меня ни как не хочет может кто подскажет ? вот сылка http://www.cqham.ru/G6LVB.htm и почемуто кварц не возбуждается ??
Последний раз редактировалось ua6ued; 09.09.2011 в 19:11.
|
|
|
|
04.10.2011, 23:31
|
|
Частый гость
Регистрация: 09.12.2009
Сообщений: 45
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: PIC16F876
добрый день мужики
дело такое нужно измерять ток. проблема вот в чём, хотел сигнал усиливать lm358 и оцифровывать pic16f690, но вот беда как я понял в нём нельзя выбрать источник верхнего и нижнего напряжения, как в pic16f876A, а только источник верхнего напряжения. что очень досадно.
подтвердите прав я в вышеописанном или нет.
|
|
|
|
04.10.2011, 23:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.10.2004
Адрес: Нижний Новгород
Сообщений: 1,746
Сказал спасибо: 416
Сказали Спасибо 1,240 раз(а) в 551 сообщении(ях)
|
Re: PIC16F876
Сообщение от ОКТОГЕН
|
нельзя выбрать источник верхнего и нижнего напряжения
|
Если вы про опорное - то Вам нафига оно надо. Что будете ставить два опорника и измерять между ними?
Если обычное измерение от "0" и до вечера - разницы нет.
|
|
|
|
04.10.2011, 23:58
|
|
Частый гость
Регистрация: 09.12.2009
Сообщений: 45
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: PIC16F876
да беда в том что на lm358 сделан усилитель с коэффициентом усиления 100. из-за чего даже при холостом ходе на выходе операционника присутствует 0.17 вольт. это то и затрудняет измерение.
вот я и хотел нижнюю опорку привязать тоже к 0.17в.
|
|
|
|
05.10.2011, 00:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.10.2004
Адрес: Нижний Новгород
Сообщений: 1,746
Сказал спасибо: 416
Сказали Спасибо 1,240 раз(а) в 551 сообщении(ях)
|
Re: PIC16F876
Сообщение от ОКТОГЕН
|
lm358
|
1. Применить другие операционники
2. Изменить схему питания ОУ.
3. Ввести корректирующий коэфф.
1 и 3 не дадут высокой точности.
|
|
|
|
05.10.2011, 00:07
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: PIC16F876
Да 358 ниразу не измерительный операционник. Коррекцию надо делать програмно. Но возле нуля и питания там всегда каша будет.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:19.
|
|