ich hatte neulich ein ähnliches problem, allerdings in assembler und mit 33kHz. wenn du es dir umstrickst auf c dürft es aber gehen:
in der hauptschleife werden jeweils 2 ports für eine sekunde geschalten, derweil erzeugt OC1A ( am atmega 8 ) ein 33kHz signal.Code:.NOLIST .INCLUDE <m8def.inc> .LIST ; MCU Takt für diverse Berechnungen festlegen .equ tosc = 1000000 ; Ausgabefreq festlegen .equ fout = 33000 ; Timer 1 Ladewert .equ ladewert = (tosc / (2 * fout)) - 1 .CSEG .org 0 ; Interupt Vektoren rjmp init ; Reset Handler reti ; IRQ0 Handler reti ; IRQ1 Handler reti ; Timer2 Compare Handler reti ; Timer2 Overflow Handler reti ; Timer1 Capture Handler reti ; Timer1 CompareA Handler reti ; Timer1 CompareB Handler reti ; Timer1 Overflow Handler reti ; Timer0 Overflow Handler reti ; SPI Transfer Complete Handler reti ; USART RX Complete Handler reti ; UDR Empty Handler reti ; USART TX Complete Handler reti ; ADC Conversion Complete Handler reti ; EEPROM Ready Handler reti ; Analog Comparator Handler reti ; Two-wire Serial Interface Handler reti ; Store Program Memory Ready Handler init: ldi r16, high(RAMEND); Stackpointer initialisieren out SPH, R16 ldi r16, low(RAMEND) out SPL, R16 ldi r24, 255 out DDRB, r24 ; Port B als Ausgang out DDRD, r24 ; Port D auch out PORTC, r24 ; Pullups von Port C aktivieren ; (-> damit hat dieser einen definierten Pegel ; und nicht osziliert sinnfrei rum) ldi r17, (1<<COM1A0) ; Timer 1 konfigurieren (Mode 4 -> CTC) ldi r16, (1<<WGM12)|(1<<CS10) out TCCR1A, r17 out TCCR1B, r16 ldi r16, high(ladewert) out OCR1AH,r16 ldi r16, low(ladewert) out OCR1AL,r16 ; in r16, TIMSK ; Diese auskommentierten Zeilen sind hier unnötig, ; ori r16, (1<<OCIE1A) ; ich habe sie nur drinne gelasen um zu zeigen, ; out TIMSK, r16 ; wie ich es machen würde sei ; Interrupts aktivieren loop: ; hauptschleife ldi r24, 160 out PORTD, r24 ldi r24, 0 out PORTB, r24 ; PD5+6 auf HIGH ldi r17, 0x09 ; delay loop, 1Hz WGLOOP0: ldi r18, 0xBC WGLOOP1: ldi r19, 0xC4 WGLOOP2: dec r19 brne WGLOOP2 dec r18 brne WGLOOP1 dec r17 brne WGLOOP0 nop ldi r24, 64 out PORTD, r24 ; PD5+6 auf HIGH ldi r24, 1 out PORTB, r24 ; PD5+6 auf HIGH ldi r17, 0x09 ; delay loop, 1Hz WGLOOP3: ldi r18, 0xBC WGLOOP4: ldi r19, 0xC4 WGLOOP5: dec r19 brne WGLOOP5 dec r18 brne WGLOOP4 dec r17 brne WGLOOP3 nop rjmp loop
vielleicht hilfts..(mir hat damals "Hanni" geholfen)
gruesse von der katze







Zitieren

Lesezeichen