Forum: Compiler & IDEs ADC Count Wert aus Tutorial wie rauszufinden?


von partx (Gast)


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

von ozo (Gast)


Lesenswert?

Wie wärs mit ausrechnen? Die Knöpfe sollten doch irgendwie 
unterscheidbar per Spannungsteiler angeschlossen sein? Zeig halt mal 
deine Schaltung her.

von Klaus (Gast)


Lesenswert?

Und der Zusammenhang zwischen Eingangsspannung findet sich, 
Überraschung, im Datenblatt.

http://www.lmgtfy.com/?q=atmega32+datenblatt

von Klaus (Gast)


Lesenswert?

Und der Zusammenhang zwischen Eingangsspannung und Messwert findet sich, 
Überraschung, im Datenblatt.

http://www.lmgtfy.com/?q=atmega32+datenblatt

von partx (Gast)


Lesenswert?

Hab ja im Datenblatt gesucht, aber kann mir darunter nix vorstellen, S. 
213 würde ich vermuten. Wie sieht denn das eingesetzt in der Formel aus?

von Klaus (Gast)


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.

von Klaus (Gast)


Lesenswert?

#define SDC ADC ;)

von Karl H. (kbuchegg)


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 :-)

von Peter D. (peda)


Lesenswert?

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:

Beitrag "Tastenmatrix auslesen über nur 2 Leitungen"


Peter

von Karl H. (kbuchegg)


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.

von Peter D. (peda)


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

von Karl H. (kbuchegg)


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.

von partx (Gast)


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 :).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.