- Akku Tests und Balkonkraftwerk Speicher         
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
    73
    Beiträge
    11.077
    Anzeige

    E-Bike
    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 14: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
    8.687
    ... 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 13: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
    8.687
    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.

    ......Bild hier  
    ......© 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 14: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, 22:39
  2. avrispmkii clone
    Von 1udo1 im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 07.03.2009, 21:36
  3. MiniAsuro-Clone
    Von robo.fr im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 13
    Letzter Beitrag: 02.01.2008, 20:55
  4. ICD2 Clone
    Von Stephan78 im Forum PIC Controller
    Antworten: 12
    Letzter Beitrag: 16.01.2007, 10:27
  5. AT90CAN128 und JTAGICE clone
    Von A.Wallner im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 16.06.2006, 17:35

Stichworte

Berechtigungen

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

Labornetzteil AliExpress