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:
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
Hoffe heute Abend, wenn der Uhu getrocknet ist, den Sharp Sensor in Betrieb nehmen zu können.
Lesezeichen