PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-Control: Port A Pins vertauscht?!



Toastbrot
05.02.2005, 17:50
Guten Tag!

Ich experimentiere zur Zeit bissl mit meinem RN-Control 1.4 rum. Ich habe einen Taster zwischen PortA.1 und Masse geklemmt und den PortA.1 auf High gesetzt. Wenn ich jetzt drücke wird die Spannung an diesem Pin runter gezogen, was ich natürlich messen kann...

Das Problem ist jetzt folgendes: Wenn ich den Taster abfrage geht das so nicht. Wenn ich ihn allerdings mit selbem Code an PortA.3 anschließe gehts!!! Aber im Basic Code steht nirgends was von dem Pin 3.

Warum ist das so? Hier der Code:


$crystal = 16000000
$baud = 9600
$regfile = "m32def.dat"

Declare Sub Fahren()
Declare Sub Halt()




Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung


Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein

Config Pina.1 = Input 'Für Sensorabfrage
Porta.7 = 1

Config Portc = Output
Config Portb = Output


Dim Taster As Word


Ddrc = &B00000001 'Zu Beginn eine LED an

Do


Start Adc
Taster = Getadc(7)


If Taster < 1010 Then

Select Case Taster

Case 410 To 450 'Taste 1: Fahren bis Hindernis

'Call Lcd()


Case 340 To 380 'Taste 2:

Call Fahren()

'Case 265 To 305 'Taste 3:



'Case 180 To 220 'Taste 4:



Case 80 To 150 'Taste 5: Halten!

Call Halt()



End Select

End If

Loop

End

'#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+# +#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#

Sub Fahren()
Dim Sensor As Word

Config Pina.1 = Input 'Port als Input
Porta.1 = 1 'Port hoch setzen

Sensor = Getadc(1) 'Sensor 1 aktivieren




Portc.7 = 1 'Motor 1 Vorwärts
Portb.1 = 1 'Motor 2 Vorwärts

Do 'Endlosschleife
If Sensor < 1010 Then 'Wenn Port runter gesetzt wird (Low)


Portc.6 = 1 'Motor 1 Rückwärts
Portc.7 = 0

Portb.0 = 1 'Motor 2 Rückwärts
Portb.1 = 0

Print "Hindernis, setze zurueck!"

Waitms 100

'Rechtsdrehung
Portc.7 = 1 'Motor 1 Vorwärts
Portc.6 = 0

Waitms 50

'Geradeaus
Portb.1 = 1 'Motor 2 Vorwärts
Portb.0 = 0


Print "Setze Fahrt fort!"

End If
Loop

End Sub


'#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+# +#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#

Sub Halt()

Stop Sub Fahren()

Portc = 0 'Motor 1 Stop
Portb = 0 'Motor 2 Stop

Sound Portd.7 , 100 , 200 'BEEP

End Sub


'#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+# +#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#




Vielen Dank schonmal im Voraus und noch ein schönes WE!



PS: Direkt noch eine 2. Frage: Ich habe einen Pollin US Sensor. Kann ich die LED Spannung einfach an einen Pin von Port A hängen? Eigentlich nicht, da ich dann ja zwischen Masse und dem LED-Bein Messe, was dann den bereich des Einganes übersteigt. Sehe ich richtig, oder? Besser mit Spannungsteiler oder Optokoppler arbeiten?

Alf2
05.02.2005, 18:08
Hallo Toastbrot,

ich blicke zwar bei deinem Programm nicht so richtig durch, ich glaube aber du hast noch Fehler drin.

Die Zeilen

Config Pina.1 = Input 'Für Sensorabfrage
Porta.7 = 1

sollen doch sicher so lauten

Config Pina.1 = Input 'Für Sensorabfrage
Porta.1 = 1

Toastbrot
05.02.2005, 18:18
Da hast du recht, allerdings ist das weiter unten sowieso dann nochmal richtig gemacht, eigentlich doppelt gemoppelt... Habe das geändert, aber es funzt noch nicht so wie es soll.

Frank
05.02.2005, 23:56
Dein Code ist wirklich noch etwas verworren, sowas führt schnell zu Fehlern.
So hast du beispielsweise in der do Loop Schleife wo du Sensor abfragst garnicht die Abfrage für den AD-Port drin ;-)
Die Abfrage führst du nur einmal kurz davor aus - die müsste aber dann in die do-loop Schleife wenn ich den Code richtig deute.
Zudem solltest du darauf achten das du Bascom Stack Werte etwas erhöhst (unter Optionen) oder zum Beispiel so im Code:

$hwstack = 88
$framesize = 80
$swstack = 80


Müssen zwar nicht so hoch sein, aber schadet auch nix solange du Platz hast. Ansonsten kann´s bei Subfunktionen schnell mal zum Überlauf mit seltsamen Folgen kommen.
Dann denk noch daran das der rechte Port der Steckklemme Port 0 ist, eventuelle verwechselst du 0 oder 1.
Irgendwo ist da im Code noch der Wurm drinn. Wenn man nicht weiter kommt, hilft es einem in der Rege wenn man den Code soweit abspeckt bis die Problemstellung übersichtlicher bzw eindeutig wird.

Gruß Frank

Toastbrot
06.02.2005, 11:53
Vielen Dank, Frank!

Wofür sind die hestack, framesize und swstack Werte? Werde es einfach mal ausprobieren! Die Sache mit Pin 0 bzw. 1 habe ich mir auch überlegt, da aber auf der Platine mit 1 Beschriftet ist, habe ich mich dafür entschieden...fatal ;-)

Schönes Wochenende noch!

06.02.2005, 12:26
Die 1 ist nur die Klemmenbezeichnung. Auf der Platine steht vorne aber auch PA0!