Mikronadajnik RC5 na Tiny13/Tiny25

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Mikronadajnik RC5 na Tiny13/Tiny25

Post autor: niveasoft » 02 sty 2020, 2:35

Taka mała pchła normalnie nie potrafi nadawać RC5 bo Bascom potrzebuje tam Timer1 którego brak.
Napisałem takie Demo i zostało tam pół procka flash i kilka bajtów z tych nędznych 64 w Tiny13 :D więc można sobie dopisać jakieś dodatkowe komendy albo klawiaturę na ADC...
  1. '***************************************************************************
  2. '* 8PIN uC Tiny13/Tiny25-Tiny85 NO 16BIT Timer RC5SEND DEMO by BARTek EDC  *
  3. '***************************************************************************
  4.  
  5.  
  6. $regfile = "attiny13a.dat"
  7. $crystal = 9600000
  8. $hwstack = 6
  9. $swstack = 0
  10. $framesize = 12
  11.  
  12. Osccal = 30                                                 'tune internal oscillator (My ori 20)
  13.  
  14. Const _delay = 880                                          'x useconds  (ori 889)
  15.  
  16. Config Portb = &B00001 : Portb = &B11110                    'OC0A on PORTB.0 but overrided by Timer0
  17.  
  18. Switch Alias Pinb.3
  19.  
  20. Config Timer0 = Timer , Prescale = 1 , Compare_a = Toggle , Clear_timer = 1
  21. 'Compare0 = 132                                             '36kHz @9,6MHz Tiny13
  22.  Compare0 = 125                                             '38kHz @9,6MHz Tiny13
  23. 'Compare0 = 110                                             ' 36kHz @8MHz   TinyX5
  24.  
  25.  Tccr0a.com0a0 = 0                                          'disconnect 36kHz carrier from Timer0 but if this is REM or 1 then you can tune 36-38 kHz carrier
  26.  
  27. Dim Mframe As Word , Address As Byte , Command As Byte
  28. Dim Togg As Byte , Snd As Byte , Temp As Word
  29.  
  30.  Address = 0 : Command = 12                                 'for test ON/OFF TV
  31.  
  32. Do
  33.  If Switch = 0 Then
  34.   Gosub Make_frame
  35.   Gosub Send_frame
  36.   While Switch = 0                                          'repeat till switch release
  37.    Waitms 85
  38.    Gosub Send_frame
  39.   Wend
  40.  End If
  41. Loop
  42.  
  43. Make_frame:
  44. Mframe = Address
  45. Shift Mframe , Left , 6
  46. Mframe = Mframe + Command
  47. If Togg = 0 Then
  48.  Togg = 1
  49.  Mframe = Mframe Or &B0011_1000_0000_0000                   'set toggle
  50. Else
  51.  Togg = 0
  52.  Mframe = Mframe Or &B0011_0000_0000_0000                   'reset toggle
  53. End If
  54. Return
  55.  
  56. Send_frame:
  57.  Snd = 14
  58.  Temp = Mframe
  59.  Shift Temp , Left , 2
  60.  Do
  61.   If Temp.15 = 0 Then
  62.    Gosub Bit0                                               'send bit 0
  63.   Else
  64.    Gosub Bit1                                               'send bit 1
  65.   End If
  66.   Shift Temp , Left , 1                                     'move over frame
  67.   Decr Snd                                                  'till 14 bit is send
  68.  Loop Until Snd = 0
  69. Return
  70.  
  71. Bit0:
  72.  Tccr0a.com0a0 = 1                                          'enable carrier by attach it ito 36kHz Timer0
  73.  Waitus _delay
  74.  Tccr0a.com0a0 = 0                                          'disable carrier
  75.  Waitus _delay
  76. Return
  77.  
  78. Bit1:
  79.  Waitus _delay
  80.  Tccr0a.com0a0 = 1
  81.  Waitus _delay
  82.  Tccr0a.com0a0 = 0
  83. Return
ODPOWIEDZ