PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taster defekt?



Echoplex
30.10.2010, 20:21
Hallo,

habe vor kurzem meinen Asuro zusammengebaut.
Jetzt habe ich die Tastterwerte ausgelesen und die entsprechen nicht den normalen Werten.
Hier sind die Werte:



9
19
28
75
154
51


Liegt irgendwo ein Hardwarefehler vor und ergibt sich kein Problem wenn ich die Tasterausgaben in der Ausrolib ändern?[/code]

markusj
30.10.2010, 23:39
Sind das die Werte die von PollSwitch zurückgegeben werden? Oder direkt die Messwerte des ADC?
Welche Asurolib verwendest du?

Es wäre am besten wenn du Mal die ADC-Messwerte der einzelnen Taster selbst aufzeichnest. Alternativ könntest du auch das hier (https://www.roboternetz.de/phpBB2/viewtopic.php?t=31073) veröffentlichte Programm zur Kalibrierung ausprobieren, wobei ich keine Erfahrung damit habe.

mfG
Markus

Echoplex
30.10.2010, 23:42
Das Programm wollte ich auch schon benutzen, es zeigt mir immer an dass, wenn überhaupt, mehrer Schalter betätigt werden.
Ich werde morgen die Widerstände nachmessen und die AD-Werte posten.

markusj
31.10.2010, 09:16
Messungen von eingebauten Widerständen dürfte in vielen Fällen fehlerhaft sein, weil die restliche Schaltung Einfluss auf die Messelektronik haben kann.

mfG
Markus

Echoplex
31.10.2010, 11:51
Wollte jetzt die Werte mit diesen (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/TastenKalibrierungC) Programm testen, allerdings bekomme ich nichts angezeigt, außer das ich die jeweiligen Tasten drücken soll.

markusj
31.10.2010, 11:57
Auch das Programm kenne ich nicht - Und da meine Glaskugel gerade kaputt ist kann ich dir nur weiterhelfen wenn du die vom ADC erfassten Rohdaten selbst hier reinpostest.
Wenn du das selbst nicht schaffst, kann ich evtl. später ein kleines Programm dazu schreiben und hochladen.

Nachtrag: Ich zitiere Mal die Wiki-Seite: "Bleibt das Kalibrierprogramm bei einer Taste hängen, liegt eine Unterbrechung im Signalweg vor. Läuft das Testprogramm durch, ohne das eine Taste gedrückt wurde, liegt ein Kurzschluß vor."

mfG
Markus

Echoplex
31.10.2010, 12:06
Ok, hoffe die Werte wurden korrekt ausgelesen:

K6: 894
K5: 787
K4: 633
K3: 464
K2: 293
K1: 171

markusj
31.10.2010, 14:13
Die Werte sind um über Faktor 10 zu groß, sieh dir Mal die Werte in dieser (http://www.info-rlp.de/lernteams/06li/abschnitt_4_algorithmen_technische_informatik/tasten_unterscheiden/tasten_unterscheiden_problemloesung.htm#schriftlic he_problemloesung) Tabelle an.

Hast du die Lötstellen der Widerstände für die Tasterauswertung überprüft? Oder hast du bei der Auswertung vielleicht vergessen, die Ausgänge korrekt zu konfigurieren?
PC4 auf Input ohne Pullup, PD3 auf Output High

mfG
Markus

Echoplex
31.10.2010, 21:34
Die Lötstelle sehen ganz gut aus.

Hier mal der Code von dem Programm das ich benutzt habe für die Auswertung:




/************************************************** *************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* any later version. *
************************************************** *************************/

#include <stdlib.h>
#include "asuro.h"


uint16_t MyPollSwitch(void)
{
uint16_t i;

DDRD |= SWITCHES; // Port-Bit SWITCHES als Output
SWITCH_ON; // Port-Bit auf HIGH zur Messung
ADMUX = (1 << REFS0) | SWITCH; // AVCC reference with external capacitor
Sleep (10);

ADCSRA |= (1 << ADSC); // Starte AD-Wandlung
while (!(ADCSRA & (1 << ADIF))) // Ende der AD-Wandlung abwarten
;
ADCSRA |= (1 << ADIF); // AD-Interupt-Flag zuruecksetzen

i = ADCL + (ADCH << 8); // Ergebnis als 16-Bit-Wert

SWITCH_OFF; // Port-Bit auf LOW
Sleep (5);

return ADC;
}


void SwitchTest(void)
{
uint8_t i, j, mval;
uint16_t adval;

for(i=0; i<6; i++)
{
SerPrint("\r\nPress Key ");
PrintInt(6-i);
SerPrint("\r\n");
Msleep(1500);
adval = MyPollSwitch();
PrintInt(adval);
Msleep(1500);
adval = MyPollSwitch();
PrintInt(adval);
Msleep(1500);
adval = MyPollSwitch();
PrintInt(adval);
Msleep(1500);
adval = MyPollSwitch();
PrintInt(adval);
Msleep(1500);
}
}


int main(void)
{

Init();
SerPrint("\r\nTastsensor Kalibration\r\n");
while (1)
{
SwitchTest();
}
}


Könnte ein fehlerhafter Widerstand die Ursache für das Problem sein? Wie kann ich das dann überprüfen?

Besserwessi
31.10.2010, 22:28
Falsche Widerstandswerte könnte schon ein Problem sein. Vor allem würde dann die zuordnung der Tasten nicht mehr passen. Hier gibt es aber vor allem erstmal sehr große Schwankungen bei den Werten - das sollte bei einem falschen Widerstand noch nicht passieren.

Echoplex
31.10.2010, 23:20
Da es wohl zu kompliziert wäre alle Widerstände zu prüfen, kann ich auch einfach meine Werte in die myAsuro.h eintragen? Welche wären das dann?