wie meinst du das in der mainloop? das versteh ich nicht ganz
so ich habe als init sequenz ADC und PWM jetzt drin.-------- mainloop -------------
r16/17=getADC
setOCR=r16/16
---------------------------------
Die LED leuchtet schon malaber wie bekomme ich jetzt den umgewandelten Analogwert in das Vergleichsregister? argh ^^
hier nochmals mein bisheriger Code.
;-------------------------------------------------------------------------
; Titel :
;-------------------------------------------------------------------------
; Funktion :
; Schaltung : PORTB1=LED-Rot, PORTC0=Pot1
;-------------------------------------------------------------------------
; Prozessor : ATmega8
; Takt : 3686400 Hz
;-------------------------------------------------------------------------
.include "avr.h"
begin: rjmp main ; 1 POWER ON RESET
reti ; 2 Int0-Interrupt
reti ; 3 Int1-Interrupt
reti ; 4 TC2 Compare Match
reti ; 5 TC2 Overflow
reti ; 6 TC1 Capture
reti ; 7 TC1 Compare Match A
reti ; 8 TC1 Compare Match B
reti ; 9 TC1 Overflow
reti ;10 TC0 Overflow
reti ;11 SPI, STC Serial Transfer Complete
reti ;12 UART Rx Complete
reti ;13 UART Data Register Empty
reti ;14 UART Tx Complete
rjmp onADC ;15 ADC Wandlung komplett
reti ;16 EEPROM Ready
reti ;17 Analog Comparator
reti ;18 TWI (I²C) Serial Interface
reti ;19 Store Program Memory Ready
;------------------------------------------------------------------------
; Initialisierungen
;------------------------------------------------------------------------
main:
;--- Stack Initialisierung ---
ldi r16,hi8(RAMEND)
out SPH,r16
ldi r16,lo8(RAMEND)
out SPL,r16
; Ports initialisieren
sbi DDRB,1 ; PORTB1 auf Ausgang
;--- Interrupts erlauben ---
sei
;--- Timer 0 initialisieren ---
ldi r16,0b00000100 ; Teiler 1/256
out TCCR0,r16 ; Teiler+Modus schreiben
ldi r16,0b01100000 ; Port, Referenzspannung und Auflösung
out ADMUX,r16
ldi r16,0b11101101 ; Modus, Interrupt und Start
out ADCSRA,r16
;----------------------------------------------------------------------
; PWM und ADC initialisieren
rcall initPWM ;Schritt auf/ab
rcall initADC
;------------------------------------------------------------------------
; Hauptprogramm-Schleife
;------------------------------------------------------------------------
mainloop: wdr
out OCR1AH,r18
out OCR1AL,r16
rjmp mainloop ; Sprung zum Beginn der Hauptprogrammschleife
;------------------------------------------------------------------------
; UP: ADC initialisieren
; Beachte: Interrupt-Vektor "onADC" setzen
;------------------------------------
initADC: push r16
ldi r16,0
out ADMUX,r16 ; ADC Chanel
ldi r25,0b11011101
out ADCSRA,r25 ; enable ADC, INT, start
sei
pop r16
ret
;------------------------------------
; ISR: ADC initialisieren
; PA: r27:r26 10Bit, r25 8Bit
onADC: cli
in r26,ADCL
in r27,ADCH
asr r27
ror r26
asr r27
ror r26
mov r25,r26
sbi ADCSRA,6
sei
reti
;------------------------------------------------------------------------
; UP PWM initialisieren
; Parameter: keine
; PWM Chanel A Mode 1: 8-bit PWM, Phase-Correct, Clock/8
initPWM: push r16
sbi PORTB,1 ; PWM-Chanel A
ldi r16,0b10000001 ; PWM-Mode
out TCCR1A,r16
ldi r16,0b00000010 ; Vorteiler / PWM Frequenz
out TCCR1B,r16
pop r16
ret
;------------------------------------------------------------------------
Lesezeichen