-         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: IR-Fernsteuerung für NIKON-Spiegelreflex (ML-L3-Clone)

  1. #11
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    67
    Beiträge
    11.074
    Anzeige

    Du könntest die Spannungsabfälle auf den Dioden beim klassischen Verdoppler ersparen, wenn du den ICL7660 als Spannungsinverter (+V und -V) nehmen würdest, da darf aber "+" bzw. "-" des Akkus mit nirgendwas ausser ICL7660 verbunden werden.

    Vieeel Spass und Erfolg beim experimentieren !
    Geändert von PICture (07.11.2011 um 13:34 Uhr)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  2. #12
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Hallo oberallgeier!

    Sehr interessantes Projekt. Könntest du den C code oder die HEX zu Verfügung stellen?

    Vielen Dank!
    MfG Torrentula

  3. #13
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.937
    ... Könntest du den C code oder die HEX zu Verfügung stellen? ...
    Klar - ccp (sprich: guttenbergen, ein deutsch-akademisches Hauptwort) ist ja kein Problem.

    Code:
    /* >> 
      Sicherung 05Nov2011 1220   ..\C1 mC Projekte\mist\ML-3_1p3
     // ============================================================================== =
      Target MCU        : ATtiny13
      Target Hardware   : FLEX2313, umgesteckt auf Pinout tiny13
      Target cpu-frequ. : 9,6 MHz, interner Oszillator
    // ============================================================================== =
      Enthaltene Routinen :
            #includes siehe unten   //
      void TC0ML3_init(void)        // Init Timer/Counter0 für 37,5 kHz-Modulation
      void wt25us(uint16_t us)      // Pausenzeit etwa 25 Mikrosekunden
      int main(void)
    // ============================================================================== =
      *** Versionsgeschichte:
     ====================
     1p3 05Nov2011 1210 Betriebs-/Funktions-rtLED auf PB1 ansteuern
     1p2 01Nov2011 1940 Zum Stromsparen werden alle Pins als Ausgang definiert,
            jede viertel Sekunde wird - endlos - in eine Doppelsequenz gesendet
     1p1 01Nov2011 1530 Redaktionelle Nacharbeiten
     1p0 01Nov2011 1520 Nach Korrektur der Zeiten (Pause zum 4. Burst) gehts problemlos
     x00 31Okt11 1020 Neu
    // ============================================================================== =
      *** Aufgabenstellung : Fernsteuerung für Nikon D80
      Original: ..\C2\Cpcr13\Cpcr13_x33.c    x11 11apr09 2230
    // ============================================================================== =
    Alle möglichen Portanschlüsse am ATtiny 13 :
                   ==============          ===
            dW, /RESET, (PB5)   1    8   Vcc                   
     PCINT3, CLKI, ADC3,(PB3)   2    7   (PB2), SCK, T0, ADC1, PCINT2
           PCINT4, ADC2,(PB4)___3    6___(PB1), MISO, INT0, AIN1, PCINT1, OC0B
                          GND   4    5   (PB0), MOSI, AIN0, PCINT0, OC0A
    --------------------==========-----------------------
    Vorgesehene/belegte Anschlüsse am ATtiny 13 :
                ==================                                  
                /RESET, (PB5)   1    8   Vcc                         
                        (PB3)   2    7   (PB2)
        Taster, PCINT4, (PB4)___3    6___(PB1), ab 1p3 rtLED = Betriebsanzeige
           LED-Kathode,   GND   4    5   (PB0), IR-LED-Anode + 0k22
                                    */
    // ============================================================================== =
    // ============================================================================== =
                                    //
     #include <avr/io.h>            //
     #include <stdlib.h>            //
     #include <avr/interrupt.h>     // Wegen des Timers
                                    //
    // #define MCU =                // siehe Current Configuration Options
    // #define F_CPU  9600000       // siehe Current Configuration Options
                                    //
    // ============================================================================== =
    // ============================================================================== =
    // =====  Subroutinen  ========================================================== =
    // ============================================================================== =
    
    // ============================================================================== =
    // ==   Ansteuerung/Modulation einer IRLED, 40 kHz für NIKON-Fernsteuerung ML-L3
    //        Die LED wird moduliert durch PB0=OC0A
     void TC0ML3_init(void)         // Init Timer/Counter0 für 37,5 kHz-Modulation
     {                              //
      TCCR0A |= (1<<COM0A1);        // Clear/set OC0A on Compare Match, OC0A ist PB0
                                    //   normale PWM aktivieren (nicht invertiert)
                                    //   Bezug doc 2535J-AVR-08/10           doc S 63
      TCCR0A |=  (1<<WGM02)|(1<<WGM01)|(1<<WGM00);    
                                    // fast PWM, TOP=OCR0A                   doc S 72
      TCCR0B |=  (1<<CS00);         // no Prescaler, clk => 9,6 MHz          doc S 73
      OCR0A   = 64;                 // => Einschaltdauer ca. 25%
     }            
    // ============================================================================== =
    
    // ============================================================================== =
    // ============================================================================== =
    /*### Programm pausieren lassen  !! Der Pausenwert ist nur experimentell !*/ 
                                    //
     void wt25us(uint16_t us)       // Pausenzeit etwa 25 Mikrosekunden
     {                              //   diese Zeit ist NUR experimentell bestimmt
       for(; us>0; us--)            //   für tiny13 @ 9,6 MHz
       { 
          uint16_t __c = 54; 
          __asm__ volatile ( 
             "1: sbiw %0,1" "\n\t" 
             "brne 1b" 
             : "=w" (__c) 
             : "0" (__c) 
          ); 
       } 
     } 
    // ============================================================================== =
    
    // ============================================================================== =
    // =====  ENDE    Subroutinen  ================================================== =
    // ============================================================================== =
    
    // ============================================================================== =
    // ===  HAUPTProgramm und Initialisierungen
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                    //
      int main(void)                //
    {                               //
      uint8_t      i;               // Zählvariable für Endlosschleife
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    //          /RESET, (PB5)   1 A  - 8   Vcc        //
    //                  (PB3)   2 A  A 7   (PB2)      //
    //                  (PB4)___3 A  A 6___(PB1)      // 
    //       LED-Kathode  GND   4 -  A 5   (PB0)      // LED-Anode + Widerstand 1k
    // Pins als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
    //   A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
      DDRB  = 0b00111111;           // siehe aktuell oben 
      PORTB = 0b11000000;           //    und Port/Pull Ups (1)  aktivieren
                    // ###>>> DDRB-0 auf 0 setzen, schaltet die LED AUS !!!!!
                                    //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                    //
      i     = 0;                    //
      TC0ML3_init();                // Initialisiere LED-Interrupt
      TCCR0B &= ~(1<<CS00);         // no Prescaler, clk => 9,6 MHz          doc S 73
                                    // .. damit wird der Timerinterrupt verhindert
      sei();                        // Erlaube Interrupts
                                    //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                    //
    // ============================================================================== =
    //      Lauffähiges Codebeispiel, getestet 01. Nov. 2011 mit ND80
    // ============================================================================== =
    // ============================================================================== =
    //      Vorgeschriebenes Timing in ms und in ticks zu 25-µs
    // on:          2,000           0,390           0,410           0,400
    // =in µs-ticks   80              16              16              16
    // off: ---             27,830          1,580           3,580           ----
    // =in µs-ticks          1113             63             143
    // Pause bis zur zweiten Sequenz: 63 ms entspr. 2520 µs-ticks
    // vgl: http://www.sbprojects.com/projects/nikon/index.php
    //      http://www.bigmike.it/ircontrol/index.html bzw.
    //      http://www.bigmike.it/ircontrol/images/ML-L3.r2.png
    // ============================================================================== =
                                    //
     while (1)                      //
     {                              //
      i++;                          // Schleifezähler eins rauf
    //      Die Kommandosequenz
    //      1. Burst
      PORTB  |=  (1<<PB1);          // rtLED einschalten
      DDRB   |=  (1<<PB0);          // IR-LED schalten
      TCCR0B |=  (1<<CS00);         // no Prescaler, clk => 9,6 MHz          doc S 73
      wt25us (   80);               // 
      TCCR0B &= ~(1<<CS00);         // no clock, timer stopped               doc S 73
      DDRB   &= ~(1<<PB0);          // IR-LED schalten
      wt25us ( 1113);               //
    //      2, Burst
      DDRB   |=  (1<<PB0);          // IR-LED schalten
      TCCR0B |=  (1<<CS00);         // no Prescaler, clk => 9,6 MHz          doc S 73
      wt25us (   16);               // 
      TCCR0B &= ~(1<<CS00);         // no clock, timer stopped               doc S 73
      DDRB   &= ~(1<<PB0);          // IR-LED schalten
      wt25us (   63);               //
    //      3. Burst
      DDRB   |=  (1<<PB0);          // IR-LED schalten
      TCCR0B |=  (1<<CS00);         // no Prescaler, clk => 9,6 MHz          doc S 73
      wt25us (   16);               // 
                                    //
      TCCR0B &= ~(1<<CS00);         // no clock, timer stopped               doc S 73
      DDRB   &= ~(1<<PB0);          // IR-LED schalten
      wt25us (  143);               //
    //      4. Burst
      DDRB   |=  (1<<PB0);          // IR-LED schalten
      TCCR0B |=  (1<<CS00);         // no Prescaler, clk => 9,6 MHz          doc S 73
      wt25us (   16);               // 
      TCCR0B &= ~(1<<CS00);         // no clock, timer stopped               doc S 73
      DDRB   &= ~(1<<PB0);          // IR-LED schalten
                                    //
      PORTB  &= ~(1<<PB1);          // rtLED ausschalten
                                    //
    // Pause bis zur nächsten Sequenz: 63 ms entspr. 2520 µs-ticks
      wt25us ( 2520);               // 
      if (i == 2)                   //
      {                             //
        i   = 0;                    //
        wt25us (10000);             // Warte eine viertel Sekunde, danach neue 
      }                             //   Doppelschleife
     }                              // Ende von while (1)
                                    //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      return 0;                       
    }                                 
    // =====  Ende 
    // ============================================================================== =
                  
    /*  Es folgt der aktuelle Übersetzungskommentar:
            
    rm -rf D01_20.o  D01_20.elf dep/* D01_20.hex D01_20.eep D01_20.lss D01_20.map
    Build succeeded with 0 Warnings...
    avr-gcc  -mmcu=attiny13 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -O0 
            -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums 
            -MD -MP -MT D01_20.o -MF dep/D01_20.o.d  -c  ../D01_20.c
    avr-gcc -mmcu=attiny13 -Wl,-Map=D01_20.map D01_20.o     -o D01_20.elf
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  D01_20.elf D01_20.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
            --change-section-lma .eeprom=0 --no-change-warnings -O 
            ihex D01_20.elf D01_20.eep || exit 0
    avr-objdump -h -S D01_20.elf > D01_20.lss
    AVR Memory Usage
    ----------------
    Device: attiny13
    Program:     542 bytes (52.9% Full)
    (.text + .data + .bootloader)
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    Build succeeded with 0 Warnings...
        Ende des Kommentars                       ...
     ============================================================ */

    Code:
    :1000000009C00EC00DC00CC00BC00AC009C008C09A
    :1000100007C006C011241FBECFE9CDBF45D0FDC02B
    :10002000EFCFDF93CF93CDB7DEB7AFE4B0E0EFE42F
    :10003000F0E0808180688C93AFE4B0E0EFE4F0E022
    :1000400080818B608C93A3E5B0E0E3E5F0E08081F4
    :1000500081608C93E6E5F0E080E48083CF91DF91CE
    :100060000895DF93CF9300D000D0CDB7DEB79C8347
    :100070008B830FC086E390E09A83898389819A817C
    :100080000197F1F79A8389838B819C8101979C83E7
    :100090008B838B819C81009769F70F900F900F9055
    :1000A0000F90CF91DF910895DF93CF930F92CDB74B
    :1000B000DEB7E7E3F0E08FE38083E8E3F0E080EC95
    :1000C00080831982AEDFA3E5B0E0E3E5F0E0808154
    :1000D0008E7F8C93789489818F5F8983A8E3B0E0C9
    :1000E000E8E3F0E0808182608C93A7E3B0E0E7E38F
    :1000F000F0E0808181608C93A3E5B0E0E3E5F0E07F
    :10010000808181608C9380E590E0ABDFA3E5B0E077
    :10011000E3E5F0E080818E7F8C93A7E3B0E0E7E336
    :10012000F0E080818E7F8C9389E594E09ADFA7E3ED
    :10013000B0E0E7E3F0E0808181608C93A3E5B0E07C
    :10014000E3E5F0E0808181608C9380E190E089DFDD
    :10015000A3E5B0E0E3E5F0E080818E7F8C93A7E338
    :10016000B0E0E7E3F0E080818E7F8C938FE390E056
    :1001700078DFA7E3B0E0E7E3F0E0808181608C9373
    :10018000A3E5B0E0E3E5F0E0808181608C9380E15D
    :1001900090E067DFA3E5B0E0E3E5F0E080818E7FEB
    :1001A0008C93A7E3B0E0E7E3F0E080818E7F8C934F
    :1001B0008FE890E056DFA7E3B0E0E7E3F0E080816E
    :1001C00081608C93A3E5B0E0E3E5F0E0808181609D
    :1001D0008C9380E190E045DFA3E5B0E0E3E5F0E05B
    :1001E00080818E7F8C93A7E3B0E0E7E3F0E080812D
    :1001F0008E7F8C93A8E3B0E0E8E3F0E080818D7F10
    :100200008C9388ED99E02DDF8981823009F063CFEE
    :0E021000198280E197E225DF5ECFF894FFCFE0
    :00000001FF
    Geändert von oberallgeier (17.06.2012 um 12:42 Uhr)
    Ciao sagt der JoeamBerg

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.937
    Da lag bei mir noch ne alte Rollei rum - mit ner IR-Fernsteuerung. Schick, klein, mit einem Klick-Halter für den Kameragurt. Natürlich stimmt das Sendeprotokoll von Rollei nicht, aber es gibt ja den tiny13A in Bauform SU. Die zwei CR2120 ( >6 V ) im Rolleigehäuse sind etwas zu starker Tobak für den tiny, da bremst jetzt ein AMS1117 (klick) die Power. Mit adaptiertem/optimiertem Code schafft das modifizierte Spielzeug bei Sonnenlicht max. 12 m Abstand für sicheres Auslösen. Das Signal repetiert, sodass bei Dauersignal knapp über 3 Bilder pro Sekunde (bei MEINER Nikon) ausgelöst werden. Eine einzige Auslösung ist aber ohne Mühe auch zu schaffen.

    ......
    ......© 2019 oberallgeier

    Hier noch Schaltplan von eagle, dazu Board (mit Streifenraster!! und "Fädeldraht") - Code (in C) auf Wunsch.

    PS: Der Aufdruck "RC 5" auf dem Fernbedienungsgehäuse stammt von Rollei, der ist missverständlich. Das originale Sendeprotokoll der Fernbedienung ist wohl was rollei-firmenspezielles . . . und eindeutig nicht verwandt mit Philips RC-5
    Geändert von oberallgeier (19.05.2019 um 13:06 Uhr) Grund: Aufdruck RC-5 ist missverständlich
    Ciao sagt der JoeamBerg

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Noch ein Clone...
    Von kritias im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 3
    Letzter Beitrag: 24.04.2011, 21:39
  2. avrispmkii clone
    Von 1udo1 im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 07.03.2009, 20:36
  3. MiniAsuro-Clone
    Von robo.fr im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 13
    Letzter Beitrag: 02.01.2008, 19:55
  4. ICD2 Clone
    Von Stephan78 im Forum PIC Controller
    Antworten: 12
    Letzter Beitrag: 16.01.2007, 09:27
  5. AT90CAN128 und JTAGICE clone
    Von A.Wallner im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 16.06.2006, 16:35

Stichworte

Berechtigungen

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