Hallo
Die Umsetzung von C nach Bascom für Stufe 1 (nur Kamera und AVR) gibt's hier:
https://www.roboternetz.de/phpBB2/ze...=434274#434274
Wesentlich ist die Einstellung des ADC auf gewünschte Funktion: Freeruning mit Prescaler /2 und linksbündiges Ergebniss. Das ist allerdings schon etwas älter. Die neusten Erkenntnisse, die wir erst nach dem Start des Mitmachprojekts gewonnen haben, sind in dieser Umsetzung noch nicht berücksichtigt.
Ich habe bisher "nur" Stufe 1 nachgebaut. Das hatte ich zwar im Prinzip schon immer, neu ist jedoch der Aufbau auf der Experimentierplatine und der jumperbare Widerstand parallel zum Signal.
Gruß
mic
[Edit]
Nebenbei mal bemerkt: Die Hauptschleife der Liniensuche in der Bascom-Umsetzung ist ja echt knuffig:
Hier sieht mal wieder, wie einfach man auch mit Bascom sehr flotte Anwendungen ohne Assembler programmieren kann ;)Code:Do ' keine Störung erlauben Disable Interrupts ' Warten auf Bildstart Do X = 0 While Adch > 30 ' sichtbare Zeile Wend While Adch < 50 ' Strahlrücklauf Incr X Wend Loop Until X > 40 ' sync länger als 40 'warten auf 50ste Zeile X = 50 While X > 0 While Adch > 30 ' sichtbare Zeile Wend While Adch < 50 ' Strahlrücklauf Wend Decr X Wend ' Der Strich ist dunkler als 65. Wir zählen von links die Anzahl der ' Lesungen bis der Strich erkannt wird X = 0 While Adch > 65 Incr X Wend ' Linie gefunden Enable Interrupts ' ermittelten Wert in Leerzeichen umrechnen und beides zum Terminal senden Print X ; S = Space(x) Print S; Print "***" Waitms 200 Loop
[NocheinEdit]
Jetzt wäre eine Erweiterung auf eine Linienverfolgung nicht schwer, wenn man die Antriebe mit Bascom ansteuern kann. Da ich nicht weiß, ob es schon Bascom-Funktionen für den RP6 gibt, habe ich mal auf meiner Festplatte gesucht und ein undokumentiertes RP6-Programm (vom 21.8.08?) mit Motoransteuerung gefunden:
Das Programm kennt folgende Motorfunktionen:Code:$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
Declare Sub Rp6_vorwaerts()
Declare Sub Rp6_rueckwaerts()
Declare Sub Rp6_stop()
Declare Sub Rp6_links()
Declare Sub Rp6_rechts()
Diese Funktionen kann man mit einer RC5-Fernbedienung auswählen. Woher das Programm stammt und ob es funktioniert kann ich leider nicht sagen.







Zitieren

Lesezeichen