Hallo Leute!
Ich fange gerade an meine ersten Sachen zu programmieren, allerdings kommt das STK500 das ich bestellt habe erst in einer Woche. Da ich allerdings trotzdem schon mal ein Programm schreiben will (bissi einlesen) habe ich gleich einmal mit LEDs angefangen. Was sicher jeder schon kennt is das ein und ausschalten. Ich habe allerdings noch eine kleine Erweiterung dazu, ich will das LED auch dimmen. Dazu verwende ich eine Hardware PWM. Da ich allerdings noch nie etwas damit gemacht habe, kenn ich mich quasi 0 aus.
Derzeit kann ich (glaube ich) nur eine bestimmte LED dimmen. Ich will das aber auch auf einen anderen eingang machen.
Wie kann man einstellen das man nicht den OCR0 Port als Ausgang für den Timer haben will, sondern PortB, 0?
Hier ist mein Assembler Code:
Code:
.include "m16def.inc"
.def temp = r16
.org 0x000 ; kommt ganz an den Anfang des Speichers
rjmp main ; Interruptvektoren überspringen
; und zum Hauptprogramm
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
reti ;TIM2_COMP
reti ;TIM2_OVF
reti ;TIM1_CAPT ; Timer1 Capture Handler
reti ;TIM1_COMPA ; Timer1 CompareA Handler
reti ;TIM1_COMPB ; Timer1 CompareB Handler
reti ;TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
reti ;SPI_STC ; SPI Transfer Complete Handler
reti ;USART_RXC ; USART RX Complete Handler
reti ;USART_DRE ; UDR Empty Handler
reti ;USART_TXC ; USART TX Complete Handler
reti ;ADC ; ADC Conversion Complete Interrupt Handler
reti ;EE_RDY ; EEPROM Ready Handler
reti ;ANA_COMP ; Analog Comparator Handler
reti ;TWSI ; Two-wire Serial Interface Handler
reti ;SPM_RDY ; Store Program Memory Ready Handler
main:
;Stackpointer
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
;Aus/Eingänge
ldi temp, 0x00
out DDRD, temp ;Eingang
ldi temp, 0xFF
out DDRB, temp ;Ausgang
;Interrupteingänge
ldi temp, 0b00001001 ;INT0 und INT1 konfigurieren
out MCUCR, temp
ldi temp, 0b11000000 ;INT0 und INT1 aktivieren
out GIMSK, temp
;PWM
ldi temp, 0b01110010 ;Einstellungen siehe Seite 81-83
out TCCR0, temp
ldi temp, 0b11111111
out OCR0, temp ;Stellt die Einschaltzeit ein (Alles gesetzte --> immer ein, alles aus --> immer aus)
;Interrupts freigeben
sei ;Interrupts allgemein aktivieren
Ende:
jmp ende
EXT_INT0:
sbi PortB, 0
reti
EXT_INT1:
cbi PortB, 0
reti
TIM0_OVF:
reti
Ich weiß allerdings nicht warum ich für die PWM den Time0_OVF brauche, kann ich den auch weglassen?
mfg Gerko
Lesezeichen