logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak ustawić TIMER0 na 89c2051 do generowania 100Hz z kwarcem 12MHz?

FireFighter 31 Mar 2007 09:43 4538 14
  • #1 3736473
    FireFighter
    Poziom 11  
    Posty: 15
    Pomógł: 1
    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.
  • #2 3736555
    piotr_go
    Konstruktor DIY elektronika
    Posty: 2907
    Pomógł: 94
    Ocena: 3338
    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ć)
  • #3 3736629
    FireFighter
    Poziom 11  
    Posty: 15
    Pomógł: 1
    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?
  • #4 3736657
    piotr_go
    Konstruktor DIY elektronika
    Posty: 2907
    Pomógł: 94
    Ocena: 3338
    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ć ?
  • #5 3736704
    FireFighter
    Poziom 11  
    Posty: 15
    Pomógł: 1
    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%
  • #6 3736746
    piotr_go
    Konstruktor DIY elektronika
    Posty: 2907
    Pomógł: 94
    Ocena: 3338
    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ć
  • #7 3736842
    FireFighter
    Poziom 11  
    Posty: 15
    Pomógł: 1
    Hm...
    szybko licząc: Wartości mieszczą się w tolerancji 1%, tak więc powinno być OK!
  • #8 3737519
    piotr_go
    Konstruktor DIY elektronika
    Posty: 2907
    Pomógł: 94
    Ocena: 3338
    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ć




    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
  • #9 3737719
    FireFighter
    Poziom 11  
    Posty: 15
    Pomógł: 1
    W necie znalazłem rozwiązanie połowiczne mojego problemu, z tym że przu użyciu PIC-a.
    Jak ustawić TIMER0 na 89c2051 do generowania 100Hz z kwarcem 12MHz?
    oraz program w asm:
    	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"?
  • #10 3737750
    piotr_go
    Konstruktor DIY elektronika
    Posty: 2907
    Pomógł: 94
    Ocena: 3338
    pewnie tak ale z pic'ami nigdy nie miałem do czynienia więc nie moge pomóc
  • #11 7390431
    Konto nie istnieje
    Konto nie istnieje  
  • #12 7865090
    sq9jdh
    Poziom 11  
    Posty: 25
    Ocena: 22
    witam może ktoś ma gotowy wsad do pic zebym mógł zaprogramowac icprogiem ?dziekuje slicznie
  • #13 7869086
    sq9jdh
    Poziom 11  
    Posty: 25
    Ocena: 22
    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
  • #15 8161964
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

✨ Dyskusja dotyczy konfiguracji timera TIMER0 w mikrokontrolerze 89c2051 z kwarcem 12 MHz w celu generowania sygnału o częstotliwości 100 Hz, przeznaczonego do zastosowań w systemach CTCSS (Continuous Tone-Coded Squelch System). Użytkownik planuje wykorzystać TIMER0 w trybie 2 z preskalerem, aby uzyskać wewnętrzną częstotliwość 1 MHz i pyta o wartość załadowania licznika oraz metodę generacji sygnału (np. zmiana stanu bitu w przerwaniu). W odpowiedziach poruszono kwestie dokładności generowanego sygnału, ilości próbek i bitów dla fali sinusoidalnej (np. 8 bitów/200-512 próbek), a także alternatywę w postaci sygnału prostokątnego, który może być wystarczający dla tonów CTCSS w zakresie 67-250 Hz z tolerancją ±1%. Zaproponowano implementację generatora sinusoidy z wykorzystaniem tablicy próbek w pamięci programu i obsługą przerwań w asemblerze, co pozwala na precyzyjne sterowanie czasem wykonania. W dyskusji pojawiły się także przykłady rozwiązań na mikrokontrolerach PIC16F84A, w tym kod źródłowy w asemblerze oraz pliki HEX, wraz z uwagami dotyczącymi kształtu sygnału (trójkątny przebieg) i filtracji w repeaterach. Podano linki do schematów i kodów CTCSS oraz omówiono praktyczne aspekty implementacji, takie jak podłączenie przetwornika DAC na rezystorach (np. Covox) do portu P1. Całość wskazuje na potrzebę precyzyjnego doboru wartości załadowania licznika i ewentualnego wykorzystania przerwań do generacji sygnału o wymaganej częstotliwości i kształcie, z uwzględnieniem specyfiki zastosowania w systemach radiokomunikacyjnych.
Wygenerowane przez model językowy.
REKLAMA