PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rp6 mit bascom und fernbedienung rc5



roboterheld
23.09.2007, 19:10
eine einfache bewegung mit dem rp6 und ir-rc5 :vorwärts,rückwärts, links drehen , rechts drehen und stop.

es ist verbesserungswürdig. aber zum ersten testen des rp6 mit bascom reicht es erstmal.

dieses muss in der m32def.dat ausgewechselt werden, weil ich die neuen bezeichnungen von atmel nehme und die auch bei winavr-c genommen werden:



;TCCR1A
COM1A1 =7
COM1A0 =6
COM1B1 =5
COM1B0 =4
FOC1A =3
FOC1B =2
PWM11 =1
WGM11 =1 ; neu
PWM10 =0
WGM10 =0 ; neu

;TCCR1B
ICNC1 =7
ICES1 =6
CTC11 =4
WGM13 =4 ; neu
CTC10 =3
WGM12 =3 ; neu
CS12 =2
CS11 =1
CS10 =0





$regfile = "M32def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 64
$baud = 38400

Declare Sub Rp6_vorwaerts()
Declare Sub Rp6_rueckwaerts()
Declare Sub Rp6_stop()
Declare Sub Rp6_links()
Declare Sub Rp6_rechts()

Dim Tccr1a_set As Byte
Dim Tccr1b_set As Byte
Dim Wert As Byte
Dim Zaehler As Word
Dim Zaehler1 As Word
Dim Test As Byte

Dim Address As Byte , Command As Byte

Config Rc5 = Pinb.2

Config Pinc.2 = Output
Config Pinc.3 = Output
Config Pinb.4 = Output

On Int0 Int0_int
On Int1 Int1_int
On Int2 Int2_int

Enable Interrupts

Config Int0 = Falling
Config Int1 = Falling

Enable Int0
Enable Int1
Enable Int2

Tccr1a_set = 0
Tccr1b_set = 0

Reset Tccr1a_set .wgm10
Set Tccr1a_set .wgm11
Set Tccr1a_set .com1a1
Set Tccr1a_set .com1b1
Tccr1a = Tccr1a Or Tccr1a_set

Reset Tccr1b_set .wgm12
Set Tccr1b_set .wgm13
Set Tccr1b_set .cs10
Tccr1b = Tccr1b Or Tccr1b_set

Icr1h = 0
Icr1l = 210

Set Portb.4

Wert = 0

Wait 1

Do

Waitms 500


Loop

Reset Portb.4

End

Int0_int:
Disable Int0
Enable Interrupts
Zaehler = Zaehler + 1
Enable Int0
Return

Int1_int:
Disable Int1
Enable Interrupts
Zaehler1 = Zaehler1 + 1
Enable Int1
Return

Int2_int:
Disable Int2
Enable Interrupts
Getrc5(address , Command)
If Command = 1 Then
Call Rp6_vorwaerts()
End If
If Command = 2 Then
Call Rp6_rueckwaerts()
End If
If Command = 3 Then
Call Rp6_links()
End If
If Command = 4 Then
Call Rp6_rechts()
End If
If Command = 0 Then
Call Rp6_stop()
End If
Enable Int2
Return

Sub Rp6_vorwaerts()
Call Rp6_stop()

Reset Portc.2
Reset Portc.3

For Wert = 0 To 100
Waitms 20
Pwm1a = Wert - 3
Pwm1b = Wert
Next
End Sub

Sub Rp6_rueckwaerts()
Call Rp6_stop()

Set Portc.2
Set Portc.3

For Wert = 0 To 100
Waitms 20
Pwm1a = Wert - 3
Pwm1b = Wert
Next
End Sub

Sub Rp6_links()
Call Rp6_stop()

Set Portc.2
Reset Portc.3

For Wert = 0 To 60
Waitms 20
Pwm1a = Wert
Pwm1b = Wert
Next
End Sub

Sub Rp6_rechts()
Call Rp6_stop()

Reset Portc.2
Set Portc.3

For Wert = 0 To 60
Waitms 20
Pwm1a = Wert
Pwm1b = Wert
Next
End Sub

Sub Rp6_stop()

For Test = Wert To 0 Step -1
Pwm1b = Test
Pwm1a = Test
Waitms 10
Next

Wert = 0

End Sub