Also so wie dein Code ist kann er nicht richtig funktionieren.
Hab ihn mal bisschen umgeändert, aber so wie du wolltest.
Hier:
Jetzt werden nur deine for() Schleifen benutzt. Ich weiß allerdings nicht genau ob man einer Funktion den Wert einer Variable als Binärzahl übergeben darf, ich denke aber schon.Code:#include <stdio.h> #include <inttypes.h> #include <avr/io.h> #include <avr/delay.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <string.h> #include <stdint.h> uint16_t zaehler; uint32_t zaehler1; void us_889(void) { for (zaehler=0; zaehler<1185; zaehler++) asm volatile("nop"); } void ms_89(void) { for (zaehler1=0; zaehler1<117105; zaehler1++) asm volatile("nop"); } void ir_init_send(void) { //36kHz Träger TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<WGM11); TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS10); OCR1A = 111; ICR1 = 222; //Timer-Interrupt alle 2,048ms zur Signalerzeugung --> 1/(8MHz/256/64) TCCR0 = (1<<CS01) | (1<<CS00); //Prescaler von 64 TIMSK |= (1<<TOIE0); //Timer0 Overflow Interrupt aktivieren } void rc5_send(uint16_t code) // Nur die ersten 14Bits zählen die obersten 2 werden ignoriert { uint8_t i; for(i=0;i<=14;i++) { DDRD&= ~(1<<PD5); // PWM 36kHz Signal auf low us_889(); // halbe Bitzeit warten if (code & (1<<i)) // aktuelles Bit in code prüfen ob high DDRD|= (1<<PD5); //wenn ja, PWM 36kHz Signal auf high us_889(); // zweite halbe Bitzeit } ms_89(); // Pause int main(void) { ir_init_send(); rc5_send(0b0000110001001111); // Nur untersten 14Bits sind wichtig }
Gruß Muraad







Zitieren
Lesezeichen