Forum: Mikrocontroller und Digitale Elektronik Fast-PWM ATMega8


von pvvm (Gast)


Lesenswert?

Hallo
Ich versuch gerade Fast PWM (mode 15) mit meinem ATMega8 umzusetzen! 
Jedoch funktioniert das nicht so wie ich mir gedacht habe!
Hier ist mein Quellcode:
1
.include "m8def.inc"
2
main:
3
  ldi r16, 0xFF
4
  out DDRB, r16   ;PORTB auf Ausgang
5
  
6
  ldi r16, (1<<COM1B1) | (1<<WGM11) | (1<<WGM10)
7
  out TCCR1A, r16     ;non-inverting mode und mode 15
8
9
  ldi r16, (1<<WGM12) | (1<<WGM13) | (1<<CS10) | (1<<CS12)
10
  out TCCR1B, r16     ;mode 15 und Prescaler 1024
11
12
  ldi r16, 0xFF
13
  out OCR1AH, r16
14
  ldi r16, 0xFF
15
  out OCR1AL, r16     ;Top Value: 0xFFFF
16
17
  ldi r16, 0x99
18
  out OCR1BH, r16
19
  ldi r16, 0x99
20
  out OCR1BL, r16     ;Compare Value 0x9999
21
22
23
loop:
24
  rjmp loop
Ich hab eine LED an PB1 angeschlossen aber die leuchtet durchgehend...
Übrigens hab ich ein 16 MHz Quarz angeschlossen und die Fuses gesetzt!
Was mach ich noch falsch?

von spess53 (Gast)


Lesenswert?

Hi

>Ich hab eine LED an PB1 angeschlossen aber die leuchtet durchgehend...
>Übrigens hab ich ein 16 MHz Quarz angeschlossen und die Fuses gesetzt!
>Was mach ich noch falsch?

Läuft dein Controller wirklich mit 16MHz? Also Fuses richtig gesetzt?

MfG Spess

von pvvm (Gast)


Lesenswert?

Also ich hab mit dem Controller schon mal USART betrieben und es hat 
funktioniert! Hab Häckchen bei
-SUT1
-BOOTSZ1
-BOOTSZ0.
Weis nicht was ich falsch mache!? Der Code müsste auch richtig sein 
oder?

von MWS (Gast)


Lesenswert?

> Ich hab eine LED an PB1 angeschlossen aber die leuchtet durchgehend...

In Anbetracht dessen daß die PWM auf OC1B erzeugt wird nicht 
verwunderlich.

von spess53 (Gast)


Lesenswert?

Hi

An deinem Programm kann ich erstmal keinen Fehler erkennen.

Überprüfe mal deine Hardware.

MfG Spess

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Die Led ist an PB1 angeschlossen, das ist OC1A. Ein PWM-Ausgang ist in 
dem Code im Moment nur für OC1B (PB2) konfiguriert.

Also muss entweder die LED an PB2 angeschlossen werden, oder ein 
PWM-Ausgang für OC1A konfiguriert werden.

Grüße,

Peter

von pvvm (Gast)


Lesenswert?

Ja ok das war mein Fehler! Die LED war falsch angeschlossen... Ich finde 
aber das das im Datasheet nicht wirklich steht, an welchem Pin der 
Ausgang (für mode 15) ist!!!

von MWS (Gast)


Lesenswert?

> das im Datasheet nicht wirklich steht, an welchem Pin der Ausgang
>(für mode 15) ist

Für Mode 15 gibt's in diesem Sinn keinen Ausgang.

Welcher der OCxX Ausgänge aktiv ist, entscheidet nicht der Mode 15 über 
die Waveform Generation Mode(WGM)Bits, sondern das wird über die Compare 
Output Mode(COM) Bits eingestellt, wobei in COMxXx die "x" folgendes 
bedeuten:

x = Timernummer, X = A oder B Kanal, x = Konfigurationsbitnummer.

Genauso sieht's auch mit dem OCxX Ausgang aus, da Du über COM1B1 den 
B-Kanal von Timer1 genutzt hast, ist natürlich auch der OC1B aktiv, und 
wenn man im Datenblatt nachsieht, dann findet man den im Pinout auf 
Seite 2.

Das ist alles Basiswissen.

von Karl H. (kbuchegg)


Lesenswert?

MWS schrieb:

> Das ist alles Basiswissen.

Oder zumindest ein wenig logisch nachdenken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.