Hallo zusammen,
ich bin gerade dabei mich in die QTouch Libraries von Atmel
einzuarbeiten. Zur Verfügung stehen mir die neuesten SOftwarefiles sowie
das EVK2080A mit ATmega88.
Ich möchte das Beispiel von Atmel um die Möglichkeit Daten per TWI zu
senden ergänzen; im großen und ganzen funktioniert das auch, das einzige
Problem ist der Rotor! Da habe ich wohl irgendwas nicht verstanden. Ich
entnehme den Unterlagen von Atmel das ein 2 Variablen großes Array für
die Rotor- bzw. Slider-Werte angelegt wird (je 16Bit). Aber den Rotor
kann ich nicht abfragen, nur den Slider. Im QTouch Studio funktioniert
alles einwandfrei, müsste also richtig konfiguriert sein. Hat da schon
jemand Erfahrungen gemacht?
Anbei noch meine Funktion zur Hilfe:
1 | void report_twi_data(void)
|
2 | {
|
3 | uint8_t i;
|
4 | uint8_t sensor = 0;
|
5 | uint16_t value = 0;
|
6 | uint8_t qt_rotor_slider_select = 0;
|
7 | uint8_t twi_trials = 0;
|
8 | uint8_t state = *qt_measure_data.qt_touch_status.sensor_states;
|
9 |
|
10 | for(i=0; i<QT_NUM_CHANNELS; i++)
|
11 | {
|
12 | sensor = (sensor_config[i] & SENSOR_TYPE);
|
13 | switch(sensor)
|
14 | {
|
15 | case SENSOR_TYPE_KEY:
|
16 | value = state & DETECT;
|
17 | break;
|
18 |
|
19 | case SENSOR_TYPE_ROTOR:
|
20 | case SENSOR_TYPE_SLIDER:
|
21 | value = qt_measure_data.qt_touch_status.rotor_slider_values[qt_rotor_slider_select];
|
22 | qt_rotor_slider_select++;
|
23 | break;
|
24 |
|
25 | default: value = 0;
|
26 | }
|
27 |
|
28 | if(value != qt_previous_value[i])
|
29 | {
|
30 | sensor = (sensor << 4) | i;
|
31 | qt_previous_value[i] = value;
|
32 |
|
33 | do
|
34 | {
|
35 | if(!report_sensor(sensor, value))
|
36 | twi_trials++;
|
37 | else
|
38 | break;
|
39 | }while(twi_trials < TWI_TRIALS_MAX);
|
40 | }
|
41 | state >>= 1;
|
42 | }
|
43 | }
|
robbse