PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rn-control 1.4 bekommen - Taster 1-3 defekt?



Fumificate
10.11.2012, 16:37
Hallo liebe Community,

ich habe vor ein paar Tagen das o.g. Board von robotikhardware.de bekommen. Ich habe das Testprogramm (aus dem Wiki: http://rn-wissen.de/index.php/RN-Control) aufgespielt und musste feststellen das die Tasten 1-3 zwar ein Ton von sich geben, allerdings keine Funktion ausführen. Beispielsweise sollte die Taste 3 das Lauflicht aktivieren. Bei den Tasten 4-5 bekomme ich im Terminal Werte ausgelesen.

Also habe ich den Versuch gemacht und ein einfaches Programm geschrieben um die Tasten zu testen.




$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 38400
Dim I As Integer
Dim N As Integer
Dim Taste As Byte
Config Portc = Output
Declare Sub Lauflicht()
Declare Function Tastenabfrage() As Byte
Config Adc = Single , Prescaler = Auto
Config Pina.7 = Input
Porta.7 = 1
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Call Lauflicht
Case 2
Call Lauflicht
Case 3
Call Lauflicht
Case 4
Call Lauflicht
Case 5
Call Lauflicht

End Select

End If
Waitms 100
Loop
End
Function Tastenabfrage() As Byte
Local Ws As Word
Tastenabfrage = 0
Start Adc
Ws = Getadc(7)
If Ws < 500 Then
Select Case Ws
Case 410 To 450
Tastenabfrage = 1
Case 340 To 380
Tastenabfrage = 2
Case 265 To 305
Tastenabfrage = 3
Case 180 To 220
Tastenabfrage = 4
Case 90 To 130
Tastenabfrage = 5
End Select
End If
End Function

Sub Lauflicht()
Config Portc = Output
For I = 0 To 7

Portc.i = 0
Waitms 100
Portc.i = 1
Next I

End Sub

End

Wenn ich den Code ausführen funktionieren die Taster 1-3 auch nicht.

Hat jemand von euch eine Idee woran es liegen kann?

Beste Grüße
Fumificate

Dirk
10.11.2012, 16:55
Du könntest z.B. dein Testprogramm so erweitern, dass du die lokale Variable WS in der Funktion Tastenabfrage entfernst und in eine globale Variable (Dim WS As Word) am Programmanfang änderst und dir im Hauptprogramm nach jedem Tastendruck den ADC-Wert (WS) jeder Taste anzeigen läßt.
Damit kannst du dann feststellen, ob die Tasten 1-3 überhaupt einen Wert wiedergeben. Wenn nicht: Hardware kontrollieren.

Fumificate
10.11.2012, 17:11
Der Taster 4 liefert mir 180 und der Taster 5 99.

Die anderen Taster liefern kein Ergebnis.

Ich habe einfach den Code um ein Ausgabe Sub erweitert und bei den Cases Call Ausgabe hingeschrieben.

War das richtig so oder meintest du es anders?

Was kann ich an der Hardware kontrollieren?

Vielen Dank schonmal für die schnelle Antwort!

Dirk
10.11.2012, 17:40
Ne, mach das nicht in den Cases, weil da ja schon auf bestimmte ADC-Werte getestet wird. Du brauchst ein Programm, das die unabhängig von der Tastennummer den ADC-Wert der gedrückten Taste ausgibt.
Jede Taste MUSS dann einen Wert ausgeben.

Fumificate
10.11.2012, 18:48
Hast du da vielleicht einen Tip für mich? Ich bin noch ein richtiger Neuling und weiß gerade nicht wie ich das machen kann.

- - - Aktualisiert - - -

Hallo nochmal.
Ich habe jetzt etwas herumprobiert und glaube ein Programm geschrieben zu haben das mir die Werte ausgibt.

Folgende Werte habe ich:
Taster 1: 395
Taster 2: 327
Taster 3: 256
Taster 4: 180
Taster 5: 99

Ich habe die Cases so angepasst und nun gehen alle :) Gibt es eine bestimmte Regel wie groß der Wertebereich bei den Cases sein sollte?

Frank
10.11.2012, 19:31
Dei Widerstände haben ja immer eine gewisse unterschiedliche Toleranz, daher kann es in selten Fällen vorkommen das die eingetragenen Werte bei der Case Anweisung geändert werden müssen. Du hast das ja offensichtlich korrekt gemacht!
Man sollte die Case Anweisungen halt so wählen das möglichst pro Taster ein weiter Bereich umfasst wird und es natürlich nicht zu Überscheidungen kommt.

Gewöhnlich passt folgendes:



'Diese Unterfunktion fragt die Tastatur am analogen Port ab
Function Tastenabfrage() As Byte
Local Ws As Word


Tastenabfrage = 0
Ton = 600
Start Adc
Ws = Getadc(7)
' Print "Tastenabfrage anpassen!ADC Wert ws=" ; Ws
If Ws < 500 Then
Select Case Ws
Case 370 To 450 'oder 400 x 450
Tastenabfrage = 1
Ton = 550
Case 300 To 369
Tastenabfrage = 2
Ton = 500
Case 230 To 299
Tastenabfrage = 3
Ton = 450
Case 150 To 229
Tastenabfrage = 4
Ton = 400
Case 80 To 149
Tastenabfrage = 5
Ton = 350
Case Else
Print "Tastenabfrage anpassen!ADC Wert ws=" ; Ws
End Select
Sound Portd.7 , 400 , Ton 'BEEP


End If




End Function

Dirk
10.11.2012, 19:33
Ja, die Grenzen zwischen den Tasten werden am besten auf den halben Abstand zwischen den Ist-Werten gelegt.
Zwischen Tasten 1 und 2 wäre die Grenze also 361 und zwischen Tasten 2 und 3 292.
Damit wäre die Abfrage für Taste 2 z.B.: >= 292 und < 361. Der Wertebereich sollte OHNE Lücken erfasst werden, so dass jeder ADC-Wert zugeordnet werden kann.
Die Werte ändert man dann in der Funktion Tastenabfrage().

Fumificate
11.11.2012, 00:21
Vielen Dank euch beiden! Ihr habt mir sehr geholfen.