Atmega16 ADC / Touchscreen

OP #692572
Lesenswert?
• ▲
▼
Hallo zusammen,

Ich hab eine Frage und zwar benutze Ich zum auslesen der ADC Port's den 
Tutorial Code vom AVR-GCC Code.

Ich habe mein Touchscreen das Resistiv arbeitet, von PIN1-4 an PA0-PA3 
meines Atmegas angeschlossen.

Hab nun folgende Seite gefunden wo steht:
"Touchscreen x read, Set PF0 high and PF2 low and read PF1 or PF3.
Touchscreen y read, Set PF1 high and PF3 low and read PF0 or PF2."

Wobei PF bei mir zu ADC ersetzt wird.

Die Pins sind jeweils mit 100 Ohm wiederständen an den Ports 
angeschlossen.

Ich hab nun aktuell folgenden Code:
1
uint16_t ReadChannel(uint8_t mux)
2
{
3
  uint8_t i;
4
  uint16_t result;
5
 
6
  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler 
7
                               // setzen auf 8 (1) und ADC aktivieren (1)
8
 
9
  ADMUX = mux;                      // Kanal waehlen
10
  ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen 
11
 
12
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
13
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
14
  ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung 
15
  while ( ADCSRA & (1<<ADSC) ) {
16
     ;     // auf Abschluss der Konvertierung warten 
17
  }
18
  result = ADCW;  // ADCW muss einmal gelesen werden,
19
                  // sonst wird Ergebnis der nächsten Wandlung
20
                  // nicht übernommen.
21
 
22
  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
23
  result = 0; 
24
  for(i=0; i<3; i++) {
25
    // Eine Wandlung
26
    ADCSRA |= (1<<ADSC);
27
    // Auf Ergebnis warten...
28
    while(ADCSRA & (1<<ADSC));
29
    
30
    result += ADCW;
31
  }
32
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
33
 
34
  result /= 3;                     // Summe durch vier teilen = arithm. Mittelwert
35
 
36
  return result;
37
}
38

39
void debug(void)
40
{
41
  char string[100];
42
  uint16_t adcval1;
43
  uint16_t adcval2;
44
  uint16_t adcval3;
45
  uint16_t adcval4;
46

47
  DDRA  |=  (1<<PA0) | (1<<PA2); // ADC0 & ADC2 = Output
48
  PORTA  |=  (1<<PA0);   //  ADC0 = High
49
  PORTA  &=   ~(1<<PA2);  // ADC2 = low
50
  DDRA  &=  ~(1<< PA1) | (1<< PA3); // ADC1 & ADC3 = Input
51
  _delay_ms(20);
52

53
  adcval4 = ReadChannel(3); /* MUX-Bits auf 0b0011 -> Channel 3 */
54
  adcval4 = 1024 - adcval4;
55

56
  DDRA  |=  (1<<PA1) | (1<<PA3); // ADC1 & ADC3 = Output
57
  PORTA  |=  (1<<PA1);   //  ADC1 = High
58
  PORTA  &=   ~(1<<PA3);  // ADC3 = low
59
  DDRA  &=  ~(1<< PA0) | (1<< PA2); // ADC0 & ADC2 = Input
60

61
  adcval3 = ReadChannel(2); /* MUX-Bits auf 0b0010 -> Channel 2 */
62
  adcval3 = 1024 - adcval3;
63

64
  lcd_ClearScreen();
65
  lcd_GotoXY(1,1);
66
  lcd_SelectFont(Arial, lcd_ReadFontData, BLACK);
67
  
68
  sprintf(string, "CA0: %i\nCA1: %i\nCA2: %i\nCA3: %i ", adcval1, adcval2, adcval3, adcval4);    
69
  lcd_Puts(string);
70
  _delay_ms(20);
71
}

Kann mir jemand Sagen ob der Code so passt, oder ob ich dessen noch 
anpassen kann?

Was mich aber etwas Irritiert, das ich auf einem PIN PA1 knappe 5V 
messen kann? Obwohl die AREF doch eigentlich nur 2,5V sein sollte?
Gast #692573
Lesenswert?
• ▲
▼
2.5V ist nur die referenzspannung des adc, nutzt du die portpins als 
reguläre ausgänge, liegen dir natürlich normale pegel dort an.

die 100ohm-widerstände über welche dein touchscreen mit den portpins 
verbunden ist fanden beachtung?!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.