- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Asuro - InfrarotDiode zum RC5 Code senden bringen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2005
    Beiträge
    9

    Asuro - InfrarotDiode zum RC5 Code senden bringen

    Anzeige

    E-Bike
    Hallo,
    ich versuche gerade verzweifelt meinem Asuro das senden im RC5 code beizubringen.
    Ich benutze die erweiterte asuro lib.
    wenn ich die lib richtig verstanden haben müsste ich nur ocr2 auf 0xC7 setzen um ein Fast PWM signal zu erhalten, welches die ir diode für 6,9 µs anschaltet und für 20µs ausschaltet. Also mir ein 36 khz Signal im rc 5 norm erzeugt. anschließend muss ich nur noch um eine 1 zu senden die diode 899µs ausschalten und dann für 899µs ein. und bei einer 0 genau umgedreht. soweit hab ich es in meinem code verwirklicht.. nur das problem, es funktioniert nicht und ich finde den fehler nicht.
    Code:
    #include "asuro.h"
    #include <stdlib.h>
    #define lup 0x31df
    #define ldown 0x31dd
    #define chup 0x38f10
    #define chdown 0x3811
    void sendrc5(unsigned long int cmd){
    	DDRD |= (1<<DDD1);
    	OCR2= 0xC7;
    	int length=0;
    	while(length<=14){
    		PORTD |=(1<<PD1);
    		if(cmd & 0x2000){
    			TCNT0=0;
    			TCCR0=(1<<CS01) | (1<<CS00); //timer start
    			while(TCNT0<111);
    			while(TCNT0<222) PORTD &=~(1<<PD1);
    		}else{
    			TCNT0=0;
    			TCCR0=(1<<CS01) | (1<<CS00); //timer start
    			while(TCNT0<111) PORTD &=~(1<<PD1);
    			while(TCNT0<222);
    		}
    
    		length++;
    		cmd <<=1;
    	}
    	PORTD |=(1<<PD1);
    }
    
    int main(void)
    {
    	int taste1=0,taste2=0;
    	Init();
    	StatusLED(GREEN);
    	while(1){
    		taste1=PollSwitch();
    		taste2=PollSwitch();
    		if((taste1 > 0) && (taste2 > 0) && (taste1==taste2)){
    			if (taste1==1){
    				StatusLED(RED);
    				sendrc5(ldown);
    			}
    			if (taste1==2){
    				StatusLED(GREEN);
    				DDRD |= (1<<DDD1);
    				sendrc5(lup);
    
    			}
    			if (taste1==4){
    				StatusLED(YELLOW);
    				sendrc5(chup);
    			}
    			if (taste1==8){
    				StatusLED(RED);
    				sendrc5(chdown);
    			}
    		}
    	}
        return 0;
    }
    Vieleicht sieht ja wer anderst den fehler..

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo pentagonchicken,

    lustiger Name.
    Willkommen im Forum.
    Ob in deinem Programm ein Fehler steckt kann ich dir leider nicht sagen,
    kenne mich da zu wenig mit aus.
    In folgendem Thread wurde aber schon mal erfolgreich RC5 Code mit einem AVR gesendet. Allerdings nicht mit dem Asuro.

    https://www.roboternetz.de/phpBB2/ze...rag.php?t=7732

    Hast du die Möglichkeit mit einem Oszilloskop nachzumessen?
    Die Sendeleistung der IR Diode ist nicht alzu hoch, funktioniert nur auf kurze Entfernung.

    Gruß Peter

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2005
    Beiträge
    9
    ein oszi hab ich leider nicht zu verfügung.
    hab auch schon probiert den asuro direkt an den fernseher zu halten und dann zu senden... hat aber nichts geändert.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo pentagonchicken,

    im Ansatz ist dein Programm ok, sind nur einige kleine Fehler drin.
    1. Ein Bit wird zuviel gesendet.
    2. Phasenwechsel Low-High wird nicht ausgeführt
    3. Pause zwischen den Paketen fehlt

    Das korrigierte Programm ist im Code-Fenster. Bei mir funktioniert es. Musst nur die Tastencodes für lup und ldown wieder an deinen Empfänger anpassen, dann sollte es auch bei Dir funktionieren.
    Code:
    #include "asuro.h"
    #include <stdlib.h>
    #define lup 0x3010
    #define ldown 0x3011
    #define chup 0x38f10
    #define chdown 0x3811
    
    void sendrc5(unsigned long int cmd){
       DDRD |= (1<<DDD1);
       OCR2= 0xC7;
       int length=0;
       while(length<=13){
          //PORTD |=(1<<PD1);
          if(cmd & 0x2000){
             TCNT0=0;
             TCCR0=(1<<CS01) | (1<<CS00); //timer start
             while(TCNT0<111) PORTD |=(1<<PD1);
             while(TCNT0<222) PORTD &=~(1<<PD1);
          }else{
             TCNT0=0;
             TCCR0=(1<<CS01) | (1<<CS00); //timer start
             while(TCNT0<111) PORTD &=~(1<<PD1);
             while(TCNT0<222) PORTD |=(1<<PD1);
          }
    
          length++;
          cmd <<=1;
       }
       PORTD |=(1<<PD1);
       Msleep(40);
    }
    
    int main(void)
    {
       int taste1=0,taste2=0;
       Init();
       StatusLED(GREEN);
       while(1){
          taste1=PollSwitch();
          taste2=PollSwitch();
          if((taste1 > 0) && (taste2 > 0) && (taste1==taste2)){
             if (taste1==1){
                StatusLED(RED);
                sendrc5(ldown);
             }
             if (taste1==2){
                StatusLED(GREEN);
                DDRD |= (1<<DDD1);
                sendrc5(lup);
    
             }
             if (taste1==4){
                StatusLED(YELLOW);
                sendrc5(chup);
             }
             if (taste1==8){
                StatusLED(RED);
                sendrc5(chdown);
             }
          }
       }
        return 0;
    }
    Übrigens OCR2 braucht nicht eingestellt zu werden, schadet aber auch nicht.

    Gruß Waste

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2005
    Beiträge
    9
    ah vielen dank jetzt funktionierts auch bei mir....
    Gruß Pentagonchicken

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Gern geschehen!

    Sag mal, will dein Asuro selbstständig fernsehen?

    Waste

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2005
    Beiträge
    9
    was ich genau damit machen will weiß ich noch net
    hab nur gedacht eigentlich müsstes es doch möglich sein damit den fernseher zu steuern... naja und dann gibt man solange keine ruhe bis es geht

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Eine clevere Anwendung wäre z.B. das Fernsehverhalten der Kinder zu überwachen. Der Asuro überwacht mittels IR-Empfänger welcher Kanal eingestellt wird. Bei falschem Kanal wird der Sender gewechselt oder ausgeschaltet. Das wär doch was sinnvolles!

    Gruß Waste

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.12.2004
    Beiträge
    486
    Das ist wirklich eine gute Idee! "Mamaa, der Fernseher ist kaputt, da stellt sich dauernd ein anderer Kanal ein ..."
    Alle sagten: "Das geht nicht!" Dann kam einer, der wusste das nicht und hat´s gemacht

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2005
    Beiträge
    9
    hehe oder man verwendet ihr als fernbedienungsersatz so dass man nur noch eine fernbedienung braucht um z.b dvd player und ferseher zu steuern..

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen