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.