So habe Heute Zeit gehabt mich mit dem Schalterproblem zu beschäftigen.
Nachdem ich traceroutinen in das Selftest Programm eingebaut hatte, war sofort klar was passiert ist.
Die Schalterfunktion hat für S1 33 zurüchgegeben, dadurch hat Asuro geglaubt S1 plus S6 ist gedrückt.
Warum?
Der richtige Wert wäre 32 für S1 und 1 für S6 , 33 = 32 +1.
Alles klar ?
Nach Änderung der Pollswitchfunktion von
return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 63.0 + 0.5));
auf
return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 62.0 + 0.5));
hat es dann gefunzt.
Ich habe mein Traceprogramm angehängt.
Richtige Werte sind:
S1 32
S2 16
S3 8
S4 4
S5 2
S6 1
Außerdem gibt das Programm noch den Wert für i in der Funktion weiter oben.
Also main.hex in den Asuro laden,Taste 1 bis 6 drücken, auf dem Terminalprogramm schauen welche Werte kommen, Taschenrechner nehmen in der obingen Formel das jeweilige i einsetzen und den geeigneten Multiplikator ermitteln.
Hoffe das hilft denjenigen, die Probleme mit den Schaltern haben.
btw.: mit dem Tesprogramm funktionieren die Funktionen die dem jeweiligen Schalter zugeordnet waren nicht mehr richtig.
Das stört aber nicht, weil es darum auch nicht geht, es soll lediglich überprüft werden, was intern passiert.
ich habe deine testroutine ausprobieren wollen, aber leider hat sie irgendwie nicht funktioniert... es kam zwar die überschrift, aber danach nix mehr, egal auf welchen der taster ich drückte. könntest du die sourcen auch hier zum download einstellen, nur so dass ich dahinter sehe? das wär nett...
an einen Korrekturwert für den brüchtigten "Wert 63" kann man am einfachsten kommen, indem man sich anzeigen lässt, was der ADC nach den einzelnen Tasterbetätigungen zurückliefert. Ich habe hierzu die asuro.c leicht geändert (a. Anhang). Zusammen mit der mitgelieferten test.c sieht man dann im Terminal den Wert für i (Rückgabe des ADC) und was asuro.c daraus berechnet.
Bei mir (bzw. bei meinem asuro...) liefert der ADC z.B. 671 beim Druck auf Taste 1. Wenn ich dann in der Funktion PollSwitch() 60 statt 63 eintrage, dann liefert die Funktion für alle Tasten die korrekten Werte zurück (32(T1), 16(T2), 8(T3), 4(T4), 2(T5) und 1(T6)). Natürlich könnten man sich einen anderen Algorithmus ausdenken, der aus den Rückgabewerten des ADC die entsprechenden Werte 1-32 berechnet. Ich bezweifele aber, dass das deutlich kürzer wird, als das, was in der originalen asuro.c steht. Wozu also die Mühe...
Hatte dasselbe Problem (neben kalten Lötstellen, die die Fehlersuche auch nicht vereinfachen, ich noob
Mit Hilfe deines Programmes, bzw einer "61" scheint jetzt auch bei mir alles soweit zu klappen. (Bei "60" gingen die Tasten alleine prima, aber taste 1+6 ergab zusammen dasselbe wie nur Taste 1)
bye,
Jango, den das Roboterfieber und die Mikroelektronik gepackt hat ;D
Bei mir war das gleiche Problem. Ich mußte auch eine "61" programmieren. Die Ursache sind die schlechte Qualität der verwendeten 1%igen Widerstände. Ich habe mal einige nachgemessen, es waren welche mit bis zu 4% Fehler dabei. Das sollte nicht sein. Die verwendeten 5%igen Widerstände sind da sogar noch besser.
Lesezeichen