spelli2001
22.02.2013, 05:17
Hallo,
ich habe hier ein Entwicklerboard mit einem Atmega644 und 20 MHz, verbunden mit 2x L293D mit denen ich 4x kleine DC Motoren ansteuern möchte.
Ich habe leider das Problem, dass ich mit der PWM nicht weiter komme. Ich füge hier den Code an, vielleicht kann mir jmd. helfen:
Hallo,
leider startet mein Atmega644 nach dem Print "Ctrl v.0.1" immer wieder
neu...
Ich möchte 4 DC Motoren in der Richtung und über 4x PWM in der
Geschwindigkeit regeln - aber da stimmt was nicht!
'################################################# ###############
'
' Control v. 0.1
' -------------------------------------
'
' Stand: 21.02.2013, ATmega644
'
'
'################################################# ###############
'--------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'--------------------------------------------------------------------------
$regfile = "m644def.dat"
$crystal = 20000000
$hwstack = 64
$swstack = 64
$framesize = 64
$baud = 9600
'--------------------------------------------------------------------------
' Definition von Ressourcen
'--------------------------------------------------------------------------
Led Alias Portd.2 ' rote LED
'Treiber L293 oben (1) / Timer2
1_pwm1_z Alias Portd.7
1_m1a_z Alias Portc.3
1_m1b_z Alias Portc.4
1_pwm2_f Alias Portd.6
1_m2a_f Alias Portc.7
1_m2b_f Alias Portc.6
'Treiber L293 unten (2) / Timer0
2_pwm1_p Alias Portb.3
2_m1a_p Alias Portb.1
2_m1b_p Alias Portb.2
2_pwm2_t Alias Portb.4
2_m2a_t Alias Portb.0
2_m2b_t Alias Portc.5
'--------------------------------------------------------------------------
' Definition von Konstanten
'--------------------------------------------------------------------------
'--------------------------------------------------------------------------
' Definition von Variablen und Datentypen
'--------------------------------------------------------------------------
'---- PWM für A293D ----
Dim 1z As Integer
Dim 1f As Integer
Dim 2p As Integer
Dim 2t As Integer
'--------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'--------------------------------------------------------------------------
' Timer2 für PWM 8Bit L293D (1) "oben"
Config Timer2 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
' Timer0 für PWM 8Bit L293D (2) "unten"
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
'---- Timer ----
'---- Outputs ----
Config Led = Output
'Treiber L293 oben (1) / Timer2
Config 1_pwm1_z = Output 'OC2A
Config 1_m1a_z = Output
Config 1_m1b_z = Output
Config 1_pwm2_f = Output 'OC2B
Config 1_m2a_f = Output
Config 1_m2b_f = Output
'Treiber L293 unten (2) / Timer0
Config 2_pwm1_p = Output 'OC0A
Config 2_m1a_p = Output
Config 2_m1b_p = Output
Config 2_pwm2_t = Output 'OC0B
Config 2_m2a_t = Output
Config 2_m2b_t = Output
'---- Interrupts ----
Enable Interrupts
Enable Timer0
Enable Timer2
'--------------------------------------------------------------------------
' Init
'--------------------------------------------------------------------------
1_m1a_z = 0 ' L293D Zoom OFF
1_m1b_z = 0
'1z = 150 ' Anfangsgeschwindigkeit für PWM L293D
'Ocr2a = 1z
1_m2a_f = 0 ' L293D Focus OFF
1_m2b_f = 0
'1f = 150 ' Anfangsgeschwindigkeit für PWM L293D
'Ocr2b = 1f
2_m1a_p = 0 ' L293D PAN OFF
2_m1b_p = 0
'2p = 150 ' Anfangsgeschwindigkeit für PWM L293D
'Ocr0a = 2p
2_m2a_t = 0 ' L293D TILT OFF
2_m2b_t = 0
'2t = 150 ' Anfangsgeschwindigkeit für PWM L293D
'Ocr0b = 2t
Led = 1
Print "Ctrl v.0.1"
'--------------------------------------------------------------------------
' Hauptprogramm
'--------------------------------------------------------------------------
Do
2_m2a_t = 1
2_m2b_t = 0
Ocr0b = 150
Loop
End
ich habe hier ein Entwicklerboard mit einem Atmega644 und 20 MHz, verbunden mit 2x L293D mit denen ich 4x kleine DC Motoren ansteuern möchte.
Ich habe leider das Problem, dass ich mit der PWM nicht weiter komme. Ich füge hier den Code an, vielleicht kann mir jmd. helfen:
Hallo,
leider startet mein Atmega644 nach dem Print "Ctrl v.0.1" immer wieder
neu...
Ich möchte 4 DC Motoren in der Richtung und über 4x PWM in der
Geschwindigkeit regeln - aber da stimmt was nicht!
'################################################# ###############
'
' Control v. 0.1
' -------------------------------------
'
' Stand: 21.02.2013, ATmega644
'
'
'################################################# ###############
'--------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'--------------------------------------------------------------------------
$regfile = "m644def.dat"
$crystal = 20000000
$hwstack = 64
$swstack = 64
$framesize = 64
$baud = 9600
'--------------------------------------------------------------------------
' Definition von Ressourcen
'--------------------------------------------------------------------------
Led Alias Portd.2 ' rote LED
'Treiber L293 oben (1) / Timer2
1_pwm1_z Alias Portd.7
1_m1a_z Alias Portc.3
1_m1b_z Alias Portc.4
1_pwm2_f Alias Portd.6
1_m2a_f Alias Portc.7
1_m2b_f Alias Portc.6
'Treiber L293 unten (2) / Timer0
2_pwm1_p Alias Portb.3
2_m1a_p Alias Portb.1
2_m1b_p Alias Portb.2
2_pwm2_t Alias Portb.4
2_m2a_t Alias Portb.0
2_m2b_t Alias Portc.5
'--------------------------------------------------------------------------
' Definition von Konstanten
'--------------------------------------------------------------------------
'--------------------------------------------------------------------------
' Definition von Variablen und Datentypen
'--------------------------------------------------------------------------
'---- PWM für A293D ----
Dim 1z As Integer
Dim 1f As Integer
Dim 2p As Integer
Dim 2t As Integer
'--------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'--------------------------------------------------------------------------
' Timer2 für PWM 8Bit L293D (1) "oben"
Config Timer2 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
' Timer0 für PWM 8Bit L293D (2) "unten"
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
'---- Timer ----
'---- Outputs ----
Config Led = Output
'Treiber L293 oben (1) / Timer2
Config 1_pwm1_z = Output 'OC2A
Config 1_m1a_z = Output
Config 1_m1b_z = Output
Config 1_pwm2_f = Output 'OC2B
Config 1_m2a_f = Output
Config 1_m2b_f = Output
'Treiber L293 unten (2) / Timer0
Config 2_pwm1_p = Output 'OC0A
Config 2_m1a_p = Output
Config 2_m1b_p = Output
Config 2_pwm2_t = Output 'OC0B
Config 2_m2a_t = Output
Config 2_m2b_t = Output
'---- Interrupts ----
Enable Interrupts
Enable Timer0
Enable Timer2
'--------------------------------------------------------------------------
' Init
'--------------------------------------------------------------------------
1_m1a_z = 0 ' L293D Zoom OFF
1_m1b_z = 0
'1z = 150 ' Anfangsgeschwindigkeit für PWM L293D
'Ocr2a = 1z
1_m2a_f = 0 ' L293D Focus OFF
1_m2b_f = 0
'1f = 150 ' Anfangsgeschwindigkeit für PWM L293D
'Ocr2b = 1f
2_m1a_p = 0 ' L293D PAN OFF
2_m1b_p = 0
'2p = 150 ' Anfangsgeschwindigkeit für PWM L293D
'Ocr0a = 2p
2_m2a_t = 0 ' L293D TILT OFF
2_m2b_t = 0
'2t = 150 ' Anfangsgeschwindigkeit für PWM L293D
'Ocr0b = 2t
Led = 1
Print "Ctrl v.0.1"
'--------------------------------------------------------------------------
' Hauptprogramm
'--------------------------------------------------------------------------
Do
2_m2a_t = 1
2_m2b_t = 0
Ocr0b = 150
Loop
End