Nachdem mein AtMega 8 sich verabschiedet hat, musste ich nun umdenken bis der neue kommt.
Hier mein bisheriger Prototyp mit AtMega32:
Ein Kühlkörper für die 5V Spannungsversorgung war notwendig da der Roomba bis zu 16V liefert. D.h. dieses Board bezieht seine Spannung aus der SCI Schnittstelle.
Der Sharp Sensor ist noch nicht angeschlossen da der Uhu noch trocknen muss (ganz oben).
Ganz unten ein serielles Kabel zum Laptop. Ist inzwischen kein USB Kabel mehr sondern kommuniziere nun über ein herkömmliches serielles Kabel (RS232).
Auf dem AtMega ist eine zweite serielle Schnittstelle zum Roomba softwaretechnisch realisiert worden. Nur so war es möglich das SCI Protokoll zu ergänzen.
Wenn ich nun Sensorwerte vom Laptop aus anfrage, so wird vor dem eigentlichen Datenpaket des Roombas der Sharp Sensorwert vorangestellt (siehe Bascom programm weiter unten).
Hier das bisherige PC Steuerprogramm:
Bild hier
Wie unschwer zu erkennen zieht alles zusammen bisher etwa 260mA, ohne dass sich der Roomba bewegt!
Hier nun das Bascom Programm:
Hoffe heute Abend, wenn der Uhu getrocknet ist, den Sharp Sensor in Betrieb nehmen zu können.Code:$regfile = "m32def.dat" ' ATMega 8 $framesize = 42 $swstack = 42 $hwstack = 42 $crystal = 16000000 ' Quarzfrequenz $baud = 57600 ' Dieses Programm wird zwischen Laptop und Roomba auf einem AtMega32 ' installiert. ' Es kommuniziert mit dem Laptop als auch mit dem Roomba über zwei ' serielle Schnittstellen. ' Die echte serielle Schnittstelle kommuniziert mit dem PC, ' die software Schnittstelle mit dem Roomba ohne Pegelwandler! ' ' Das Programm macht dabei nichts anderes als die Daten einfach ' durch zu reichen. ' Eine Ausnahme bildet die Abfrage der Roomba Sensoren. Fordert ' der PC die Roomba Sensoren an, so wird zunächst der Sharp ' Wert ermittelt und an den PC gesendet, erst danach kommen die ' eigentlichen Sensordaten vom Roomba. ' ' Die Kommunikation mit dem Roomba geschieht hierbei über D3 und D2: Open "comD.2:57600,8,n,1" For Output As #1 Open "comD.3:57600,8,n,1" For Input As #2 On Int1 Int0_int Enable Int1 Config Int1 = Falling Enable Interrupts Config Adc = Single , Prescaler = Auto Start Adc Dim A As Byte Dim Ws1 As Word Dim Ws2 As Word Dim Ws3 As Word Dim Ws As Word Dim Char As Byte Dim Bsensor1 As Byte Dim Cw As Byte Bsensor1 = 0 Do Cw = Ischarwaiting() If Cw = 1 Then Inputbin Char If Bsensor1 = 1 Then If Char = 0 Then ' Sensorwert ermitteln und senden: Ws3 = 0 For Ws1 = 1 To 100 Ws2 = Getadc(7) Ws3 = Ws3 + Ws2 Next Ws1 Ws = Ws3 / 100 Printbin Ws End If Bsensor1 = 0 End If If Char = 142 Then Bsensor1 = 1 End If Printbin #1 , Char End If Loop End Int0_int: A = Inkey(#2) Printbin A Gifr = Gifr Or &H40 Return







Zitieren

Lesezeichen