datatom
23.12.2012, 17:19
Hallo zusammen,
ich versuche mit einem ATMEGA2561 http://www.atmel.com/Images/doc2549.pdf in Bascom ein PWM-Signal zu erzeugen. An dem ATMEGA habe ich die Pololu Motorsteuerung http://www.pololu.com/catalog/product/755 angeschlossen, klappt leider nicht.
Zuerst habe ich versucht die Frequenz zu berechnen: (Frequenz des Quartz 16000000/Prescaler 1024)/(2^16Bit*2) = 119 Hz
Dann habe ich in Bascom die Register des ATMEGA2561 eingestellt auf Fast PWM, Prescaler, usw.
Tccr1a = &B11000011
Tccr1b = &B00011101
Hat jemand vielleicht einen Tipp? Mich interessiert als erstes:
Habe ich die Frequenz richtig berechnet?
Habe ich die Register richtig belegt?
Vielen Dank für die Hilfe im Voraus.
Grüße
datatom
Das Bascom-Programm sieht so aus:
'
$regfile = "m2561def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
$baud = 19200
' Portbelegung Seite 3 in der ATMEL-DOKU - Pinbelegung siehe Alvidi Doku
Config Pinb.5 = Output ' Pin 22; PB5 für Timer1/ OC1A im FAST PWM-Modus
Config Pinf.0 = Output
Led0 Alias Portf.0
Config Pinf.1 = Output
Led1 Alias Portf.1
Config Pinf.2 = Output
Led2 Alias Portf.2
Config Pinf.3 = Output
Led3 Alias Portf.3
Config Pinc.0 = Output ' Pin 45; PC0
Motor1_reset Alias Portc.0
Config Pinc.1 = Output ' Pin 46; PC1
Motor1_direction Alias Portc.1
Dim I1 As Integer
Dim I2 As Integer
Dim Takt_hz As Long
Echo Off
Led0 = 1 ' LEDs einschalten
Led1 = 1
Led2 = 1
Led3 = 1
' reset Motortreiber
Motor1_reset = 1
Waitms 500
Motor1_reset = 0
Waitms 500
Motor1_reset = 1
Motor1_direction = 1
I1 = 1
I2 = 50
On Compare1a Timer1_isr
Tccr1a = &B11000011
Tccr1b = &B00011101 '
Enable Compare1a
Enable Interrupts
Compare1a = 30 ' Frequenz Hz für die Drehgeschwindigkeit
Loop
End
Timer1_isr:
I1 = I1 + 1
If I1 = 1025 Then
'Tccr1b = &B00001000 ' Timer/ Counter stopped, no clock source
End If
Return
ich versuche mit einem ATMEGA2561 http://www.atmel.com/Images/doc2549.pdf in Bascom ein PWM-Signal zu erzeugen. An dem ATMEGA habe ich die Pololu Motorsteuerung http://www.pololu.com/catalog/product/755 angeschlossen, klappt leider nicht.
Zuerst habe ich versucht die Frequenz zu berechnen: (Frequenz des Quartz 16000000/Prescaler 1024)/(2^16Bit*2) = 119 Hz
Dann habe ich in Bascom die Register des ATMEGA2561 eingestellt auf Fast PWM, Prescaler, usw.
Tccr1a = &B11000011
Tccr1b = &B00011101
Hat jemand vielleicht einen Tipp? Mich interessiert als erstes:
Habe ich die Frequenz richtig berechnet?
Habe ich die Register richtig belegt?
Vielen Dank für die Hilfe im Voraus.
Grüße
datatom
Das Bascom-Programm sieht so aus:
'
$regfile = "m2561def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
$baud = 19200
' Portbelegung Seite 3 in der ATMEL-DOKU - Pinbelegung siehe Alvidi Doku
Config Pinb.5 = Output ' Pin 22; PB5 für Timer1/ OC1A im FAST PWM-Modus
Config Pinf.0 = Output
Led0 Alias Portf.0
Config Pinf.1 = Output
Led1 Alias Portf.1
Config Pinf.2 = Output
Led2 Alias Portf.2
Config Pinf.3 = Output
Led3 Alias Portf.3
Config Pinc.0 = Output ' Pin 45; PC0
Motor1_reset Alias Portc.0
Config Pinc.1 = Output ' Pin 46; PC1
Motor1_direction Alias Portc.1
Dim I1 As Integer
Dim I2 As Integer
Dim Takt_hz As Long
Echo Off
Led0 = 1 ' LEDs einschalten
Led1 = 1
Led2 = 1
Led3 = 1
' reset Motortreiber
Motor1_reset = 1
Waitms 500
Motor1_reset = 0
Waitms 500
Motor1_reset = 1
Motor1_direction = 1
I1 = 1
I2 = 50
On Compare1a Timer1_isr
Tccr1a = &B11000011
Tccr1b = &B00011101 '
Enable Compare1a
Enable Interrupts
Compare1a = 30 ' Frequenz Hz für die Drehgeschwindigkeit
Loop
End
Timer1_isr:
I1 = I1 + 1
If I1 = 1025 Then
'Tccr1b = &B00001000 ' Timer/ Counter stopped, no clock source
End If
Return