kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu

7.1 Infrarotsender als Fernschalter

7.1 Infrared transmitter as a remote switch (EN google-translate)

7.1 Nadajnik podczerwieni jako zdalny przełącznik (PL google-translate)


Genaue Besprechung: s. Vorlesung.


Die Empfängerseite wertet das digitale Signal des IR-Empfängerbausteins aus und schaltet damit die erste grüne LED:

The receiver side evaluates the digital signal of the IR receiver module and switches so that the first green LED:

Strona odbiornika ocenia sygnał cyfrowy modułu odbiornika IR i przełącza tak, że pierwsza zielona dioda LED:

#include <avr/io.h>               
int main(void)                    
{
    DDRA = 0;
    DDRB = 0;
    DDRC = 0;
    DDRD = 0;
                           
    DDRA |= 0b00000011;  //PA0 und PA1 als Ausgang konfigurieren          
    PORTA &= 0b11111100; //PA0 und PA1 auf Masse ziehen.      

    //Empfängerseite für Schaltkonzept über Infrarot.
    //Wenn der Ausgang des TSOP31230 auf Masse geht, muß lediglich eine
    //LED eingeschaltet werden und andernfalls aus.

    //Der Ausgang des TSOP31230 liegt bei PD0 (RXD / Pin14) an.

    DDRD &= 0b11111110;

    while(1)
    {
        if((PIND & 0b00000001)==0)
        {
            PORTA |= 0b00000010; //PA1 auf 1 setzen       
        }
        else
        {
            PORTA &= 0b11111101; //PA1 auf 0 setzen       
        }
    }
}

Code 7.1-1: Quelltext 01b_schalten_empfaenger.

Auf der Senderseite werden die Infrarot-LEDs mit 30kHz getaktet. Hierzu werden drei Möglichkeiten getestet: Modus 4, 10 und 14 des Timers 1 (vergl. Datenblatt und Vorlesung).

On the transmitter side, the infrared LEDs are clocked at 30kHz. For this purpose, three possibilities are tested: Mode 4, 10 and 14 of timer 1 (see data sheet and lecture).

Po stronie nadajnika diody podczerwieni są taktowane z częstotliwością 30 kHz. W tym celu testowane są trzy możliwości: Tryb 4, 10 i 14 zegara 1 (patrz arkusz danych i wykład).

#define TAKTFREQUENZ 1000000

#include <avr/io.h>               
int main(void)                    
{
    long pause;

    //Konfigurieren des Senders:
    //IR-Diode muß mit 30kHz getriggert werden.

    //Dazu: Timer1 in Modus 12: (kein PWM-Mode)
    //CTC, Einstellung der Zählgrenze mit ICR1:
    //Ausgänge toggeln 
    //(vergl. Datenblatt)

    //Vorteilung für 30kHz bei 1000000 Systemtakt:
    //foc = 1000000/(2*N*Q)=30000
    //Q=1000000/(30000*2*N), N=1, so ergibt sich Q=16,6666... ungefähr 17
    //N=Vorteilung
    //Q=Zählgrenze in ICR1

    TCCR1A = (0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (1<<COM1B0) 
            | (0<<FOC1A) | (0<<FOC1B) | (0<<WGM11) | (0<<WGM10);
    TCCR1B = (0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) 
            | (0<<CS12) | (0<<CS11) | (1<<CS10);
    ICR1 = 16;

    DDRD  |= 0b00100000; //PD5 als Ausgang schalten, PD1 in Ruhe lassen.

    //Gegenpol PD1 der IR-Diode als Ausgang setzen und auf Masse ziehen:
    DDRD |= 0b00000010;

    PORTD &= 0b11111101;

    while(1)
    {
        for(pause=0;pause<10000;pause++)                  
            DDRA=0;
        PORTD |= 0b00000010;  //IR ausschalten
        for(pause=0;pause<10000;pause++)                  
            DDRA=0;
        PORTD &= 0b11111101;  //IR einschalten
    }
}

Code 7.1-2: Quelltext 01a_schalten_sender - Sender mit Modus 4.

#include <avr/io.h>               
int main(void)                    
{
   long pause;
      
   DDRD  |= 0b00100000; //PD5 als Ausgang schalten, PD1 in Ruhe lassen.
   //Gegenpol PD1 der IR-Diode als Ausgang setzen und auf Masse ziehen:
   DDRD |= 0b00000010;
   PORTD &= 0b11111101;

   ICR1 = 17;  //für 1MHz
//Modus 10, Phasenkorrekt mit ICR1 als Einstellung.
   TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) 
          | (0<<FOC1A) | (0<<FOC1B) | (1<<WGM11) | (0<<WGM10);
   TCCR1B = (0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (0<<WGM12) 
          | (0<<CS12) | (0<<CS11) | (1<<CS10);

   OCR1A = 8; //PWM-Breite auf 50% setzen.

   while(1)                       
   { 
        for(pause=0;pause<10000;pause++)                  
            DDRA=0;
        OCR1A = 8; //PWM-Breite auf 50% setzen.
        for(pause=0;pause<10000;pause++)                  
            DDRA=0;
        OCR1A = 0; //PWM-Breite auf 0% setzen.
                             
   }                              
}

Code 7.1-3: Quelltext 01a_schalten_sender2 - Sender mit Modus 10.

#include <avr/io.h>               
int main(void)                    
{
   long pause;
      
   DDRD  |= 0b00100000; //PD5 als Ausgang schalten, PD1 in Ruhe lassen.
   //Gegenpol PD1 der IR-Diode als Ausgang setzen und auf Masse ziehen:
   DDRD |= 0b00000010;
   PORTD &= 0b11111101;

   ICR1 = 33;  //für 1MHz
//Modus 14, Fast PWM mit ICR1 als Einstellung.
   TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) 
          | (0<<FOC1A) | (0<<FOC1B) | (1<<WGM11) | (0<<WGM10);
   TCCR1B = (0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) 
          | (0<<CS12) | (0<<CS11) | (1<<CS10);

   OCR1A = 16; //PWM-Breite auf 50% setzen.

   while(1)                       
   { 
        for(pause=0;pause<10000;pause++)                  
            DDRA=0;
        OCR1A = 16; //PWM-Breite auf 50% setzen.
        for(pause=0;pause<10000;pause++)                  
            DDRA=0;
        OCR1A = 0; //PWM-Breite auf 0% setzen.
                             
   }                              
}

Code 7.1-4: Quelltext 01a_schalten_sender3 - Sender mit Modus 14.