Страница 1 из 1
Не работает сенсорный модуль CPS 12F1822
Добавлено: Вт фев 12, 2013 17:19:38
artmasterpro
Уже 3й день не могу найти причину. не получается запустить модуль емкостного сенсора CPS встроенный в контроллер 12F1822 все делаю по даташиту. Быть может у кого нибудь есть рабочий пример, если нет ниже выкладываю код я его обрезал до банального.
Суть такая: Конфигурируем регистр CPSCON0 и регистр T1CON таймера1. Таймер тактируем от модуля CPS следовательно он должен переполнится и зажечь светодиод.
И тут происходит следующее, в протеусе все так и работает а вот в железе, нет светодиод не зажигается.
Помогите пожалуйста очень нужно!
Код: Выделить всё
#include <htc.h>
#include <stdio.h>
#include <pic12f1822.h>;
__CONFIG(WDTE_OFF & FOSC_INTOSC & PWRTE_OFF & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF & WRT_OFF & PLLEN_OFF & STVREN_OFF & LVP_OFF );
unsigned int porog, tmp;
void interrupt isr(void){
if (TMR1IF == 1) {
RA0 = 1;
TMR1IF = 0;
}
}
void
main (void)
{
OSCCON = 0b01101011; // 4Mhz
GIE = 1;
PEIE=1;
OPTION_REG=0b00100000;
INTCON=0b11100000;
CPSCON0 = 0b10001100;
ANSA2 = 1;// set sense-input to analog
TRISA2 = 1;
PORTA=0;
T1CON = 0b11000001; // TMR1 capacitive sensing osc, prescaler 1/1, decicated osc disabled,no synch,timer1 enabled
T1GCON = 0;
TMR1IE = 1;
TMR1L = 0x00;
TMR1H = 0x00;
TRISA0 = 0;
RA0 = 0;
while (1);
{}
}
}
Re: Не работает сенсорный модуль CPS 12F1822
Добавлено: Чт июн 11, 2020 09:44:31
ИС-Х
Мож здесь кто ответит.
Разбираюсь с модулем тач CSM. Для начала написал тестовый код для примерного определения частоты встроенного генератора CSM на два пина без пальцев. Пульсы с гены считает TMR1, базовое время формируется по переполнению TMR0. Все это рекомендованно по даташиту.
Поскольку в МПлабе генератор CSM не симулируется, то просто сохраняю значение счетчика TMR1 в EEPROM, а потом считываю его программатором PIckit3.
В результате читаю из EEPROM только нули. Т.е. или генератор CPS не генерит, или TMR1 его не считает. Однако, если источником для TMR1 выбрать Tosc/4, то все пишется исправно, как и в симуляторе.
Испытывал два нетронутых 12F1822, потом портировал на 16F1827 того же семейства, но все по прежнему.
Посмотрел осциллом пины сенсоров - никаких сигналов не наблюдается, а ведь должна быть генерация. Похоже, модуль CSM не генерит почему-то...
Что я делаю не так?
Спасибо.
Спойлер
Код: Выделить всё
#include <P12F1822.inc> ;f=32,0 MHz INTRC
list P=12F1822
__CONFIG _CONFIG1,_PWRTE_ON&_MCLRE_OFF&_IESO_OFF&_FOSC_INTOSC&_FCMEN_OFF;&_CP_ON
cblock 0x20
STATE,MEM,MEM1,NL0,NH0,NL1,NH1,SET_NL0,SET_NH0,SET_NL1,SET_NH1
PARA1
endc
;-------------------------------------------------------
#define SV0 PORTA,4 ;светодиод SV0
#define SV1 PORTA,5 ;светодиод SV1
;#define CPS0 PORTA,0 ;touchsensor CPS0
;#define CPS1 PORTA,1 ;touchsensor CPS1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ИНИЦИАЛИЗАЦИЯ
org 0x00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x00
GOTO INIT_ALL
org 0x04
GOTO SRV_INT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIT_ALL
BANKSEL PORTA
CLRF PORTA
;-------------------- ;настройка блока CPS
MOVLW B'11001000' ;ток Medium from FVR
;MOVLW B'10001000' ;ток Medium Fixed Voltage References
MOVWF CPSCON0 ;Fixed Voltage References
MOVLW B'00000000' ;канал сенсора CPS0
MOVWF CPSCON1
MOVLW B'11000101' ;источник для TMR1 от CPS
;MOVLW B'00000101' ;источник для TMR1 от OSC/4
MOVWF T1CON ;включен с преддел. 1:1
;MOVLW B'10000001' ;Gate от переполнения TMR0
;MOVWF T1GCON ;
;BSF T1GCON,T1GTM ;Togle mode
;BSF T1GCON,T1GPOL ;Polarity
;-------------------- ;настройка портов
BANKSEL LATA
CLRF LATA
MOVLW B'10001010' ;
MOVWF FVRCON ;выход 2,048V
BANKSEL ANSELA
MOVLW B'00000011'
MOVWF ANSELA ;сенсор CPS0,CPS1 аналог
BANKSEL TRISA
MOVLW B'00000011'
MOVWF TRISA ;сенсор CPS0,CPS1 на вход
;MOVLW B'00001100' ;неиспользуемый в CPS канал
;MOVWF ADCON0
;-------------------- ;настройка INTOSC и WDT
MOVLW B'11110000' ;F = 32 MHz INTRCIO
MOVWF OSCCON
MOVLW B'01010001' ;F = 32 MHz INTRCIO
MOVWF OSCSTAT
MOVLW B'00001000' ;16 msec
MOVWF WDTCON
;-------------------- ;настройка TMR0, TMR2
MOVLW B'00000110' ;настройка таймера TMR0
MOVWF OPTION_REG ;с преддел. 1:128
BANKSEL TMR2
MOVLW 0xFF ;
MOVWF PR2 ;T=4*Tosc*(PR2+1)*(TMR2 Prescale)
MOVLW B'00000111' ;включить TMR2
MOVWF T2CON ;предделитель TMR2 1:64
;BSF INTCON,PEIE ;разрешить прерывание периферии
;-----------------------
ClrMem MOVLW 0x20 ;очистка памяти RAM
MOVWF FSR0 ;
ClrMem1 CLRF INDF0
INCF FSR0
BTFSS FSR0,7 ;всего кол-во памяти
GOTO ClrMem1
;-------------------------------
MOVLW 0 ;задержка 0,5 сек
MOVWF MEM
CALL D2
DECFSZ MEM
GOTO $-2
;-------------------------------
CALL NO_FINDER ;начальные значения CPS без пальца
;BSF INTCON,TMR0IE ;разрешить прерывание TMR0
;BSF INTCON,GIE ;разрешить прерывания
;BANKSEL PIE1
;BSF TMR2IE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN CALL D2 ;задержка 2 мсек
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NO_FINDER ;сохраняем начальные значения без пальца в EEPROM
BANKSEL TMR0
CLRF CPSCON1 ;канал 0
CLRF EE_ADR ;нулевой адрес
;BANKSEL FVRCON
;BTFSS FVRCON,FVRRDY
;GOTO NO_FINDER
;BANKSEL TMR0
BSF T1CON,TMR1ON ;включить TMR1
CLRF TMR0
CLRF TMR1H
BCF PIR1,TMR1IF
CLRF TMR1L
BCF INTCON,TMR0IF ;ожидание 2 mсек
CLRWDT
BTFSS INTCON,TMR0IF
GOTO $-2
BCF T1CON,TMR1ON ;стоп TMR1
BTFSC PIR1,TMR1IF ;если переполнение TMR1
RETURN ;то выход без записи
MOVFW TMR1H
MOVWF EE_DATA
CALL EE_WR ;сохраняем TMR1H в EEPROM
INCF EE_ADR ;следующий адрес
MOVFW TMR1L
MOVWF EE_DATA
CALL EE_WR ;сохраняем TMR1L в EEPROM
INCF CPSCON1 ;следующий канал 1
INCF EE_ADR ;следующий адрес
BSF T1CON,TMR1ON ;включить TMR1
CLRF TMR0
CLRF TMR1H
BCF PIR1,TMR1IF
CLRF TMR1L
BCF INTCON,TMR0IF ;ожидание 2 mсек
CLRWDT
BTFSS INTCON,TMR0IF
GOTO $-2
BCF T1CON,TMR1ON ;стоп TMR1
BTFSC PIR1,TMR1IF ;если переполнение TMR1
RETURN ;то выход без записи
MOVFW TMR1H
MOVWF EE_DATA
CALL EE_WR ;сохраняем TMR1H в EEPROM
INCF EE_ADR ;следующий адрес
MOVFW TMR1L
MOVWF EE_DATA
CALL EE_WR ;сохраняем TMR1L в EEPROM
RETURN
Re: Не работает сенсорный модуль CPS 12F1822
Добавлено: Чт июн 11, 2020 11:34:14
BOB51
У ПИКов надо сначала все ерраты просмотреть...
Тем более, кристалл из новых "энхансед" - там свои особенности.
В живую пока не всречались...
Из теории (ранее сделанной подборки)( разве что это есть:

Re: Не работает сенсорный модуль CPS 12F1822
Добавлено: Чт июн 11, 2020 14:05:52
ИС-Х
[uquote="BOB51",url="/forum/viewtopic.php?p=3853623#p3853623"]Тем более, кристалл из новых "энхансед" - там свои особенности.[/uquote]Уже давно не новые.
Спасибо, все это уже скачал ранее, но, увы, по поводу CPS там ничего нового.
Re: Не работает сенсорный модуль CPS 12F1822
Добавлено: Чт июн 11, 2020 16:11:41
anatol378
А выбор канала почему не делаете CPSCON1= 0bххххххххх
Re: Не работает сенсорный модуль CPS 12F1822
Добавлено: Чт июн 11, 2020 17:39:30
ИС-Х
Еще как делаю! смотрите в тексте кода.