Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Circuit of MICROCONTROLLER BASED DIGITAL FILTER

Status
Not open for further replies.

yanti amol

Member level 1
Joined
May 31, 2011
Messages
32
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,296
Location
Indonesia-surabaya
Activity points
1,457
listing program MICROCONTROLLER BASED DIGITAL FILTER

hi everybody ,,can you give me listing programm of digital filter (low pass filter or etc) ?
thank you
 
Last edited:

8-bit microcontroller implements digital lowpass filter
**broken link removed**


Code:
**************************************************************************
*               DIGITAL SINGLE POLE LOW-PASS FILTER                                              *
**************************************************************************
* Fosc=12.8MHz, Prescaler=64;  ##T=50*Tms  CT=50                                                    *
* Input:  AD3  (pin2) Range: $00-$FF                                                                                  *
* Sample rate=10ms                                                                                                               *
* Filter parameters:b1=0.875;a0=0.125; F=1/a0=8; d=7.5                                                 *
**************************************************************************
$nolist
$include 'Fr908QT2.asm'
$list

PERIOD         EQU $01F4    ;Sample rate =10ms; (50*10=500=$01f4 ),
S                      EQU 3             ;Number of right shifts to divide by F=8
HAlFF            EQU 4             ;Half of devisor F=8 (for rounding during division)

*VARIABLES
            ORG RAM
INPUT               RMB   1       ;X{n} 
OUTPUT           RMB   1       ;Y[n]
INCREMENT   RMB   2       ;X[n] - Y[n-1]
SampleCNT       RMB   1       ;Sample counter for testing only

*INITIALIZATION
              ORG ROM
init             RSP                                   ;$FF-->SP
                 CLRA
                 CLR    INPUT                    ;Clear registers
                 CLR    OUTPUT
                 CLR    INCREMENT
                 CLR    INCREMENT+1
                 CLR    SampleCNT
                 LDA    $FFC0                      ;adjusting frequency
                 STA     $0038             
                 MOV   #$01,CONFIG1      ;cop disabled
                 MOV   #$41,CONFIG2      ;RST-active in pin,IRQ-active in pin
                 CLRH                                  ;clear H:X
                 CLRX
                 CLR     prtA                        ;clear prtA
                 MOV    #pA0.,DDRA         ;set pA0 output,pA1-pA5 inputs
                 MOV    #0,TSC0                 ;clear TSC0
                 LDHX   #PERIOD              ;PERIOD -->TmodH & TmodL
                 STHX   TmodH 
                 MOV    #%00010110,TSC   ;clear TIMER,start TIMER,prescaler:64
********************************************************************************

MAIN          BRCLR  TOF,TSC,*                ;wait for the end of PERIOD
                     BCLR     TOF,TSC                   ;TOF reset

ReadADC    MOV      #3,ADSCR                 ;start ADC3
                     BRCLR   COCO,ADSCR,*     ;wait for ADC3 end
                     MOV       ADR,INPUT             ;ADR->INPUT
                     INC          SampleCNT

Filtering      JSR      Filter
                     BRA    MAIN

********************* DIGITAL LOW_PASS FILTER ************************************

Filter          LDA    INPUT                         ;Calculate (X[n] - Y[n-1])
                    SUB    OUTPUT
                    STA    INCREMENT+1
                
                   clc
                   LDA    INCREMENT+1          ;Calculate (X[n]-Y[n-1])+halfF
                   ADD    #HALFF                       ;(for rounding the result of division)
                   STA     INCREMENT+1 
                   LDA    INCREMENT
                   ADC    #0
                   STA     INCREMENT

                   LDA      #S                                  ;division on F=8, by S=3 right shifts,
mf1             ASR       INCREMENT 
                   ROR      INCREMENT+1 
                   DBNZA  mf1

                   LDA        OUTPUT                    ;Calculate Y[n]=Y[n-1] + (X[n]-Y[n-1])/8
                   ADD        INCREMENT+1 
                   STA         OUTPUT
                   RTS
************************************************************************************
 ORG        $FFFE      ; Position to reset vector
 FDB         init            ; Set start address
$nolist




Additional material:

**broken link removed**

AVR223: Digital Filters with AVR
http://www.atmel.com/Images/doc2527.pdf

MICROCHIP - SW300001 - Microcontroller Digital Filter Design Development Tool
4581283.jpg

**broken link removed**
 
Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top