Hallo Rolf,
bitte nimm mal das Codefenster für Code: einfach im Editor auf das Lattenzahnsymbol (Hash) klicken. Ich habs mal etwas lesbarer gemacht - aber mittlerweile kneift meine Zeit, später vielleicht mehr.
Zitat von
hegewald
... dieser Code zeigt nichts an den LEDs ... Bei CTC lief alles ...
Code:
; Projekt: Mega8-PWM Datum: 03.11.2013; Datei: mega8-FASTPWM01.asm
; ATmega8 Timer1 FastPWM-Betrieb Kanäle A und B
; Port B: Ausgang Kanal A:OC1A (PB1-Pin15) Kanal B:OC1B (PB2-Pin16)
; Konfiguration: interner Oszillator 1 MHz, externes RESET-Signal
.INCLUDE "m8def.inc" ; Deklarationen für Mega8
.EQU takt = 1000000 ; Systemtakt 1 MHz intern
.DEF akku = r16
.DEF temp17 = r17
.CSEG ; Programm-Flash
rjmp start ; Reset-Einsprung
.ORG $13 ; Interrupt-Einsprünge übergehen
start:
ldi akku, LOW(RAMEND) ; Stapel anlegen
out SPL, akku ;
ldi akku, HIGH(RAMEND)
out SPH, akku
ldi akku, (1<<PB1) | (1<<PB2)
out DDRB, akku
.equ WertH = 100 ; Konstante für OCR1AH u. OCR1BH (r16)
.equ WertL = 70 ; Konstante für OCR1AL u. OCR1BL (r17)
; Timer1 programmieren: WGM10=1<<<PWM8Bit phasenrichtig (TOPP=00FF)
; KanalA (COM1Ax) zu PB1 und KanalB (COM1Bx) zu PB2 nicht invertiert
ldi akku, (0<<COM1A1) |(1<<COM1A0)| (0<<COM1B1) | (0<<COM1B0)| (0<<WGM11) | (1<<WGM10)
out TCCR1A, akku ; Steuerregister A Timer1
clr akku
ldi akku, (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10)
out TCCR1B, akku ; Steuerregister B Timer1 Prescale = 1 (1MHz)
loop: ldi akku, WertH ; r16 auf 20
ldi temp17, WertL ; r17 auf 70
out OCR1AH, akku ; Kanal A = 100 (WertH)
out OCR1AL, temp17 ; Kanal A = 70 (WertL)
out OCR1BH, akku ; Kanal B = 100 (WertH)
out OCR1BL, temp17 ; Kanal B = 70 (WertL
rjmp loop
.EXIT
Lesezeichen