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?
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?