mikrocontroller.net

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


Autor: partx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ozo (Gast)
Datum:

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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und der Zusammenhang zwischen Eingangsspannung findet sich, 
Überraschung, im Datenblatt.

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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und der Zusammenhang zwischen Eingangsspannung und Messwert findet sich, 
Überraschung, im Datenblatt.

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

Autor: partx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define SDC ADC ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
  //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;}

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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: partx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.