Also so wie dein Code ist kann er nicht richtig funktionieren.
Hab ihn mal bisschen umgeändert, aber so wie du wolltest.
Hier:
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
}
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.
Gruß Muraad
Lesezeichen