Import-Script
15.06.2002, 17:27
teils von der Homepage von Bascom und teils von mir ... <BR> <BR>IR Diode von Pind.5 mit einem Wid zu +5V <BR> <BR>wenn das nicht geht gibt's die *.bas file unter <A HREF="mailto:spatz222@altavista.de">spatz222@altavista.de</A> <BR> <BR> <BR>$regfile = "8515def.dat" <BR> <BR>$crystal = 8000000 <BR> <BR>Dim Rc5_address As Byte <BR>Dim Rc5_command As Byte <BR>Dim Rc5_bit_nr As Byte <BR>Dim Toggle_bit As Boolean <BR>Dim Count As Byte <BR> <BR> <BR>' 36kHz carrier reload value <BR>'Const T_oc1 = 55 'value for 4MHz crystal <BR>Const T_oc1 = 110 'value for 8MHz crystal <BR>'Const T_oc1 = 138 'value for 10MHz crystal <BR> <BR>Const Ton = 64 'IR 36kHz carrier on <BR>Const Toff = 192 'IR 36kHz carrier off <BR> <BR> <BR>Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1 <BR>Timer1 = 0 <BR>Compare1a = T_oc1 OC1 = IR carrier output 36 kHz <BR> <BR>Declare Sub Logic_0 <BR>Declare Sub Logic_1 <BR> <BR>Tccr1a = Toff <BR> <BR> <BR>'---[ set RC-5 System Address ]------------------------------------------------- <BR> <BR>Rc5_address = 0 <BR>Rc5_command = 4 <BR>Toggle_bit = 0 <BR> <BR> <BR>'---[ main program loop ]------------------------------------------------------- <BR> <BR> <BR>Do <BR>Ddrd.5 = 0 <BR>wait 2 <BR> <BR>'---[ transmit Address and Command as 14 bit RC-5 code ]------------------------ <BR> <BR> Ddrd.5 = 1 <BR> <BR> <BR>'**** 2 Startbit's **** <BR> Logic_1 <BR> Logic_1 <BR> <BR>'**** Togglebit **** <BR> If Toggle_bit = 0 Then Logic_0 Else Logic_1 <BR> <BR> <BR>'**** RC5 Adresse **** <BR> For Rc5_bit_nr = 4 To 0 Step -1 <BR> If Rc5_address.rc5_bit_nr = 0 Then Logic_0 Else Logic_1 <BR> Next <BR> <BR> <BR>'**** RC5 Code **** <BR> For Rc5_bit_nr = 5 To 0 Step -1 <BR> If Rc5_command.rc5_bit_nr = 0 Then Logic_0 Else Logic_1 <BR> Next <BR> <BR> Tccr1a = Toff <BR> <BR> <BR>Loop <BR> <BR> <BR>End <BR> <BR> <BR>'------------------------------------------------------------------------------- <BR> <BR> <BR>Sub Logic_0 <BR> <BR> Tccr1a = Ton <BR> <BR> Waitus 883 <BR> <BR> Tccr1a = Toff <BR> <BR> Waitus 884 <BR> <BR>End Sub <BR> <BR> <BR>Sub Logic_1 <BR> <BR> Tccr1a = Toff <BR> <BR> Waitus 883 <BR> <BR> Tccr1a = Ton <BR> <BR> Waitus 884 <BR> <BR>End Sub
Import-Script
16.06.2002, 20:15
Die RC5-Beschreibung auf der Seite von Sprut läßt nichts zu wünschen übrig. Damit läßt sich sehr einfach die 8051 Software implementieren. Den PIC-Kode habe ich mir noch nicht angesehen. <BR> <BR> <BR>Die Zeitbedingungen lassen sich bequem ermitteln: <BR> <BR>Der Grundtakt beträgt T = 1 / 144kHz. <BR>Ein Puls hat ein Tastverhältnis von 25% (1T: LED ein + 3T: LED aus). Daraus wird dann ein Pulspaket von 32 Pulsen = 128T gebaut. <BR>Ein 1-Bit wird gesendet, indem erst ein Pulspaket und dann eine gleichlange Pause von 128T folgt. Beim 0-Bit ists genau umgekehrt. <BR>Im Kode habe ich das so realisiert, indem vor und nach der Pulssenderoutine eine Warteschleife steht und je nach Wert des Bits wird die vordere oder <BR>die hintere übersprungen (mit JNB bzw. JB). <BR> <BR> <BR>Bei meinem Beispiel wird ein kompletter 14-Bit Kode in 2 Registern übergeben und die Bits einzeln gesendet. Es wird immer Bit14 gesendet und danach der Wert nach links geschoben. Das Ganze 14 mal und fertig. <BR> <BR> <BR>Ich denke mal, daß der 8051 auch hier wieder Weltmeister im Speicherverbrauch ist. D.h. er braucht nur 50 Byte Kode, was weder der AVR noch der PIC toppen kann. Man kann noch mindestens 8 Byte sparen, aber der besseren Lesbarkeit wegen hab ichs so gelassen. <BR> <BR>Ich verwende den üblichen Standard-Quarz (11.0592MHz), d.h. zu langsam ist der 8051 also auch nicht dafür. <BR> <BR> <BR>Am Anfang steht ein universelles Macro, um die benötigten Wartezeiten zu generieren. Ich weiß nicht, ob der Batronix dieses Macro unterstützt, aber mit dem Keil oder dem bekannten (und kostenlosen) Metalink gehts auf alle Fälle. <BR> <BR> <BR>Peter <BR> <BR> <BR>; RC5 Transmitter <BR> <BR>; use Metalink or Keil to assemble <BR> <BR>$mod51 <BR> <BR>mdelay macro cycle ;0 ... 65535 <BR> if( cycle 3 ) <BR> nop <BR> endif <BR> if( cycle > 2 ) <BR> nop <BR> endif <BR> if( cycle > 1 ) <BR> nop <BR> endif <BR> if( cycle > 0 ) <BR> nop <BR> endif <BR> elseif( cycle < 515 ) <BR> mov r7, #low((cycle-1)/2) <BR> djnz r7, $ <BR> if((cycle and 1) = 0) <BR> nop <BR> endif <BR> else <BR> mov r7, #high(cycle/2+253) <BR> mov r6, #low(cycle/2-2) <BR> djnz r6, $ <BR> djnz r7, $ - 2 <BR> if(cycle and 1) <BR> nop <BR> endif <BR> endif <BR> endm <BR> <BR> <BR>XTAL equ 11059 ;kHz <BR> <BR>RC5CLOCK equ 144 ;kHz <BR> <BR>RC5_T1 equ ((XTAL + RC5CLOCK / 2) / RC5CLOCK + 6) / 12 <BR>RC5_T3 equ ((XTAL + RC5CLOCK / 2) / RC5CLOCK * 3 + 6) / 12 <BR>RC5_T128 equ ((XTAL + RC5CLOCK / 2) / RC5CLOCK * 128 + 6) / 12 <BR> <BR> <BR>xRC5LED equ P1.0 ;low active <BR> <BR> <BR>TUNER equ 17 * 64 <BR>VOLUME_PLUS equ 16 <BR>STARTBITS equ 11000000000000b <BR> <BR>main: <BR> mov a, #low( STARTBITS + TUNER + VOLUME_PLUS ) <BR> mov b, #high( STARTBITS + TUNER + VOLUME_PLUS ) <BR> <BR> call rc5send ;send code <BR> <BR> mov r3, #128 ;wait 114æs <BR>wait: mdelay RC5_T128 <BR> djnz r3, wait <BR> jmp main <BR> <BR> <BR>;input: B, A = RC5 code (14 bit) <BR> <BR>rc5send: <BR> mov r3, #14 <BR>_rc5s1: <BR> jb b.5, _rc5s2 ;bit 14 <BR> mdelay RC5_T128 - 11 ;pause before pulse if bit = 0 <BR>_rc5s2: <BR> mov r4, #32 ;pulse 32 times <BR>_rc5s3: <BR> clr xRC5LED ;LED on <BR> mdelay RC5_T1 - 1 <BR> setb xRC5LED ;LED off <BR> mdelay RC5_T3 - 3 <BR> djnz r4, _rc5s3 ;next pulse <BR> jnb b.5, _rc5s4 <BR> mdelay RC5_T128 - 11 ;pause after pulse if bit = 1 <BR>_rc5s4: <BR> rlc a ;shift low byte <BR> xch a, b <BR> rlc a ;shift high byte <BR> xch a, b <BR> djnz r3, _rc5s1 ;next bit <BR> ret <BR>end
Import-Script
18.06.2002, 08:37
Eine kleine Korrektur: <BR> <BR>Die Sprut-Beschreibung ist falsch, das 0-Bit und das 1-Bit sind genau andersrum definiert. D.h. in meinem Kode muß JNB durch JB ersetzt werden und umgekehrt. <BR> <BR>Das Delay-Makro ist leider völlig verstümmelt worden, da das Forum allergisch ist gegen "größer" und "kleiner" Zeichen. <BR> <BR>Daher werde ich alles nochmal auf meine Webseite stellen. <BR>Dazu noch die passende Empfangsroutine. <BR> <BR> <BR>Peter
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.