Hier das Bascom-Programm:
Code:
 ' Remote-Head-Programm für einen ATMega8    (c) AlKi



 $regfile = "m8def.dat"                                     ' Damit Bascom weiß, dass es das Programm für einen ATMega8 umwandeln muss (in der Datei stehen Infos über den ATMega8)
 $framesize = 40                                            ' \
 $swstack = 40                                              '  |=> Damit für Variablen Platz gelassen wird
 $hwstack = 40                                              ' /
 $crystal = 8000000                                         ' Damit Bascom weiß, wie schnell der MC getaktet ist



             ' Anschlüsse als Ausgänge konfigurieren:

 Config Portd.6 = Output                                    ' PD6
 Motor1a Alias Portd.6                                      ' und einen aliasnamen zuweißen (zum besseren Verständniss des Programmtextes)

 Config Portd.5 = Output                                    ' dasselbe für PD5,
 Motor1b Alias Portd.5


 Config Portb.7 = Output                                    ' PB7,
 Motor2a Alias Portb.7

 Config Portb.6 = Output                                    ' und PB6
 Motor2b Alias Portb.6



          ' Variablen deklarieren, damit sie im Programmtext genutzt werden können

 Dim Achsea As Long
 Dim Achseb As Long
 Dim Zaehler As Long



                  ' den Analog-Digital-Wandler einstellen:

 Config Adc = Single , Prescaler = 64 , Reference = Avcc

 Start Adc                                                  ' und aktivieren


 Do                                                         'Hauptschleife

   Achsea = Getadc(0)                                       ' \ die Werte der Potentiometer auslesen und in den Variablen speichern
   Achseb = Getadc(1)                                       ' /


                   ' und jeh nach dem Handeln:

   If Achsea < 424 Then

     Motor1a = 1                                            ' (Ausgang auf "high" legen, also +5V, dadurch wird ein Motor in eine Richtung angeschalten)
     Zaehler = 380
     While Zaehler > Achsea                                 ' hier...
        Decr Zaehler
     Wend

     Motor1a = 0                                            ' (Den Ausgang wieder auf "low"-Pegel legen, damit wird der Motor ausgeschalten)
     Zaehler = 24
     While Zaehler < Achsea                                 ' ...und hier sind Verzögerungsschleifen, welche von dem Wert der Variable (hier Achsea)
       Incr Zaehler                                         ' abhängig unterschiedlich verzögern. Da die eine kürzer verzögert wenn die andere länger
     Wend                                                   ' Verzögert, wird nur das An/Aus-Verhältniss verändert. Die gesamte Zeitverzögerung ist
                                                             ' aber (fast) immer gleich. Das ist PulsWellenModulation (PWM), und zwar software-PWM.

   End If



   If Achsea > 612 Then                                     ' undsoweiter

     Motor1b = 1
     Zaehler = 574
     While Zaehler < Achsea
        Incr Zaehler
     Wend

     Motor1b = 0
     Zaehler = 1000
     While Zaehler > Achsea
       Decr Zaehler
     Wend


   End If





   If Achseb < 424 Then

     Motor2a = 1
     Zaehler = 380
     While Zaehler > Achseb
        Decr Zaehler
     Wend

     Motor2a = 0
     Zaehler = 24
     While Zaehler < Achseb
       Incr Zaehler
     Wend

   End If



   If Achseb > 612 Then

     Motor2b = 1
     Zaehler = 574
     While Zaehler < Achseb
        Incr Zaehler
     Wend

     Motor2b = 0
     Zaehler = 1000
     While Zaehler > Achseb
       Decr Zaehler
     Wend


   End If

 Loop                                                       ' Damit wird wieder bei "Do" angefangen.
hab ihn gerade bei meinem ATMega8 ausprobiert. da ging er.
Ich glaube, ein ATMega8 ist etwas arg überdimensioniert ist (der Programmspeicher ist nur zu etwa 10% gefüllt), aber das stört nicht. (für einen anderen AVR müsste man nur die Portnamen und das Regfile ändern. Darum übrigens auch die Aliasnamen, damit man nicht den ganzen Programmtext ändern muss)

Die Geschwindigkeit der Motoren wird per (pseudo-) Software-PWM gesteuert. Das steht auch in den Kommentaren. Das Programm ist nicht das Optimum, aber es funktioniert. Vlt. schreib ichs noch irgendwann um.
Jeh größer der Ausschlag deines Joysticks, desto schneller die Motoren.


du musst es nur noch per Bascom kompilieren und über nen ISP-Adapter in nen ATMega8 übertragen und den Passend anschließen. falls du nicht an Bascom rankommst, kann ich dir auch das hexfile geben und du kannst es mit Ponyprog übertragen. (n hexfile ist eine Datei, in der der Maschinencode in hexadezimaler Form dargestellt ist (kann man mitm Texteditor öffnen))

EDIT: was ich noch sagen wollte: du hast bei dem joystick nen rel. großen Bereich um die Mittelstellung, in dem nicht gesteuert wird. Kleine Ruckler machen also bei Mittelstellung nichts aus.