hallo muraad, dino dieter usw.
es ist vollbracht !
durch ausdauer und nicht aufgeben hat man das ziel erreicht.
ich kann jetzt unter winavr-c ganz sauber rc5-code (14bit) senden ohne interrupt.
es tritt über haupt kein übertragungsfehler auf, klasse.
die 36khz werden nur zur zeit des gesetzten bits erzeugt also nur immer 890us lang.
dank eurer hilfe ist es endlich gelungen.
wie man sieht ist das programm nicht kompliziert. und ist für jeden anfänger nachvollziebar.
hallo muraad, du kannst dieses programm auch wieder bekannt machen.
es läuft bei mir mit dem AVR16 und 8mhz.
ir-diode von portb0 über 10kohm nach 5volt.
der port kann beliebig gewählt werden.
mfg pebisoftCode:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <string.h> #include <stdint.h> //89ms pause void ms_89(void) { uint32_t zaehler; for (zaehler=0; zaehler<118666; zaehler++) asm volatile("nop"); } //Eine 0 senden void SendBit0(void) { uint16_t i,zaehler; //890us Impuls mit 36kHz senden //Bei 28us Periodendauer ergibt das 32 Impulse for(i=0; i<32; i++) { PORTB=1; for (zaehler=0; zaehler<18; zaehler++) // ~14us asm volatile("nop"); PORTB=0; for (zaehler=0; zaehler<18; zaehler++) // ~14us asm volatile("nop"); } //890us Pause for (zaehler=0; zaehler<1186; zaehler++) asm volatile("nop"); } //Eine 1 senden void SendBit1(void) { uint16_t i,zaehler; //890us Pause for (zaehler=0; zaehler<1186; zaehler++) asm volatile("nop"); //890us Impuls mit 36kHz senden for(i=0; i<32; i++) { PORTB=1; for (zaehler=0; zaehler<18; zaehler++) asm volatile("nop"); PORTB=0; for (zaehler=0; zaehler<18; zaehler++) asm volatile("nop"); } } int main(void) { DDRB=1; // Portb1 = ausgang while (1) { SendBit1(); //Erstes Startbit=1 SendBit1(); //Zweites Startbit=1 SendBit0(); //Togglebit //5 Bit Gerätecode SendBit0(); SendBit1(); SendBit0(); SendBit1(); SendBit1(); //6 Bit Kommandocode SendBit1(); SendBit1(); SendBit1(); SendBit1(); SendBit1(); SendBit1(); //Übertragung komplett PORTB=0; //IR-LED abschalten ms_89(); // warte 89ms } }







Zitieren

Lesezeichen