Weiter mit der RC5 Fernbedienung, Video
von
am 25.03.2011 um 22:36 (4391 Hits)
Ich habe doch noch ein bißchen mit der Fernbedienung gespielt. Hier der gegenwärtige Stand plus Video, damit es nicht so trocken wird.
Schaltung
BASCOM CodeCode:HW_RC5_PWM: Ferngesteuerter IR Empfänger (RC5) 4,8V NiMh VCC + Block- und Pufferkondensatoren n. gez. | .-----o-----------------------o----o----o--------. | | ATtiny45 | | | | TSOP .-. | 10k ___ 1 __ 8 | | | | 36kHz | | '----|___|--o| |o------' | | | | |----------------o| |o- | | | '-' .------o| |o------. | |Motor1 |Motor2 '-----o----)------o|__|o- | | / \ / \ | | 4 5 | | ( ) ( ) | | .----------------' | \ / \ / | | | 1 __ 18 | | | | '-)----o| |o-----------)----' | | '----o| |o-----------)-------------' | -o| |o- | | -o| |o- | | -o| |o- | | -o| |o- | | -o| |o- | | -o| |o- | o-----------o|__|o-----------' | 9 10 | ULN2803A | | === GND
Code:'################################################# ############################## 'File: RC5_PWM.bas 'Fernbedienung eines Dreirades mit RC5 Fernbedienung 'IDE: BASCOM-AVR Demoversion 1.11.9.8 ' 'HW circuit: hw_rc5_pwm.aac 'PWM Erzeugung mit Timer1 'TSOP an PB3. BASCOM Kommando Getrc5 nutzt Timer0 !!! '################################################# ############################## $regfile = "attiny45.dat" $eepleave $framesize = 32 'default? $swstack = 32 'default? $hwstack = 32 'default? $crystal = 1000000 $lib "mcsbyteint.lbx" 'only byte and word operations Dim Address As Byte , Command As Byte 'variables for getrc5 Dim Helperbyte1 As Byte Dim Dummy As Byte Dim Helperword As Word At Helperbyte1 Overlay Dim Top As Byte Dim Limit_slower As Byte Dim Limit_faster As Byte Dim Limit_low_curve As Byte Dim Limit_high_curve As Byte Dim Quarter_power As Byte Dim Half_power As Byte Config Portb = Input 'ports initialisieren Portb = &HFF 'ports mit pullups auf definierten Pegel Config Rc5 = Pinb.3 'TSOP at PB3 Enable Interrupts 'nötig für RC5 Empfang Config Portb.4 = Output 'PB4 as output, OC1B Config Portb.1 = Output 'PB1 as output, OC1A Top = 249 'OCR1C wert für PWM Frequenz Half_power = Top Shift Half_power , Right , 1 Quarter_power = Half_power Shift Quarter_power , Right , 1 Limit_slower = 7 Limit_faster = Top - 8 Limit_low_curve = 3 Limit_high_curve = Top - 4 Tccr1 = Tccr1 Or &B01100000 'set PWM1A & OC1A (PB1) Gtccr = Gtccr Or &B01100000 'set PWM1B & OC1B (PB4) clear TCNT1 on OCR1C match Ocr1a = 0 'initialise OCR1A -> low, no pulses at OC1A Ocr1b = 0 'initialise OCR1B -> low, no pulses at OC1B Ocr1c = Top 'set pwm frq. 1Mhz / 4 / (Top + 1) Tccr1 = Tccr1 Or &B00000011 'set prescaler (4) switches timer on Do Getrc5(address , Command) 'procedure returns FF FF if no RC5 message If Address <> &HFF Then 'RC5 Nachricht empfangen then... Command = Command And &B01111111 'toggle bit auf Null Select Case Command Case &H17 : Helperword = Ocr1a + Ocr1b 'OK Taste - geradeaus Shift Helperword , Right , 1 'durch zwei teilen Ocr1a = Helperbyte1 Ocr1b = Helperbyte1 Case &H0F : If Ocr1a > Limit_slower And Ocr1b > Limit_slower Then Ocr1a = Ocr1a - 8 'langsamer bei Pfeil nach unten Ocr1b = Ocr1b - 8 Else Ocr1a = 0 'bei Reg.überläufen Notstop Ocr1b = 0 End If Case &H0E : If Ocr1a < Limit_faster And Ocr1b < Limit_faster Then Ocr1a = Ocr1a + 8 'schneller bei Pfeil nach oben Ocr1b = Ocr1b + 8 Else Ocr1a = Top 'schneller geht's nicht Ocr1b = Top End If Case &H13 : If Ocr1a > Limit_low_curve And Ocr1b < Limit_high_curve Then Ocr1a = Ocr1a - 4 'rechts bei Pfeil nach rechts Ocr1b = Ocr1b + 4 Else Ocr1a = 0 Ocr1b = 0 End If Case &H0B : If Ocr1a < Limit_high_curve And Ocr1b > Limit_low_curve Then Ocr1a = Ocr1a + 4 'links bei Pfeil nach links Ocr1b = Ocr1b - 4 Else Ocr1a = 0 'bei Reg.überläufen Notstop Ocr1b = 0 End If Case &H1D : Ocr1a = 0 'stop bei home Taste Ocr1b = 0 Case &H01 : Ocr1a = Quarter_power '1/4 Gas mit Taste 1 Ocr1b = Quarter_power Case &H02 : Ocr1a = Half_power '1/2 Gas mit Taste 2 Ocr1b = Half_power Case &H03 : Ocr1a = Top 'Vollgas mit Taste 3 Ocr1b = Top Case &H37 : Ocr1a = 0 'Pirouette rechts mit Taste Audio Ocr1b = Top Case &H36 : Ocr1a = Top 'Pirouette links mit Taste View Ocr1b = 0 'for quick and dirty tests Case &H08 : Ocr1c = 249 'PWM Frequenz auf 1000 mit Taste 8 Case &H07 : Ocr1c = Ocr1c - 10 'erhöhe PWM f in 40Hz Schritten; Taste 7 Case &H09 : Ocr1c = Ocr1c + 10 'decrease PWM f in 40Hz Schritten; Taste 9 End Select End If Waitms 30 'Änderungen nicht zu schnell bei gehaltener Taste Loop