ATMega128 HArdware-PWM

OP #3016880
Lesenswert?

Hallo zusammen,

ich möchte gerne einen Motor mit einem ATMega128 ansteuern.
Dazu nutze ich den Treiber L298.
Um die Geschwindigkeit des Motors zu ändern, muss dabei ein PWM-Signal 
geliefert werden.
Nun meine Frage: Wie lasse ich den ATmega128 ein PWM-Signal generieren?

Das PWM-Signal soll an folgendem Ausgang anliegen:
OC1B-PB6 (PinNr. 16)

Erstmal habe ich einfach eine LED angeschlossen (die müsste ja zumindest 
leuchten)
Hier der bisherige Versuch:

1
DDRB |= (1<<DDB6); // Port OC1B mit angeschlossener LED als Ausgang
2

3
TCCR1A = (1<<WGM10) | (1<<COM1A1); // PWM, phase correct, 8 bit.
4
TCCR1B = (1<<CS11) | (1<<CS10); // Prescaler 64 = Enable counter
5
OCR1A = 128-1; // Duty cycle 50%
6

7
whlie(1);

Mit der LED passiert aaber leider garnichts...
Was ist falsch?

Schonmal Danke für Hilfe
OP #3017481
Lesenswert?

Hier der aktuelle Code (ich habe nur auf OC1B umgestellt):
1
DDRB |= (1<<DDB6); // Port OC1B mit angeschlossener LED als Ausgang
2

3
TCCR1A = (1<<WGM10) | (1<<COM1A1); // PWM, phase correct, 8 bit.
4
TCCR1B = (1<<CS11) | (1<<CS10); // Prescaler 64 = Enable counter
5
OCR1B = 128-1; // Duty cycle 50%
6

7
while(1);



Martin Wende schrieb:
> Haste vllt vergessen die Fuse rauszunehmen für den Atmega103 kompatiblen
> Modus?


In AtmelStudio 6 ist unter Fuses der Hacken bei "M103C"
M103C = [X]

Der Controller läuft also auch als ATMega128 und nicht als ATmega103, 
oder?
(die LED leuchtet aber nicht egal ob der Hacken da ist oder nicht)
OP #3017504
Lesenswert?

ok das Häckchen ist weg und es sollte alles auf B umgestellt sein, Danke 
:)


Hier das Programm:
1
DDRB |= (1<<DDB6); // Port OC1B mit angeschlossener LED als Ausgang
2
  
3
TCCR1B = (1<<WGM10) | (1<<COM1B1); // PWM, phase correct, 8 bit.
4
TCCR1B = (1<<CS11) | (1<<CS10); // Prescaler 64 = Enable counter
5
OCR1B = 128-1; // Duty cycle 50%
6

7
while(1);

Was ist jetzt noch falsch?
OP #3017593
Lesenswert?

Jetzt aber
1
DDRB |= (1<<DDB6); // Port OC1B mit angeschlossener LED als Ausgang
2
  
3
TCCR1A = (1<<WGM10) | (1<<COM1B1); // PWM, phase correct, 8 bit.
4
TCCR1B = (1<<CS11) | (1<<CS10); // Prescaler 64 = Enable counter
5
OCR1B = 1; // Duty cycle 50%

So sollte alles richtig sein, oder?
Jedenfalls lässt sich die LED dimmen; mehr kann ich grade nicht 
probieren.

Danke für die Hilfe! :D

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren