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
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 :).
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.