hi nochmals!
Habe gerade mit dem Codewizard etwas rumprobiert, (hab ihn vorher nie benutzt) und folgendes ist bei rausgekommen:
Code:
;-------------------------------------------------------------------------
; Titel : Helligkeitssteuerung einer LED mit PWM
;-------------------------------------------------------------------------
; Funktion :
; Schaltung : PORTC0=Pot1, PORTB1=LED Rot
;-------------------------------------------------------------------------
; Prozessor : ATmega8
; Takt : 3686400 Hz
; Sprache :
; Datum : 1.4.2007
; Version : 1.0
; Autor :
; Programmer:
; Port :
;-------------------------------------------------------------------------
; created by myAVR-CodeWizard
;-------------------------------------------------------------------------
.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
;--- Timer 1 initialisieren ---
ldi r16,0b00000010 ; Teiler 1/8
ori r16,0b00001000 ; Modus: Zählen bis Vergleichswert (WGM12=1)
out TCCR1B,r16 ; Teiler+Modus schreiben (soll 50Hz sein)
ldi r16,lo8(9216) ; Vergleichswert speichern
ldi r17,hi8(9216)
out OCR1AH,r17
out OCR1AL,r16
ldi r16,0b01100000 ; Port, Referenzspannung und Auflösung
out ADMUX,r16
ldi r16,0b11101101 ; Modus, Interrupt und Start
out ADCSRA,r16
;--- Interrupts erlauben ---
sei
;------------------------------------------------------------------------
; Hauptprogramm-Schleife
;------------------------------------------------------------------------
mainloop: wdr
; ...
rjmp mainloop ; Sprung zum Beginn der Hauptprogrammschleife
;--------------------------------------------------------------------
; onADC - Interrupt bei ADC Wandlung komplett
;--------------------------------------------------------------------
onADC:
push r16 ; Register retten
push r17
push r18
push r19
in r16,SREG ; Statusregister retten
push r16
; Beginn der Ereignisbehandlung
in r16,ADCH ; Einlesen des Analogwertes
;.....??
pop r16 ; Statusregister wiederherstellen
out SREG,r16
pop r19 ; Register wiederherstellen
pop r18
pop r17
pop r16
reti ;Rücksprung
Ich habe mir beide Programme genau angeschaut, aber ich versteh einfach nicht wie ich das jetzt zusammen bekommen soll
Meine Gedanken dazu bis jetzt wären wie folgt: Unter Mainloop würd ich jetzt ein "rcall initpwm" und dann unten dran
Code:
initPWM: push r16
sbi PORTB,1
ldi r16,0b10000001
out TCCR1A,r16
ldi r16,0b00000010
out TCCR1B,r16
pop r16
ret
wenn das schonmal stimmt, dann frag ich mich aber wo ich denn den Analogwert, den ich ja umgewandelt (?) hab, hin muss????? Ich versteh wirklich nur Bahnhof im moment...
*verwirrt*
Lesezeichen