PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frequenz messen mit PIC



TB1
29.06.2006, 10:50
Hallo User
Ich möchte mit einem PIC 12F629 eine Frequenz messen und das Ergebnis ausgeben, z.B. Binärzahl.
Die Frequenz wird im Bereich von 4 bis 6 MHz liegen.
Mit den integrierten Timern sollte sich das doch machen lassen.

Da ich wenig Erfahrung in der PIC programmierung habe würde ich mich über Tipps oder Beispielprogramme freuen.

Gruss an alle User O:)

kalledom
29.06.2006, 12:01
Hallo TB1,
ich würde die 4...6MHz mit einem TTL-Zähler / -Teiler um den Faktor 256...1024 runter teilen und dann auf den Timer-Eingang legen.
Dann einen Interrupt erzeugen, der in festen Abständen den Zähler ausliest und löscht. Je nachdem, was Du für eine Int-Zeit wählst, hast Du schon eine brauchbare Binärzahl.
Teiler und Meßzeit sind maßgeblich für die Genauigkeit und Auflösung.
Wie ein 1ms-Int in Assembler programmiert wird findest Du z.B. unter http://www.domnick-elektronik.de/picasm.htm

PICture
30.06.2006, 06:42
Hallo TB1!

Ich würde Dir eine Application Note AN592 ("Frequency Counter Using PIC16c5X") vom Microchip in PDF Format empfehlen. Die Idee finde ich gut und ich habe sie selber mit Modifikationen angewendet. Es ist auch ein ASM Programm dabei, das man für sich entsprechend ändern kann.

Ausserdem unter Projekte auf:

www.sprut.de

MfG

Madgyver
30.06.2006, 06:55
http://www.sprut.de/electronic/pic/projekte/frequenz/freq.htm
Vll hilft dir das weiter.

ich kenn mich nicht so mit PICs aus, aber vll kannst du hier ja das prinzip übernehemen.

TB1
30.06.2006, 10:20
esten Dank erstmal für die Tips. Die AN von Microchip sieht vielversprechend aus, und auch aus dem Projekt von Sprut kann ich sicher ein paar anregungen ziehen.

PICture
07.07.2006, 16:08
Hallo TB1!

Vielleicht kannst Du meine Modifikation anwenden. Ich habe es bisher nur beim PIC18F252 ausprobiert, sollte aber bei den 12FXXX und 16FXXX auch gehen.

Um den Prescaler auszulesen benutze ich zum "togglen" das Bit im Timer0 Configuration Register, das die Triggerungsflanke ändert:

bsf T0CON,T0SE
bcf T0CON,T0SE

Während des "togglen´s" muss der TOCKI Pin in TRISA Register als Ausgang definiert werden.

Somit habe ich den Pin, das für "togglen" benutzt war, für andere Zwecke frei.

Der Register TMR0 wird in A1 und der Prescalerwert in A0 gespeichert.

Inzwischen habe ich ein fertiges ASM Programm zum Messen der Frequenz in Wiki hochgeladen:

https://www.roboternetz.de/wissen/index.php/PIC_Assembler#Interrupts

MfG

GetFreq movf TMR0,0
movwf A1
movwf FTmp
clrf ATmp
FToggle incf ATmp,1
bsf _RP0
bsf T0CON,T0SE
bcf T0CON,T0SE
bcf _RP0
movf TMR0,0
subwf FTmp,0
btfsc _Z
goto FToggle
comf ATmp,1
incf ATmp,0
movwf A0
return