nooob
02.09.2006, 15:04
hi.. nachdem heute endlich mein Programmieradapter gekommen ist hab ich ihn angeschlossen und schon mit bascom einige programme übertragen..
funzt soweit ganz gut, nur komme ich nicht darüber hinaus was anderes tun zu lassen, als BEEPs auszuspucken :-\
ich hab am analogen Port 0(gelbe Klemme) (is glaub PortA) das Sensorkabel des 10-80cm IR-Sensors von Sharp eingesteckt und auch 5V am Board abgegriffen.. das funzt soweit..
Jetzt möchte ich den µC so programmieren, dass er geradeausfährt bis zu einem hindernis.., dann anhält und nach rechts oder links dreht (egal) und dann weiterfährt wenn platz is..
gedacht hab ich mir das so:
pwm beide motoren vollgas
dann eine If abfrage für die Spannung die der Sensor am analogen Port meldet.. wenn diese Spannung größer als X ist, soll er stoppen und der eine motor vorwärts, der andere rückwärts laufen.. (Robby chassis)
das soll aber irgendwie in ne do loop schleife, damit er misst wann wieder platz is und dann aufhört zu drehen...
-> pwm beide motoren 0 --> end if
dann loop, damit es von vorne anfängt und das teil wieder geradeaus vollgas fährt...
mein "code" wenn man das so nennen kann, baut eigentlich auf dem rncontroltest.bas auf.. dem programm das schon draufgespielt war...
seid mal bitte so net und schaut drüber...
Declare Sub Batteriespannung()
Declare Sub Motortest()
Declare Sub Lauflicht()
Declare Sub Showporta()
Declare Sub Showdigitalporta()
Declare Function Tastenabfrage() As Byte
$regfile = "m32def.dat"
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
Dim D As Integer
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.1 = Input 'input sensor
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Const Ref = 5 / 1023 'Für Batteriespannungsberechnung
Dim Taste As Byte
Dim Volt As Single
' Für Motorentest
'Ports für linken Motor
Config Pinc.6 = Output 'Linker Motor Kanal 1
Config Pinc.7 = Output 'Linker Motor Kanal 2
Config Pind.4 = Output 'Linker Motor PWM
'Ports für rechten Motor
Config Pinb.0 = Output 'Rechter Motor Kanal 1
Config Pinb.1 = Output 'Rechter Motor Kanal 2
Config Pind.5 = Output 'Rechter Motor PWM
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 0
Pwm1b = 0
Tccr1b = Tccr1b Or &H02 'Prescaler = 8
I = 0
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Print
Print "**** RN-CONTROL V1.4 *****"
Print "Das neue Experimentier- und Roboterboard"
Print
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Call Batteriespannung 'Taste 1 Zeigt Bateriespannung über RS232 an
Case 2
Call Motortest 'Taste 2 Motoren beschleunigen und abbremsen
Case 3
Call Lauflicht 'Einige male Lauflicht über LED´s anzeigen. Am I2C-Port darf in diesem Moment nichts angeschlossen sein
Case 4
Call Showporta 'Zeigt Messwerte an allen Port A PIN´s
Case 5
Call Showdigitalporta 'Zeigt digitalen I/O Zustand von PA0 bis PA5 an
End Select
Sound Portd.7 , 400 , 500 'BEEP
End If
Waitms 100
Loop
End
'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)
If Ws < 1010 Then
Select Case Ws
Case 410 To 450
Tastenabfrage = 1
Ton = 550
Case 340 To 380
Tastenabfrage = 2
Ton = 500
Case 265 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 100 To 130
Tastenabfrage = 5
Ton = 350
End Select
Sound Portd.7 , 400 , Ton 'BEEP
End If
End Function
'Diese Unterfunktion zeigt Bateriespannung an
Sub Batteriespannung()
Do
Pwm1a = 600
Pwm1b = 600
Start Adc
D = Getadc(0)
Volt = D * Ref
Volt = Volt * 5.2941
If Volt > 2 Then
Pwm1a = 0
Pwm1b = 0
Waitms 50
Portc.6 = 0
Portc.7 = 1
Portb.0 = 0
Portb.1 = 1
Pwm1a = 200
Pwm1b = 200
Wait 1
End If
Loop
End Sub
... hier steht dann noch der rest der subs.. die hab ich unverändert gelassen...
was mir noch einfällt...
mit dem multimeter hab ich spannungen von ungefähr 2,4 volt gemessen, als die hand nah vor dem sensor war..
kann ich direkt dem µc sagen dass es >2 sein soll.. es soll ja nur ungefährer abstand sein, der zum stop führen soll..
oder wie is das signal, dass der analogport bekommt??
hab leider kein RS232.. kann also auch net schauen was an den Ports anliegt.
funzt soweit ganz gut, nur komme ich nicht darüber hinaus was anderes tun zu lassen, als BEEPs auszuspucken :-\
ich hab am analogen Port 0(gelbe Klemme) (is glaub PortA) das Sensorkabel des 10-80cm IR-Sensors von Sharp eingesteckt und auch 5V am Board abgegriffen.. das funzt soweit..
Jetzt möchte ich den µC so programmieren, dass er geradeausfährt bis zu einem hindernis.., dann anhält und nach rechts oder links dreht (egal) und dann weiterfährt wenn platz is..
gedacht hab ich mir das so:
pwm beide motoren vollgas
dann eine If abfrage für die Spannung die der Sensor am analogen Port meldet.. wenn diese Spannung größer als X ist, soll er stoppen und der eine motor vorwärts, der andere rückwärts laufen.. (Robby chassis)
das soll aber irgendwie in ne do loop schleife, damit er misst wann wieder platz is und dann aufhört zu drehen...
-> pwm beide motoren 0 --> end if
dann loop, damit es von vorne anfängt und das teil wieder geradeaus vollgas fährt...
mein "code" wenn man das so nennen kann, baut eigentlich auf dem rncontroltest.bas auf.. dem programm das schon draufgespielt war...
seid mal bitte so net und schaut drüber...
Declare Sub Batteriespannung()
Declare Sub Motortest()
Declare Sub Lauflicht()
Declare Sub Showporta()
Declare Sub Showdigitalporta()
Declare Function Tastenabfrage() As Byte
$regfile = "m32def.dat"
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
Dim D As Integer
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.1 = Input 'input sensor
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Const Ref = 5 / 1023 'Für Batteriespannungsberechnung
Dim Taste As Byte
Dim Volt As Single
' Für Motorentest
'Ports für linken Motor
Config Pinc.6 = Output 'Linker Motor Kanal 1
Config Pinc.7 = Output 'Linker Motor Kanal 2
Config Pind.4 = Output 'Linker Motor PWM
'Ports für rechten Motor
Config Pinb.0 = Output 'Rechter Motor Kanal 1
Config Pinb.1 = Output 'Rechter Motor Kanal 2
Config Pind.5 = Output 'Rechter Motor PWM
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 0
Pwm1b = 0
Tccr1b = Tccr1b Or &H02 'Prescaler = 8
I = 0
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Print "**** RN-CONTROL V1.4 *****"
Print "Das neue Experimentier- und Roboterboard"
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Call Batteriespannung 'Taste 1 Zeigt Bateriespannung über RS232 an
Case 2
Call Motortest 'Taste 2 Motoren beschleunigen und abbremsen
Case 3
Call Lauflicht 'Einige male Lauflicht über LED´s anzeigen. Am I2C-Port darf in diesem Moment nichts angeschlossen sein
Case 4
Call Showporta 'Zeigt Messwerte an allen Port A PIN´s
Case 5
Call Showdigitalporta 'Zeigt digitalen I/O Zustand von PA0 bis PA5 an
End Select
Sound Portd.7 , 400 , 500 'BEEP
End If
Waitms 100
Loop
End
'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)
If Ws < 1010 Then
Select Case Ws
Case 410 To 450
Tastenabfrage = 1
Ton = 550
Case 340 To 380
Tastenabfrage = 2
Ton = 500
Case 265 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 100 To 130
Tastenabfrage = 5
Ton = 350
End Select
Sound Portd.7 , 400 , Ton 'BEEP
End If
End Function
'Diese Unterfunktion zeigt Bateriespannung an
Sub Batteriespannung()
Do
Pwm1a = 600
Pwm1b = 600
Start Adc
D = Getadc(0)
Volt = D * Ref
Volt = Volt * 5.2941
If Volt > 2 Then
Pwm1a = 0
Pwm1b = 0
Waitms 50
Portc.6 = 0
Portc.7 = 1
Portb.0 = 0
Portb.1 = 1
Pwm1a = 200
Pwm1b = 200
Wait 1
End If
Loop
End Sub
... hier steht dann noch der rest der subs.. die hab ich unverändert gelassen...
was mir noch einfällt...
mit dem multimeter hab ich spannungen von ungefähr 2,4 volt gemessen, als die hand nah vor dem sensor war..
kann ich direkt dem µc sagen dass es >2 sein soll.. es soll ja nur ungefährer abstand sein, der zum stop führen soll..
oder wie is das signal, dass der analogport bekommt??
hab leider kein RS232.. kann also auch net schauen was an den Ports anliegt.