Hi,

wenn du unter Bascom programmierst geht das unter fast allen Atmel Controllern gleich. Du kannst dir also auch andere Beispiele anschaun. Hier z.B. das Programm zum Mega 16 (rn-control)
Schau dir darin mal die Motorroutine an


Code:
'################################################### 
'rncontroltest.BAS 
'für 
'RoboterNetz Board RN-Control 1.1 
'Das neue preiswerte Controllerboard zum experimentieren 
' 
'Aufgabe: 
' Dieses testprogramm testet gleich mehrere Eigenschaften auf dem Board 
' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet 
' Taste 1: Zeigt Batteriespannung über RS232 an 
' Taste 2: Angeschlossene Motoren beschleunigen und abbremsen 
' Taste 3: Einige male Lauflicht über LED´s anzeigen. Am I2C-Bus 
'          darf in diesem Moment nichts angeschlossen sein 
' Taste 4: Zeigt analoge Messwerte an allen Port A PIN´s über RS232 an 
''Taste 5: Zeigt digitalen I/O Zustand von PA0 bis PA5 an 


' Ser gut kann man aus dem Demo auch entnehmen wie Sound ausgegeben wird, 
' wie Tasten abgefragt werden und wie Subroutinen und Funktionen angelegt werden 

'Autor: Frank 
'Weitere Beispiele und Beschreibung der Hardware 
'unter http://www.Roboternetz.de oder robotikhardware.de 
'####################################################### 


Declare Sub Batteriespannung() 
Declare Sub Motortest() 
Declare Sub Lauflicht() 
Declare Sub Showporta() 
Declare Sub Showdigitalporta() 
Declare Function Tastenabfrage() As Byte 


$regfile = "m16def.dat" 

Dim I As Integer 
Dim N As Integer 
dim Ton As Integer 


$crystal = 16000000                                         'Quarzfrequenz 
$baud = 9600 

Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung 

Config Pina.7 = Input                                       'Für Tastenabfrage 
Porta.7 = 1                                                 'Pullup Widerstand ein 


Const Ref = 5 / 1023                                        'Für Batteriespannungsberechnung 

Dim Taste As Byte 
Dim Volt As Single 

' Für Motorentest 
'Ports für linken Motor 
Config Pinc.6 = Output                                      'Linker Motor Kanal 1 
Config Pinc.7 = Output                                      'Linker Motor Kanal 2 
Config Pind.4 = Output                                      'Linker Motor PWM 
'Ports für rechten Motor 
Config Pinb.0 = Output                                      'Rechter Motor Kanal 1 
Config Pinb.1 = Output                                      'Rechter Motor Kanal 2 
Config Pind.5 = Output                                      'Rechter Motor PWM 
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 
Pwm1a = 0 
Pwm1b = 0 
Tccr1b = Tccr1b Or &H02                                     'Prescaler = 8 





I = 0 
Sound Portd.7 , 400 , 450                                   'BEEP 
Sound Portd.7 , 400 , 250                                   'BEEP 
Sound Portd.7 , 400 , 450                                   'BEEP 
Print 
Print "**** RN-Control 1.1 *****" 
Print "Das neue Experimentier- und Roboterboard" 
Print 
Do 




   Taste = Tastenabfrage() 
   If Taste <> 0 Then 

      Select Case Taste 
         Case 1 
            Call Batteriespannung                           'Taste 1 Zeigt Bateriespannung über RS232 an 
         Case 2 
            Call Motortest                                  'Taste 2 Motoren beschleunigen und abbremsen 
         Case 3 
            Call Lauflicht                                  'Einige male Lauflicht über LED´s anzeigen. Am I2C-Port darf in diesem Moment nichts angeschlossen sein 
         Case 4 
            Call Showporta                                  'Zeigt Messwerte an allen Port A PIN´s 
         Case 5 
            Call Showdigitalporta                           'Zeigt digitalen I/O Zustand von PA0 bis PA5 an 



      End Select 
      Sound Portd.7 , 400 , 500                             'BEEP 
   End If 

   Waitms 100 
Loop 

End 




