- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 13

Thema: Verständniss Frage zu einer Modulation

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Okay... Also müsste ich eigentlich nur in meiner 36kHz ISR Meine IR LED bedienen? Die Pause realisiere ich mit einem anderen Timer. Und dann einfach via. Flag die LEDs in der 36kHz ISR pulsen sehe ich das soweit richtig?
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Zitat Zitat von Janiiix3 Beitrag anzeigen
    Okay... Also müsste ich eigentlich nur in meiner 36kHz ISR Meine IR LED bedienen?
    So wie ich das kenne, gibt es keine 36kHz-ISR. Die 36kHz werden mit einem Timer HW-mäßig auf einem der OC Pins ausgegeben. Der Pin wird dann mit den 889µs Zeiten entsprechend ein und ausgeschaltet.

    EDIT. Glaub hatte ein bißchen Blödsinn geschrieben und das nun gelöscht

    Gruß
    Searcher
    Geändert von Searcher (26.06.2015 um 19:57 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Ist mir klar das es nicht direkt eine 36kHz ISR gibt. Die Frequenz erzeuge ich mit Timer1(16 Bit). Habe diese auch schon mit dem Oszilloskop nachgemessen, dass passt soweit. Meine Frage ist jetzt nur noch ob ich die Pins dann halt dort schalten muss oder direkt nach der 880us Pause... Ich poste am besten demnächst mal meinen bisherigen Code.
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Zitat Zitat von Janiiix3 Beitrag anzeigen
    Meine Frage ist jetzt nur noch ob ich die Pins dann halt dort schalten muss oder direkt nach der 880us Pause...
    Ich verstehe die Frage nicht so richtig. Die 36kHz werden erzeugt und die IR-LED sendet mit dieser Frequenz ihr Licht aus bzw schaltet ihr IR-Licht mit dieser Frequenz ein und aus.

    Im Ruhezustand wird der PIN abgeschaltet. IR-LED ist aus. Soll eine "1" gesendet werden, muß die IR-LED für 889µs aus sein und dann wird der PIN für 889µs eingeschaltet. In diesen 889µs "flackert" die IR-LED mit 36kHz. Danach wieder aus bzw ist davon abhängig, was als nächstet gesendet werden soll - eine "1" oder eine "0"

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Die Modulations Frequenz beträgt 36kHz.

    In dieser ISR die dementsprechend überläuft, schalte ich meine LED ein und aus... Soweit klar. Nun will ich aber nicht einfach mit nem delay meine Pause von 889us erzeugen sondern mit einem anderen Timer. Dies wollte ich halt über Flags machen... Ich glaube wir reden aneinander vorbei. Ich bin leider kein guter erklärer...
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Na ja, in dem Fall ist kompilierbarer Beispiel-/Testcode bestimmt die beste Diskussionsgrundlage. Grundsätzlich ist es gut delays zu vermeiden, besonders in ISRs.

    Gruß
    Saercher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von Janiiix3 Beitrag anzeigen
    Die Modulations Frequenz beträgt 36kHz.
    Sorry, Nein!
    Die 36kHz sind die Trägerfrequenz.
    Diese muss zum Empfänger passen (Der Empfänger hat ein entsprechen des Filter, da gib es eine ganze Reihe an Frequenzen so zwischen 35 und 40 kHz).

    Das Takten dieser 36kHz ist dann die Modulation!

    Codiert ist das Ganze als Manchster:
    https://de.wikipedia.org/wiki/Manchester-Code
    https://de.wikipedia.org/wiki/RC-5

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  8. #8
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Sooo nun bin ich wieder erwacht :-P

    Hier mal mein aktueller Quellcode. Ich mache mit großer Sicherheit irgendwas ganz gravierendes falsch...

    Code:
    #define F_CPU 16000000
    
    #define RC5_HALF_BIT_TIME 8 // 8 * 111µs = 888µs
    
    #define RC5_SEND_ON        PORTD |=  (1<<PD1)
    #define RC5_SEND_OFF    PORTD &= ~(1<<PD1)
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    #include <stdbool.h>
    
    
    void rc5_send_command(uint16_t command);
    void rc5_send_one(void);
    void rc5_send_zero(void);
    void delay_880(void);
    
    volatile static uint8_t modulation, rc5_half_bit_cnt, rc5_state;
    
    uint16_t rc5_byte = 0x00;
    
    int main(void)
    {
        DDRB |= (1<<PB7);
        DDRD |= (1<<PD1);
        
        TCCR0A  = (1<<WGM01);  // CTC
        TCCR0B  = (1<<CS01);   // 8 ( ca. 111µs @ 8 MHz )
        TCCR1B  = (1<<CS10);   // 1 ( ca. 36 kHz @ 8 MHz )
        TCCR1B |= (1<<WGM12);  // CTC
        TIMSK0  = (1<<OCIE0A); // OutputCompare0A
        TIMSK1  = (1<<OCIE1A); // OutputCompare1A
    
        OCR0A  = (0x6E);
        OCR1A  = (0x00DD);
    
        sei();
        
    
                
        while(1)
        {
            rc5_send_command(0b11000000001100);            
        }
    }
    
    /* send a 14 bit command to the IR - Receiver */
    void rc5_send_command(uint16_t command)
    {
        uint16_t send_byte = command;
        
        for (uint16_t x = 0 ; x < 14 ; x++)
        {
            if (send_byte & 0x8000)
            {
                rc5_send_one();
            }
            else
            {
                rc5_send_zero();
            }
            send_byte <<= 0x0001;
        }
    }
    
    /* send a logical one to the Receiver ( 1 --> 0 ) */
    void rc5_send_one(void)
    {
        rc5_state &= ~(0x40);
        delay_880();
        rc5_state |=  (0x40);
        delay_880();
    }
    
    /* send a logical zero to the  Receiver ( 0 --> 1 ) */
    void rc5_send_zero(void)
    {
        rc5_state |= (0x40); // led on
        delay_880();    
        rc5_state &= ~(0x40); // led off
        delay_880();
    }
    
    void delay_880(void)
    {
        while(1)
        {
            if ((rc5_state & 0x01) == 0x01)
            {
                rc5_half_bit_cnt = 0x00;
                rc5_state = 0x00;
                break;
            }
        }
    }
    
    /* called every 111 µs */
    ISR(TIMER0_COMPA_vect)
    {
        rc5_half_bit_cnt++;
        
        if (rc5_half_bit_cnt >= RC5_HALF_BIT_TIME)
        {
            rc5_half_bit_cnt = 0x00;
            rc5_state |= 0x01;            
        }
    }
    
    /* called every 0,0278 ms */
    ISR(TIMER1_COMPA_vect)
    {
        if ((rc5_state & 0x40) == 0x40)
        {
            RC5_SEND_ON;
        }
        else
        {
            RC5_SEND_OFF;
        }
    }
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    Zitat Zitat von Janiiix3 Beitrag anzeigen
    Ist mir klar das es nicht direkt eine 36kHz ISR gibt. Die Frequenz erzeuge ich mit Timer1(16 Bit) ...
    Rechne bitte mal nach: die 889 µs sind so lange, dass die 36 kHz zweiunddreissig mal reinpassen (32,0040). Wenn man jetzt DOCH ne 72 kHz ISR initialisiert und darin nen Counter und ein Flag "RC5led_on" mitführt, dann kann man a) durch Toggeln der LED mit 36 kHz blinken ODER auch nicht blinken (RC5led_on = 0;_==> if ( RC5LED_on ) ToggleBit (PORTx, PINnr);_). Nur mal so - als Denkanstoss. Mit nem andern Counter könnte man dann die vierzehn Bit des Datentelegramms schalten . . . (soweit es mir auf die Schnelle einfällt).

    Nachtrag: das Codetiming MUSST Du NICHT auf die Mikrosekunde genau einhalten. Das ist schon ein bisschen flexibel
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. PWM Modulation
    Von frank65 im Forum PIC Controller
    Antworten: 4
    Letzter Beitrag: 15.06.2010, 00:10
  2. [GELÖST] Was ist das für eine Modulation?
    Von Maverick89 im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 25.02.2010, 22:43
  3. Modulation / Demudaltion...
    Von Manu_91 im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 14.12.2008, 16:18
  4. IR Modulation
    Von scales im Forum Sensoren / Sensorik
    Antworten: 5
    Letzter Beitrag: 27.11.2006, 17:56
  5. Allgemeines Verständniss der Grundschaltungen
    Von Crash32 im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 16.12.2005, 19:04

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test