Sida 1 av 2
10KHz by Pic16F877a
Postat: 16 februari 2005, 18:45:36
av Jine
Nån av dom här som skulle fugera?
Använder en 20mhz kristall och en Pic16f877a (2 st pwm utgångar, ska använda Pwm 1 (Portbc.2) )
10khz Tankade verisonen
Kod: Markera allt
' Setting up hardware PWM for 10KHz operation.
TRISC.2 = 0 ' CCP1 (PortC.2 = Output)
PR2 = 99 ' Set PWM Period for approximately 10KHz
CCPR1L = 50 ' Set PWM Duty-Cycle to 50%
CCP1CON = %00001100 ' Select PWM Mode
T2CON = %00000100 ' Timer2 = ON + 1:1 prescale
Uträknade av mig, Med hjälp av 38KHz kod..
Kod: Markera allt
'Initiate PWM (10kHz, 50%dc @ 20MHz OSC).
TRISC.2 = 0 'PortC.2 output
CCP1CON = %00001100 'Mode select = PWM
T2CON = %00000100 'Timer2 ON + 1:1 prescale
PR2 = 313 '10kHz PWM
CCPR1L = 450 '50% duty cycle
Postat: 17 februari 2005, 18:38:59
av Jine
Eller kanske man skulle använda en 555a ist..
Hmm, Ge förslag!!
Postat: 17 februari 2005, 19:28:40
av cyr
Testa?
Första exemplet får jag till 20khz med huvudräkning, men jag kanske har fel. Ändra annars prescaler till 1:2 om det går så blir det ju rätt.
Andra exemplet vet jag inte, PR2 och CCPR1L är väl båda 8bits register så 313 och 450 går inte att skriva in dom alls...
Postat: 17 februari 2005, 20:04:07
av Jine
Andra kan du skita i.. jag räknade totalt fel upptäckte jag nyss
Testa, där ligger problemet.. har inte osciloskop lr frekvänsräknare lr något som kan fugera som det..
Postat: 17 februari 2005, 21:34:54
av babbage
Om du har 3 st
40175 har du 12 st D-flip-flopar och kan dela frekvensen med 2^12=4096. Då borde du kunna koppla till en lysdiod och mäta tiden med ett stoppur. Om du kräver en hög nogrannhet får du medelvärdesbilda över flera perioder.
Om du har flera PICar kan du använde en extra för frekvensdelningen, då kan du även låta denna räkna antalet neddelade perioder om du t.ex. vill medelvärdesbilda över t.ex. 10000 neddelade perioder.
Postat: 18 februari 2005, 00:42:18
av babbage
Flera testinstrument om man inte har råd att köpa oscilloskop eller frekvenstäknare.
Ett sätt som är förvånansvärt nogrant och antagligen är bättre än mitt förra förslag, örat är bra på att avgöra relativa frekvenser: Man klarar sig med en 40175 => dela med 2^4=16 => 625Hz som kopplas till en liten högtalare
Generera 625Hz fyrkanksvåg i ett ljudprogram i datorn, spela upp och jämför ljudet från PICen. Det är lätt att avgöra om tonen från PICen är högre/samma/lägre. Om man vill få ett "exakt" frekvensvärde kan man köra intervallhalvering tills frekvenserna stämmer överrens. Det här skulle fungera för periodiska signaler som är mycket snabbare än 10kHz.
Med lite fantasi och extra arbete kan man ibland klara sig utan dyra mätinstrument.
Om frekvensen är så låg som 10kHz har du förmodligen redan ett mätinstrument hemma, ljudkortet i din dator. Se till att spänningen inte är för hög med t.ex. två resistorer som spänningsdelare. Någonting mellan 0.5-1 volt borde fungera. Låt datorn sampla och titta på resultatet i något lämpligt program.
Postat: 18 februari 2005, 00:57:59
av cyr
Biltema har en liten multimeter för 129kr som kan mäta frekvens upp till 10MHz. Kan vara ett tips om du behöver göra det flera gånger...
Postat: 19 februari 2005, 10:49:10
av Jine
Hmm Byggt en liten Ljudkorts oscilloskop nu... Ena koden klarar den inte o mäta..
Andra dör vid komplimeringen (Stavning)
Postat: 19 februari 2005, 10:53:16
av Hedis
Kompilering...
Moduleringsfrekvensen (38Khz) ser du aldrig med datorn, men databitarna skall du allt kunna se. Jag gjorde så när jag byggde en ir-sändare iaf, spelade först in den riktiga fjärren med goldwave, sen var det bara o ändra fördröjnigarna tills dom var likadana in som ut.
Jag modulerade däremot med en lös 555:a efter µC´n.
Postat: 19 februari 2005, 11:34:15
av $tiff
Så här fick jag det till med en 20 MHz klocka:
Kod: Markera allt
- - - - - - - - - 10 kHz - - - - - - - - - - - -
- - - - PR2
PR2 = ( 20MHz / (4 * TMR2 * 10kHz )) - 1
TMR2 (timer2 postscaler): 4
PR2 = ( 20 000 000 / (4 * 4 * 10000 )) - 1
PR2 = 125 - 1
PR2 = 124
- - - - Max Resoulution, Duty Cycle
Resolution = log(20MHz/10kHz) / log(2) bits
Resolution = 10,97 bits
Duty Cycle: 0 - 2000
- - - - Duty Cycle, 50%
(PR2 + 1) * TMR2 * dc
(124 + 1) * 4 * 50% = 250
bit 9876543210
250 = 0011111010
CCP1CON = %**10****
CCPR1L = %00111110
- - - - Sammanfattning 10 kHz
TRISC.2 = 0 'PortC.2 output
CCP1CON = %00101100 'Mode select = PWM, two LSB of DC
T2CON = %00000101 'Timer2 ON + 1:4 prescale
CCPR1L = %00111110 'DC = 50%
PR2 = 124
Postat: 19 februari 2005, 13:11:12
av Jine
tack stiff.. Räddaren i nöden som vanligt!.. Ska testa koden sen..
Hedis: Va? Var kommer 38khz in i bilden?
Postat: 20 februari 2005, 00:35:34
av Hedis
Hmm, läste nog lite för snabbt.
"Uträknade av mig, Med hjälp av 38KHz kod.. "
Fick då för mig att du ville sända IR-signaler o modulera dessa i µC´n.
Sorry

Postat: 20 februari 2005, 01:16:45
av Jine
Np..!
Stiff har hjälp mig med både IR modulationen (38khz) och 10khz Nu

Tack

Postat: 20 februari 2005, 01:23:50
av babbage
Nu när du har ett ljudkortsoscilloskop är det ett par saker som kan vara bra att tänka på.
Ingången på ljukortet har antagligen ett antialias-filter (kanske någonstans mellan 16 till 20 kHz, beror på ljudkort). Det gör att en fyrkantsvåg på 10kHz inte ser ut som en snygg fyrkantsvåg utan mera som en sinus. Men det går fotfarande bra att bestämma periodtiden/frekvensen.
Om man tittat på vågformen med ett ljudprogram kan även det verka menligt på kurvformen. Om man har otur använder den linjär interpolation för att rita kurvformen.
Jag har inget program på lut just nu men om någon annan kan tipsa om ett program som återskapar samplingar på ett bra sätt så kanske det hjälper Jine
Postat: 20 februari 2005, 13:17:43
av Jine
Har googlat lite och hittat runt 12371827398 program som kan använda ljudkortet som oscilloskop så det är inget problem!