ADC Count Wert aus Tutorial wie rauszufinden?

Gast #1503868
Lesenswert?

Hi,

ich versuche grade die 5 Buttons, die an einen ATMEGA32 an einem Port 
über ADC angeschlossen sind, anzusteuern.

In einem Tutorialcode von rn-control steht da


uint8_t button(void)
{
  uint8_t taste = 0;
  uint16_t analog7 = adcwert(7);  //Wert des Ports

  setportaon(7);
  waitms(1);
  setportaoff(7);

  //Abfrage des gedrückten Tasters - um Störungen zu vermeiden wurden 
die Bereiche sehr eng gefasst, sollten bei Bedarf an jedes Board extra 
angepasst werden.
  if((analog7>=337) && (analog7<=343)) {taste = 1;}
  else if((analog7>=268) && (analog7<=274)) {taste = 2;}
  else if((analog7>=200) && (analog7<=206)) {taste = 3;}
  else if((analog7>=132) && (analog7<=138)) {taste = 4;}
  else if((analog7>=64) && (analog7<=70)) {taste = 5;}
  else {}

  return taste;

Mir stellt sich die Frage, woher nehme ich die Werte für die if else 
Anweisungen?

Dazu gibt es im ADC Tut noch folgende Stelle:

 Eingangsspannung am ADC [V]    Entsprechender Messwert
0–0.625   0
0.625–1.25   1
1.25–1.875   2
1.875–2.5   3
2.5–3.125   4
3.125–3.75   5
3.75–4.375   6
4.375–5   7

Da gibt es für mich keinen Zusammenhang? Wie errechnen sich diese ADC 
Count Werte? Und bitte nicht sagen, ich solle das Tutorial lesen, das 
mache ich seit ca. 3h, und wäre sehr dankbar über etwas Hilfe :).

VG
Gast #1503991
Lesenswert?

Ja, stimmt. Die Formel auf Seite 213 is die richtige. Musst halt noch in 
dem Tutorial rausfinden, welche Referenzspannung eingestellt ist.  Dann 
einfach Vin und Vref einsetzen und du bekommmst den Wert raus, den du 
bei der Spannung im SDC Register vorfinden wirst.
#1504204
Lesenswert?

Wie wäre es mit: einfach ausprobieren!

Ein Programm schreiben, welches den Messwert auf LCD/UART ausgibt.
Programm starten und auf Taster1 drücken. Messwert aufschreiben. Da 
kommt zb 382 raus. (ruhig ein paar mal probieren und den Mittelwert 
nehmen).
Dasselbe für die anderen Tasten machen.

Damit hast du die Idealwerte für alle Tasten. Bei allen Tasten noch ein 
bischen was dazu und ein bischen was weg und du hast die Grenzen, die du 
in den Abfragen einsetzt.

Das ist zwar nicht sehr wissenschaftlich aber es berücksichtigt 
automatisch alle Ungenauigkeiten und Toleranzen der Widerstände in den 
Spannungsteilern :-)
#1504259
Lesenswert?

Peter Dannegger schrieb:
> Karl heinz Buchegger schrieb:
>> Ein Programm schreiben, welches den Messwert auf LCD/UART ausgibt.
>
> Unfug.
> Es gilt das Ohmsche Gesetz, also laß es den Compiler ausrechnen:^

Und woher weisst du, dass er 1% Widerstände benutzt hat.
Glaskugel?

Seine Vorgabe ist das hier
1
  //Abfrage des gedrückten Tasters - um Störungen zu vermeiden wurden
2
  //die Bereiche sehr eng gefasst, sollten bei Bedarf an jedes Board
3
  //extra angepasst werden.
4
  if((analog7>=337) && (analog7<=343)) {taste = 1;}

und die ADC Werte sind hier sehr eng gefasst. Wenn er mit den in der 
Schaltung vorgesehenen Widerständen die Werte erreichen würde, würde er 
hier nicht fragen. Ergo: Seine Widerstände haben Toleranzen und er muss 
seine Wertebereiche anpassen. Da kannst du jetzt rechnen soviel du 
willst, solange mit den idealen Widerstandswerten gerechnet wird UND der 
Abfragebereich so klein bleibt, wird er durch Rechnen keine vernünftigen 
Grenzen rausbekommen.

Du bist mir immer ein wenig zu schnell mit dem Wort "Unsinn" bei der 
Hand.
#1504667
Lesenswert?

Karl heinz Buchegger schrieb:
> und die ADC Werte sind hier sehr eng gefasst.

Bitte mal genauer hinsehen.
Er hat nur unnötig enge Fenster um die Tasten gelegt.
Es reicht völlig, die Schwelle genau zwischen 2 Taster zu legen und dann 
sind die Spannungen schon deutlich unterschiedlich.

Ich würde heutzuge aber nem Bastler raten, nur 1% Metallschicht zu 
nehmen. Es bastelt sich dann deutlich entspannter.

Die Preisunterschiede zu 10% Kohleschicht dürften nur bei Geräten in 
millionen Stückzahlen eine Rolle spielen.


Peter
#1504784
Lesenswert?

Peter Dannegger schrieb:
> Karl heinz Buchegger schrieb:
>> und die ADC Werte sind hier sehr eng gefasst.
>
> Bitte mal genauer hinsehen.
> Er hat nur unnötig enge Fenster um die Tasten gelegt.
> Es reicht völlig, die Schwelle genau zwischen 2 Taster zu legen und dann
> sind die Spannungen schon deutlich unterschiedlich.

Ich weiss.
Ich kenne allerdings die Beschaltung nicht und mein educated guess würde 
sein, dass damit mehrere gleichzeitig gedrückte Tasten zu keiner 
Fehlfunktion führen sollen.
Gast #1505427
Lesenswert?

Karl heinz Buchegger: Die Werte funktionieren bei meiner Schaltung, aber 
ich will verstehen, wie ich sie berechnen / feststellen kann, um sie bei 
anderen selbstgebauten Schaltungen auch festzustellen.

Meine Schaltung ist diese hier:
http://www.rn-wissen.de/index.php/Bild:Rncontrol1.4schaltplan.gif

Das mit dem Ausgeben lassen würde ich gerne machen, aber ich hab zurzeit 
noch kein Debugg - Kabel für den RS232 Ausgang, das muss ich mir erst 
noch bauen, deswegen sehe ich nicht, was der Compiler für Werte ausgibt.

Aber ich danke euch allen für die rege Hilfe :).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren