Здравейте отново с поредния новашки въпрос. Някой знае ли как се подкарва CTMU за тъч бутон? Аз пробвам тук, обаче се получава обратното на това, което пише. Използвам документацията на Микрочип само.
Кодът за ADC и CTMU е това:
 |  |  |
 | Код: void touch_setup() {
//CTMUCON - CTMU Control register CTMUCON = 0x1090; //make sure CTMU is disabled // CTMU continues to run when emulator is stopped,CTMU continues // to run in Idle mode, Time Generation mode enabled, Edges are // blocked. No edge sequence order, Analog current source not // grounded, trigger output disabled, Edge2 polarity = positive level, // Edge2 source = source 0, Edge1 polarity = positive level, // Edge1 source = source 0, Set Edge status bits to zero
//CTMUICON - CTMU Current Control Register CTMUICON = 0x0300;
//setup ADC AD1PCFG = 0xFFDF; //RA3(AN5) is analog AD1CHS = 0x0005; //Positive input for MUX A is AN5 AD1CON1 = 0x8000;
AD1CON2 = 0x0000; //Vss & Vdd are references //MUX A, do not scan inputs, 16-word buffer AD1CON3 = 0x0000; AD1CSSL = 0;
//enable CTMU CTMUCONbits.CTMUEN = 1; } |  |
 |  |  |
Тази фунцкия се извиква в началото на програмата. В main() има една while(1), където извиквам следната функция и изпращам резултата към UART-а:
Това е програмата в общи линии. ADC си работи, UART си работи - изпраща някакви стойности и т.н., но не са тези, които трябва. Според Микрочип, без да си докоснал сензора, волтажът който ADC дава е почти Vdd. В момента на докосване този волтаж трябва да падне, заради паралелния капацитет на човешкото тяло. Звучи логично, и си е добре обяснено даже. Моят сензор представлява 15х15мм двустранно фолиран текстолит, като едната страна е маса, а другата е към ADC канала. На същия има и резистор - 4,7 килоома, пак според Микрочипските указания.
Ето това излиза от ADC, без да съм докоснал сензора:
Reading from ADC: 6
Reading from ADC: 692
Reading from ADC: 818
Reading from ADC: 908
Reading from ADC: 972
Reading from ADC: 992
Reading from ADC: 1000
Reading from ADC: 1006
Reading from ADC: 1001
Reading from ADC: 1002
Reading from ADC: 1004
Reading from ADC: 1005
Reading from ADC: 1002
Reading from ADC: 1005
Reading from ADC: 1004
Reading from ADC: 1004
Reading from ADC: 1005
Reading from ADC: 1005
Reading from ADC: 1006
Reading from ADC: 1008
Reading from ADC: 1008
Reading from ADC: 1009
Reading from ADC: 1008
Reading from ADC: 1007
Reading from ADC: 1009
Reading from ADC: 1008
Reading from ADC: 1008
Reading from ADC: 1006
Reading from ADC: 1006
Reading from ADC: 1005
Reading from ADC: 969
Reading from ADC: 440
Reading from ADC: 263
Reading from ADC: 157
Reading from ADC: 83
Reading from ADC: 19
Reading from ADC: 6
Reading from ADC: 687
Reading from ADC: 817
Reading from ADC: 907
Reading from ADC: 973
Reading from ADC: 992
Reading from ADC: 999
Reading from ADC: 1007
Reading from ADC: 1008
Reading from ADC: 1008
Reading from ADC: 1008
Reading from ADC: 1007
Reading from ADC: 1008
Reading from ADC: 1008
Reading from ADC: 1009
Reading from ADC: 1004
Reading from ADC: 1007
Ако всички стойности са над 1000, добре - но те спадат до почти 0. Нямам осцилоскоп вкъщи и не мога да видя какво всъщност се случва. А когато си сложа пръста на сензора, волтажът вместо да падне, се покачва:
Reading from ADC: 1023
Reading from ADC: 1023
Reading from ADC: 1023
Reading from ADC: 1023
Reading from ADC: 1023
Reading from ADC: 1023
Reading from ADC: 1023
Reading from ADC: 1023
Reading from ADC: 1023
Ето това е. Точно обратното на това, което трябва да се случи.
Опитах с добавяне на време между четенето на сензора, но си е все същото. Повече време за зареждане - разреждане също не сработва.
Малко помощ е добре дошла

Сигурно е нещо малко, но като не мога да го видя - трудна работа.