Hallo Pebisoft

In dem Code oben, stehen doch alle Lösungen.

Code:
for(i=0; i<32; i++)
  {
   PORTA &= ~(1<< LED_PIN);  //oder welcher port auch immer  (LED an)
    //Hier eine Zeitschleife rein, die ca 13 µs verbrät 

   PORTA |= (1<< LED_PIN);  //oder welcher port auch immer (LED aus)
 

   //Hier eine Zeitschleife rein, die ca 13 µs verbrät 
  }

//890us Pause
 for(i=0; i<32; i++)
  {
  //Hier eine Zeitschleife rein, die ca 27 µs verbrät 

  }

}
Der Code läßt doch eine LED mit ungefähr 36 KHz leuchten für ca 889 µs. Danach 889µ aus.


Hier mal ein Teil von meinem Code damals. Wie gesagt für einen Tiny mit 1,2 MHz. Mußte halt die Variablen in Register halten.


Code:
#include <avr/io.h>

#define uchar	unsigned char
#define uint	unsigned int

void licht_aus (void);
void licht_an (void);
void send_0 (void);
void send_1 (void);
void daten (void);


#define led     1

//Funktion zum senden einer 0 +++++++++++++++++++++++++++++++++++++++
void send_0 ()
{
	licht_an();
	licht_aus();
}


//Funktion zum senden einer 1 +++++++++++++++++++++++++++++++++++++++
void send_1 ()
{
	licht_aus();
	licht_an();
}

//Funktion Licht aus+++++++++++++++++++++++++++++++++++++++++++++++++
void licht_aus (void)
{
	register uchar n asm("r2");

		for(n=0;n< 146;n++)			// 889µs Pause
		{	asm volatile (" nop");
			asm volatile (" nop");
		}
}

//Funktion Licht an++++++++++++++++++++++++++++++++++++++++++++++++++
void licht_an ()
{
	register uchar n asm("r2");

	for(n=0;n<33;n++)
	{
		// 13 us Licht an  ca 15 Takte
		  PORTB = 0x01;		// LED an
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
 // 13 us Licht aus ca 15 Takte
		  PORTB = 0x00;		//LED aus
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");
		  asm volatile (" nop");


		
	}

}

//Funktion Daten senden++++++++++++++++++++++++++++++++++++++++++++++
void daten()
{
	//Sendet immer nur zum Test diesen Code
	//Adresse = 0
	//Command = 1
	// 2 Startbits senden
	send_1();
	send_1();
	// Togglebit senden
	send_0();
	//Adresse senden
	send_0();
	send_0();
	send_0();
	send_0();
	send_0();
	//Comand senden
	send_0();
	send_0();
	send_0();
	send_0();
	send_0();
	send_1();
}


//Einstellen der Hardware des AVR++++++++++++++++++++++++++++++++++++
void init(void)
{

	//Ports einstellen
	DDRB = 0xff;
	TCCR0 = (1<<CS02)| (1<< CS00);
	//OSCCAL setzen sonst läuft er nicht sauber mit 1,2 MHZ
	//nur bei TINY 12 mit internen Takt notwendig
	asm volatile (" ldi 0x18, 0x3e");
	asm volatile (" out 0x31, 0x18");

}

//Hauptprogramm++++++++++++++++++++++++++++++++++++++++++++++++++++++
void main (void)
{
	init();

	DDRB = 0xff;

	register uchar d asm("r4");

	for(;;)
	{
		daten();
		TCNT0 = 0;
		while ( TCNT0 < 36);		//kleine Verzögerung
	}
}

Die Funktion daten ist nicht so dolle. Der Sender hat jedoch immer nur eine RC5 Befehl gesendet, von daher.


MFG
Dieter