Не работает сенсорный модуль CPS 12F1822

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Прорезались зубы
Аватара пользователя
Сообщения: 241
Зарегистрирован: Пт янв 18, 2008 01:41:27

Сообщение 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);
 
 {}
 }

}

Главная заповедь электронщика:- Не крути две ручки сразу
Реклама
Встал на лапы
Сообщения: 108
Зарегистрирован: Чт авг 01, 2013 16:42:32

Сообщение ИС-Х »

Мож здесь кто ответит.
Разбираюсь с модулем тач 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
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

У ПИКов надо сначала все ерраты просмотреть...
Тем более, кристалл из новых "энхансед" - там свои особенности.
В живую пока не всречались...
Из теории (ранее сделанной подборки)( разве что это есть:
80502A_errata.pdf
(226.77 КБ) 374 скачивания
80502E_errata.pdf
(310.52 КБ) 248 скачиваний
:dont_know:
Встал на лапы
Сообщения: 108
Зарегистрирован: Чт авг 01, 2013 16:42:32

Сообщение ИС-Х »

[uquote="BOB51",url="/forum/viewtopic.php?p=3853623#p3853623"]Тем более, кристалл из новых "энхансед" - там свои особенности.[/uquote]Уже давно не новые.
Спасибо, все это уже скачал ранее, но, увы, по поводу CPS там ничего нового.
Реклама
Эиком - электронные компоненты и радиодетали
Мудрый кот
Аватара пользователя
Сообщения: 1833
Зарегистрирован: Вс окт 04, 2009 13:23:12
Откуда: н. новгород

Сообщение anatol378 »

А выбор канала почему не делаете CPSCON1= 0bххххххххх
Лучше умному тупить, чем тупому умничать
Реклама
Встал на лапы
Сообщения: 108
Зарегистрирован: Чт авг 01, 2013 16:42:32

Сообщение ИС-Х »

Еще как делаю! смотрите в тексте кода.
Реклама
Ответить

Вернуться в «PIC»