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
Wie wärs mit ausrechnen? Die Knöpfe sollten doch irgendwie unterscheidbar per Spannungsteiler angeschlossen sein? Zeig halt mal deine Schaltung her.
Und der Zusammenhang zwischen Eingangsspannung findet sich, Überraschung, im Datenblatt. http://www.lmgtfy.com/?q=atmega32+datenblatt
Und der Zusammenhang zwischen Eingangsspannung und Messwert findet sich, Überraschung, im Datenblatt. http://www.lmgtfy.com/?q=atmega32+datenblatt
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?
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.
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 :-)
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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.