'Diese Unterfunktion fragt die Tastatur am analogen Port ab 
Function Tastenabfrage() As Byte 
Local Ws As Word 

   Tastenabfrage = 0 
   Ton = 600 
   Start Adc 
   Ws = Getadc(7) 
   If Ws < 1010 Then 
      Select Case Ws 
         Case 410 To 450 
            Tastenabfrage = 1 
            Ton = 550 
         Case 340 To 380 
            Tastenabfrage = 2 
            Ton = 500 
         Case 265 To 305 
            Tastenabfrage = 3 
            Ton = 450 
         Case 180 To 220 
            Tastenabfrage = 4 
            Ton = 400 
         Case 100 To 130 
            Tastenabfrage = 5 
            Ton = 350 
      End Select 
      Sound Portd.7 , 400 , Ton                             'BEEP 
   End If 

End Function 



'Diese Unterfunktion zeigt Bateriespannung an 
Sub Batteriespannung() 
Local W As Word 
   Start Adc 
   W = Getadc(6) 
   Volt = W * Ref 
   Volt = Volt * 5.2941 
   Print "Die aktuelle Spannung beträgt: " ; Volt ; " Volt" 

End Sub 


'Testet Motoren und Geschwindigkeitsreglung 
Sub Motortest() 
   'Linker Motor ein 
   Portc.6 = 1                                              'bestimmt Richtung 
   Portc.7 = 0                                              'bestimmt Richtung 
   Portd.4 = 1                                              'Linker Motor EIN 

   'Rechter Motor ein 
   Portb.0 = 1                                              'bestimmt Richtung rechter Motor 
   Portb.1 = 0                                              'bestimmt Richtung rechter Motor 
   Portd.5 = 1                                              'rechter Motor EIN 


   I = 0 
   Do 
      Pwm1a = I 
      Pwm1b = I 
      Waitms 40 
      I = I + 5 
   Loop Until I > 1023 

   Wait 1 
   Do 
      Pwm1a = I 
      Pwm1b = I 
      Waitms 40 
      I = I - 5 
   Loop Until I < 1 
   Pwm1a = 0                                                'Linker Motor aus 
   Pwm1b = 0                                                'rechter Motor aus 
End Sub 


'Einige male Lauflicht über LED´s anzeigen. Am I2C-Port darf in diesem Moment nichts angeschlossen sein 
Sub Lauflicht() 

   Config Portc = Output 
   Portd = 0 
   For N = 1 To 10 
      For I = 0 To 7 
         Portc.i = 0 
         Waitms 100 
         Portc.i = 1 
      Next I 
   Next N 
   Config Portc = Input 
End Sub 


'Zeigt Die Analogen Messwerte An Port A An 
Sub Showporta() 
Local Ws As Word 

   Config Porta = Input 
   For I = 0 To 5                                           ' Alle internen Pullup Widerständ ein,bis auf Batteriespannungsmessungsport 
      Porta.i = 1 
   Next I 

   Print 
   Print "Ermittelte Messwerte an Port A:" 
   For I = 0 To 7                                           ' Alle Eingäne inkl.messen 
      Start Adc 
      Ws = Getadc(i) 
      Volt = Ws * Ref 
      Print "Pin " ; I ; " ADC-Wert= " ; Ws ; " bei 5V REF waeren das " ; Volt ; " Volt" 
   Next I 
End Sub 


'Zeigt den Zustand einiger freier I/OI/O von Die Analogen Messwerte An Port A An 
Sub Showdigitalporta() 
Local Zustand As String 
   Config Porta = Input 
   For I = 0 To 5                                           ' Alle internen Pullup Widerständ ein,bis auf Batteriespannungsmessungsport 
      Porta.i = 1 
   Next I 

   Print 
   Print "Ermittelter I/O Zustand Port A:" 
   For I = 0 To 5                                           ' Alle Eingäne inkl.messen 
      If Pina.i = 1 Then 
         Zustand = "High" 
      Else 
         Zustand = "Low" 
      End If 
      Print "Pin " ; I ; " I/O Zustand= " ; Pina.i ; " " ; Zustand 
   Next I 
End Sub
Entscheident sind dabei folgende Zeilen:
Code:
Config Pind.4 = Output                                      'Linker Motor PWM 
Config Pind.5 = Output                                      'Rechter Motor PWM 
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 
Pwm1a = 0 
Pwm1b = 0 
Tccr1b = Tccr1b Or &H02                                     'Prescaler = 8
Nach der oberen Konfigurationsphase kannst du also einfach PWM regeln mit:

Pwm1a = Geschwindigkeit 0 bis 1023
Pwm1b = Geschwindigkeit 0 bis 1023