Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

generator 100Hz ? na 89c2051

FireFighter 31 Mar 2007 09:43 3830 14
  • #1 31 Mar 2007 09:43
    FireFighter
    Poziom 10  

    Witam !!
    Proszę mnie oświecić, gdyż mam mętlik w głowie.
    Chciałbym zrealizować generator na 89.. o częstotliwości 100Hz, tak aby ta częst. była dostępna na jednym z portów.
    Hmm... najlepiej sinusoida.
    Bascom oczywiście..
    Czytałem o timerach, ich przeładowaniach, ale coś się u mnie zablokowało.
    Dla swojego ułatwienia zastosuję kwarc 12MHz aby po wewn. preskalerze było równo 1MHz, TIMER0 tryb 2, oraz funkcja ON Timer0.
    Teraz zasadnicze pytanie:
    Jaką wartość załadować do licznika komendą LOAD aby przerwanie występowało co 100Hz?
    Czy przerzucenie wartości bitu na przeciwny w przerwaniu Timera0 jest właściwym sposobem na generacje 100Hz na porcie?
    Proszę o pomoc.

    0 14
  • #2 31 Mar 2007 10:20
    piotr_go
    Poziom 27  

    100Hz Sinus?
    to ja bym dał 24MHz kwarc
    jak dokładny ma być ten sinus? ile bit? ile próbek?
    wystarczy 8 bit/512 próbek ? (1024 to raczej za dużo, trzeba by dokładnie policzyć)

    0
  • #3 31 Mar 2007 10:48
    FireFighter
    Poziom 10  

    Hmm... Widzę, że temat nie będzie prosty...
    Być może prostokąt wystarczy...
    Ukłas ma być generatorem tonowej blokady szumów CTCSS.
    Urządzenie nadawczo- odbiorcze zblokowane taką blokadą odblokuje się tylko w tedy gdy na sygnale będzie właśnie owy "subton" czyli zakres od 67Hz do 250 Hz w 32 wartościach.
    Może tro rozświetli trochę temat?

    0
  • #4 31 Mar 2007 11:01
    piotr_go
    Poziom 27  

    To przypuszczam że nie będzie potrzebna jakaś super dokładność.
    Ma być generowany cały zakres 67-250Hz czy tylko 100Hz ?
    Procek ma coś jeszcze oprócz tego robić ?

    0
  • #5 31 Mar 2007 11:21
    FireFighter
    Poziom 10  

    Dokładnie ma procesor odbiorac dane szeregowe z procesora transcivera ( przy użyciu funkcji shiftin) i konwersja ich na ustalone "subtony".
    W sumie 39 kombinacji.
    Częstotliwości subtonów CTCSS w Hz oraz ich oznaczenia skrótowe:

    67.0
    71.9
    74.4
    77.0
    79.7
    82.5
    85.4
    88.5
    91.5
    94.8
    97.4
    100.0
    103.5
    107.2
    110.9
    114.8
    118.8
    123.0
    127.3 itd..

    Tony powinny mieć dokładności +/- 1%

    0
  • #6 31 Mar 2007 11:34
    piotr_go
    Poziom 27  

    8 bit / 200 próbek przy sinusie powinno sie udać

    musisz tylko sprawdzić dokładność częstotliwości ze wzoru:
    24000000(MHz) / 12(stały dzielnik) / 200(próbek) / x (dzielnik licznika w trybie 2) = twoja częstotliwość

    jeżeli taka dokładność jest wystarczająca to daj znać

    0
  • #7 31 Mar 2007 12:12
    FireFighter
    Poziom 10  

    Hm...
    szybko licząc: Wartości mieszczą się w tolerancji 1%, tak więc powinno być OK!

    0
  • #8 31 Mar 2007 15:57
    piotr_go
    Poziom 27  

    a więc zrobił bym mniej więcej tak:
    -do P1 podłączył bym przetwornik DA zrobiony na rezystorach(poszukaj hasło covox)
    -obsługe przerwania napisał bym w asemblerze (bascoma dawno nie używałem), będzie przy okazji dokładnie wiadomo ile czasu zajmuje wykonanie
    -w przerwaniu wczytywał bym wartość sinusa z tablicy(umieszczonej w pamięci programu) i wypluwał ją na P1

    zaraz postaram sie coś naskrobać




    Code:
    przerwanie:
    
       push   dph
       push   dpl
       push   acc
       push   psw
       mov   DPTR,#tablica_sinusa
       mov   A,aktualny_adres
       inc   A
       cjne   A,#200,skok01
       mov   A,#0
    skok01:
       mov   aktualny_adres,A
       movc   A,@A+DPTR
       mov   P1,A
       pop   psw
       pop   acc
       pop   dpl
       pop   dph
       reti

    = 29 cykli jeżeli sie nie pomyliłem

    tablica_sinusa - to adres do 200 elementowej tablicy z wartościami sinusa
    aktualny_adres - to 8mio bitowa zmienna

    0
  • #9 31 Mar 2007 17:04
    FireFighter
    Poziom 10  

    W necie znalazłem rozwiązanie połowiczne mojego problemu, z tym że przu użyciu PIC-a.
    generator 100Hz ? na 89c2051
    oraz program w asm:

    Code:
       Assemble with MPASM
    
    ;   See below for wiring details
    ;
            LIST            P=16C84
            __CONFIG        3FF9H   ;XTAL OSC @4Mhz,NO WATCHDOG,PWRRST,NO CP.
            __IDLOCS        1234
       ERRORLEVEL      -302
    ;
    CNT1   EQU   0CH   ;PRESCALLER COUNTER REG 1
    CNT2   EQU   0DH   ;PRESCALLER COUNTER REG 2
    CNT3   EQU   0EH   ;PRESCALLER COUNTER REG 3
    TONREG   EQU   0FH   ;REGISTER FOR TONE NUMBER
    PRES1   EQU   10H   ;PRESCALLER STORE 1
    PRES2   EQU   11H   ;PRESCALLER STORE 2
    PRES3   EQU   12H   ;PRESCALLER STORE 3
    PORTA   EQU   5
    PORTB   EQU   6
    TRISA   EQU   85H
    TRISB   EQU   86H
    OPTREG   EQU   81H
    PC   EQU   2
    PULLUP   EQU   7
    STATUS   EQU   3
    INTCON   EQU   0BH
    GIE   EQU   7
    RBIE   EQU   3
    RBIF   EQU   0
    RP0   EQU   5
    OUT   EQU   2
    PTT   EQU   7
    ;
       GOTO   START
       ORG   00C8
    START   BSF   STATUS,RP0   ;SELECT REG BANK 1
       BSF   TRISB,PTT   ;SETUP RB7 AS INPUT FOR PTT
       BCF   TRISA,OUT   ;SETUP RA2 AS OUTPUT FOR TONE
       BCF   OPTREG,PULLUP   ;SET PULLUP RESISTORS ON PORTB
       MOVLW   0xFF      ; SET PORTB AS I/Ps
       MOVWF   TRISB      ; RB0-RB5 FOR SWITCH INPUTS
    ;

       BCF   STATUS,RP0   ;SELECT REG BANK 0
       BCF   INTCON,GIE   ;DISABLE GIE INTERUPTS
       BSF   INTCON,RBIE   ;ENABLE PORT B CHANGE INTERUPT
       MOVF   TRISB,W      ;READ DIP SWITCHES INTO W




       MOVWF   TONREG      ;STORE IN 0F REG
       BCF   TONREG,6   ; CLEAR BITS 6&7 AS
       BCF   TONREG,7   ; THEY ARE IRRELAVANTS
       MOVF   TONREG,W   ;RE-STORE INTO W
       ADDWF   TONREG,F   ; MULTIPLY BY 3
       ADDWF   TONREG,F   ; FOR TONE TABLE OFFSET
    ;
       MOVF   TONREG,W   ;RELOAD TO W FOR OFFSET
       CALL   TONTBL      ;GOTO TONE LOOKUP TABLE
       MOVWF   PRES1      ;STORE FIRST VALUE FROM TABLE
    ;
       INCF   TONREG,F   ;INCREMENT FOR NEXT TABLE VALUE
       MOVF   TONREG,W   ;RELOAD W FOR OFFSET
       CALL   TONTBL      ;GOTO TONE LOOKUP TABLE
       MOVWF   PRES2      ;STORE SECOND VALUE FROM TABLE
    ;
       INCF   TONREG,F   ;INCREMENT FOR NEXT TABLE VALUE
       MOVF   TONREG,W   ;RELOAD W FOR OFFSET
       CALL   TONTBL      ;GOTO TONE LOOKUP TABLE
       MOVWF   PRES3      ;STORE THIRD VALUE FROM TABLE
    ;
    ;
    RELOAD
       MOVF   PRES1,W      ;LOAD W WITH PRESET FOR 1
       MOVWF   CNT1      ;PRELOAD PRESCALLER 1
       MOVF   PRES2,W      ;LOAD W WITH PRESET FOR 3
       MOVWF   CNT3      ;PRELOAD PRESCALLER 3
       MOVF   PRES3,W      ;LOAD W WITH PRESET FOR 2 READY
    PTTCHK
       BTFSC   PORTB,PTT   ;TEST PTT LINE
       GOTO   WAIT      ;SLEEP TILL LOW
       CALL   CHORUS      ;DO DIVIDER/PRESCALLER ROUTINE
    ;
    OUTPUT
       BTFSS   PORTA,OUT   ;TEST O/P HI OR LO AT PRESENT
       GOTO   HI      ;IF LO GO SET HI
       GOTO   LO      ;IF HI GO SET LO
    ;
    HI
       NOP         ;BALANCE OUT CYCLE TIME MARK&SPACE
       BSF   PORTA,OUT   ;MAKE O/P HI
       GOTO   RELOAD      ;RETURN TO START OF CYCLE
    ;
    LO
       BCF   PORTA,OUT   ;MAKE O/P LO
       GOTO   RELOAD      ;RETURN TO START OF CYCLE
    ;
    CHORUS
    PRE1   
       DECFSZ   CNT1,F      ;DECREMENT PRESCALLER 1
       GOTO   PRE2
       GOTO   FINE      ;CALL FINE ADJUST SUBROUTINE
    PRE2   MOVWF   CNT2      ;RELOAD PRESCALLER 2
    ;
    PREE   DECFSZ  CNT2,F      ;DECREMENT PRESCALLER 2   
       GOTO   PREE      ;GO BACK AND DECREMENT PRE2 TILL 00
    ;
       GOTO   PRE1      ;GO BACK AND DECREMENT PRE1 TILL 00
    ;
    FINE   DECFSZ   CNT3,F      ;DECREMENT PRESCALLER 3
       GOTO   FINE      ;GO BACK AND DECREMENT PRE3 TILL 00
       RETURN         ;RETURN TO CHANGE O/P AND CHECK PTT ETC
    ;
    WAIT   
       BCF   INTCON,RBIF   ;CLEAR PORT B CHANGE INT FLAG
       SLEEP         ;SLEEP AND WAIT FOR PTT
       NOP
       BCF   INTCON,GIE   ;DISABLE GLOBAL INTERUPTS AGAIN
       GOTO   PTTCHK      ;CHECK IF PTT PASSES TEST
    ;
    ;
    ;
    ;TONES TABLE AT 0008H
       ORG 0007H
    TONTBL
       ADDWF   PC,F      ; W+PC ->PC, JUMP DOWN TABLE
    ;
    ;
    ;                        16c84 PIN
    ;                                                    11  10  9   8   7   6
    ;              TONE  FREQ        RB5 RB4 RB3 RB2 RB1 RB0
    ;
       DT   02,01,0x9D   ; 000   1Khz TEST    0   0   0   0   0   0
       DT   86,82,10   ; 001   67.0         0   0   0   0   0   1
       DT   81,85,10   ; 002   69.4 *       0   0   0   0   1   0
       DT   84,80,0x0F   ; 003   71.9         0   0   0   0   1   1
       DT   7F,85,0x0F    ; 004   74.4         0   0   0   1   0   0
       DT   7B,7C,0x0F   ; 005   77.0         0   0   0   1   0   1
       DT   76,86,0x0F   ; 006   79.7         0   0   0   1   1   0
       DT   72,82,0x0F   ; 007   82.5        0   0   0   1   1   1
       DT   74,8F,0x0E   ; 008   85.4        0   0   1   0   0   0
       DT   63,91,10   ; 009   88.5        0   0   1   0   0   1
       DT   5F,9A,10   ; 010   91.5        0   0   1   0   1   0
       DT   5B,47,11   ; 011   94.8        0   0   1   0   1   1
       DT   55,88,11   ; 012   97.4        0   0   1   1   0   0
       DT   56,49,11   ; 013  100.0        0   0   1   1   0   1
       DT   09,6E,0xB9    ; 014  103.5        0   0   1   1   1   0
       DT   08,81,0xC9   ; 015  107.2        0   0   1   1   1   1
       DT   0A,71,98   ; 016  110.9        0   1   0   0   0   0
       DT   0B,76,83   ; 017  114.8        0   1   0   0   0   1
       DT   0A,0xCA,83   ; 018  118.8        0   1   0   0   1   0
       DT   0A,9A,83   ; 019  123.0        0   1   0   0   1   1
       DT   09,0xF1,83   ; 020  127.3        0   1   0   1   0   0
       DT   08,93,9D   ; 021  131.8        0   1   0   1   0   1
       DT   07,94,0xB0   ; 022  136.5        0   1   0   1   1   0
       DT   07,7C,0xAD   ; 023  141.3         0   1   0   1   1   1
       DT   07,85,0xA5   ; 024  146.2         0   1   1   0   0   0
       DT   08,7B,89   ; 025  151.4         0   1   1   0   0   1
       DT   08,80,83   ; 026  156.7         0   1   1   0   1   0
       DT   07,0xA2,90   ; 027  159.8 *       0   1   1   0   1   1
       DT   08,47,86   ; 028  162.2         0   1   1   1   0   0
       DT   07,60,95   ; 029  165.5 *       0   1   1   1   0   1
       DT   08,86,78   ; 030  167.9         0   1   1   1   1   0
       DT   07,92,87   ; 031  171.3 *       0   1   1   1   1   1
       DT   07,90,85   ; 032  173.8         1   0   0   0   0   0
       DT   07,7D,85   ; 033  177.3 *       1   0   0   0   0   1
       DT   09,5A,66   ; 034  179.9         1   0   0   0   1   0
       DT   09,48,66   ; 035  183.5 *       1   0   0   0   1   1
       DT   07,9E,78   ; 036  186.2         1   0   0   1   0   0
       DT   08,0xBB,60   ; 037  189.9 *       1   0   0   1   0   1
       DT   09,4C,60   ; 038  192.8         1   0   0   1   1   0
       DT   08,9D,60   ; 039  196.6 *       1   0   0   1   1   1
       DT   09,2F,60   ; 040  199.5 *       1   0   1   0   0   0
       DT   07,82,70   ; 041  203.5         1   0   1   0   0   1
       DT   07,76,70   ; 042  206.5 *       1   0   1   0   1   0
       DT   07,66,70   ; 043  210.7         1   0   1   0   1   1
       DT   07,6F,6A   ; 044  218.1         1   0   1   1   0   0
       DT   06,0xA3,70   ; 045  225.7         1   0   1   1   0   1
       DT   06,98,70   ; 046  229.1 *       1   0   1   1   1   0
       DT   06,8A,70   ; 047  233.6         1   0   1   1   1   1
       DT   06,72,70   ; 048  241.8         1   1   0   0   0   0
       DT   04,0xC3,99   ; 049  250.3         1   1   0   0   0   1
       DT   04,0xB9,99   ; 050  254.1 *       1   1   0   0   1   0
       DT   05,1C,99   ; 051  255   *       1   1   0   0   1   1
       DT   03,15,20   ; 052  1750 Eu Tone  1   1   0   1   0   0
       DT   05,0F,10   ; 053  1800 Eu Tone  1   1   0   1   0   1
       DT   01,84,9D   ; 054  1200 Packet   1   1   0   1   1   0
       DT   02,13,30   ; 055  2200 Packet   1   1   0   1   1   1
       DT   03,26,50   ; 056  800   *       1   1   1   0   0   0
       DT   03,0F,50   ; 057  900   *       1   1   1   0   0   1
       DT   02,3F,50   ; 058  1100  *       1   1   1   0   1   0
       DT   03,36,20   ; 059  1300  *       1   1   1   0   1   1
       DT   01,68,20   ; 060  1500  *       1   1   1   1   0   0
       DT   03,09,20   ; 061  2000  *       1   1   1   1   0   1
       DT   02,1A,20   ; 062  2500  *       1   1   1   1   1   0
       DT   02,07,20   ; 063  3500  *       1   1   1   1   1   1
    ;
    ;               * Indicates non EIA standard tone
    ;
       ORG 2100H
       DE "TonyHunt  VK5AH CTCSSENC v 1.4  "
            END


          All CTCSS tones are within EIA standard of .08% .
             Use a 4Mhz crystal with 2x18pF capacitors.
          PTT line is active LOW. PTT is RB7 Pin 13.
          OUTPUT tone is on RA2 Pin1 ,see Low pass filter diag.
          Lines RB0-RB5 can be fitted with DIP switches to set
          tone frequencies as per table above. A 1 on the table
          indicates the RB pin is logic HI . All RB port pins have
          been programmed with internal pullup resistors and will
          float HI if left open. The binary inputs are read only on
          power up and not each time the PTT is keyed.

          For CTCSS tones use a Low pass filter as shown here as the
          output waveform is square. RO is an padding resistor to
          allow for level adjustment typically 20k.


          RA2--------2k2----------RO----Output
          Pin1        |
                  |
                  1uF
                  |
                  GND


    I bąć tu człowieku mądry i naucz się asm, gdyż bez tego jak bez ręki.
    Czy do powyższego rozwiązania zamiast załączania poszczególnych "subtonów" swith-ami można dołożyć odczyt szeregowy i przypisać mu wykonanie odpowiedniego "subtonu"?

    0
  • #10 31 Mar 2007 17:17
    piotr_go
    Poziom 27  
  • #11 14 Gru 2009 22:40
    40463
    Użytkownik usunął konto  
  • #12 22 Mar 2010 14:00
    sq9jdh
    Poziom 10  

    witam może ktoś ma gotowy wsad do pic zebym mógł zaprogramowac icprogiem ?dziekuje slicznie

    0
  • #13 23 Mar 2010 10:23
    sq9jdh
    Poziom 10  

    witam z tym sobie już poradziłem przekompilowałem i działa wyśmienicie interesuje mnie decoder ctcss może ktoś robił już ciekawy jestem czy na pic można by było zrobicć dzieki za wszystkie odpowiedzi ponizej daje zawartosc hex.do powyszego tematu

    :020000040000FA
    :02000000C8280E
    :02000E00820767
    :10001000023401349D348634823410348134853482
    :100020001034843480340F347F3485340F347B347F
    :100030007C340F34763486340F34723482340F3487
    :1000400074348F340E346334913410345F349A3402
    :1000500010345B34473411345534883411345634F9
    :100060004934113409346E34B93408348134C93414
    :100070000A34713498340B34763483340A34CA34F5
    :1000800083340A349A3483340934F13483340834A1
    :1000900093349D3407349434B03407347C34AD3415
    :1000A00007348534A53408347B34893408348034EB
    :1000B00083340734A2349034083447348634073408
    :1000C0006034953408348634783407349234873475
    :1000D00007349034853407347D34853409345A34F8
    :1000E000663409344834663407349E34783408342E
    :1000F000BB34603409344C34603408349D3460348B
    :1001000009342F3460340734823470340734763441
    :10011000703407346634703407346F346A3406340C
    :10012000A334703406349834703406348A3470340E
    :100130000634723470340434C33499340434B9341A
    :10014000993405341C34993403341534203405347F
    :100150000F341034013484349D3402341334303479
    :1001600003342634503403340F34503402343F34D3
    :1001700050340334363420340134683420340334AA
    :100180000934203402341A34203402340734203441
    :100190008316861705118113FF30860083128B1397
    :1001A0008B1506088F000F138F130F088F078F070B
    :1001B0000F08072090008F0A0F08072091008F0A70
    :1001C0000F080720920010088C0011088E001208FA
    :1001D000861BFD28F320051DEE28F12800000515DB
    :1001E000E3280511E3288C0BF628FA288D008D0BE7
    :1001F000F728F3288E0BFA2808000B106300000084
    :040200008B13E8284C
    :084000000100020003000400AE
    :02400E00F93F78
    :1042000054006F006E007900480075006E00740065
    :104210002000200056004B003500410048002000DF
    :104220004300540043005300530045004E00430038
    :1042300020007600200031002E00340020002000F5
    :00000001FF

    0
  • #15 06 Cze 2010 17:30
    40463
    Użytkownik usunął konto