- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 2 von 2

Thema: Frequenzzähler mit LPH2673-1 (zum Nachbauen)

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077

    Frequenzzähler mit LPH2673-1 (zum Nachbauen)

    Hallo!

    Zuletzt habe ich mir einen kleinen (80x40x28 mm) einfachen mit einem 2,4 V / 140 mAh (Varta 110) betriebenen Frequenzzähler mit dem LPH2673-1 Display von Pollin gebaut. Ich habe wegen minimalsten Stromverbrauch keinen Eingangsverstärker eingebaut. Die Skizze der Hardware und der ASM Quellcode befinden sich im Code.

    Das Programm basiert auf dem in unserem Wiki erklärtem, wo die leere Schleife durch eine endlose Schleife fürs Display ersetzt wurde.

    Der Frequenzzähler misst 1 s und als Ergebnis werden max. 6 Ziffer ohne führenden Nullen in zwei Bereichen angezeigt. Ohne Doppelpunkt wird die Frequenz in Hz dargestellt und der sichtbare Doppelpunkt zeigt, dass die gemessene Frequenz mindestens 1 MHz ist und trent die zwei MHz stellen von den anderen. Für einen Uhrenquarz wird 32768 und für 16 MHz 16:0000 gezeigt.

    Das Display wurde "auf dem Kopf gestellt" damit sich der Doppelpunkt auf der richtiger Stelle befindet. Genauere Beschreibung der Funktionsweise ist in: https://www.roboternetz.de/community...%BCr-LPH2673-1 . Zum Laden des Akkus wurde an die Spitze und GND Krokoklemme durch Zeitschaltuhr angeschlossenes stabiliesiertes Netzgerät +5 V vorgesehen. Der Stromverbrauch bei 2,4V beträgt ca. 2,7 mA.

    Weil das Programm ziemlich groß ist, musste ich es auf zwei Beiträge verteilen. Die beide Teile muss man in eine Datei nacheinander kopieren.

    MfG
    Code:
          Ziffer   1    2         3    4      5    6
                --------------------------------------------	 a
                |  --   --        --   --     --   --        |      ---
                | |  | |  | PROG |  | |  | o |  | |  | STOP  |    f| g |b
                |  --   --        --   --     --   --        |      ---
                | |  | |  | DATE |  | |  | o |  | |  | START |    e|   |c
                |  --   --        --   --     --   --        |      ---
                 --------------------------------------------	 d
                Pin1| | | | | | | | | | | | | | | | | | |Pin19
    
    
    
          --------------------------------------------------------------------------
          |Seg1|Sg2|Sg3|Sg4|Sg5|Seg6|Sg7|Sg8|Sg9|S10|Sg11|Sg12|Sg13|Sg14|Sg15|Seg16|
     -------------------------------------------------------------------------------
     |Com3|STOP| a1| b1| a2| b2|DATE| a3| b3| a4| b4| dp | a5 | b5 | a6 | b6 |START|Pin19
     -------------------------------------------------------------------------------
     |Com2| -  | f1| g1| f2| g2| c2 | f3| g3| f4| g4| c4 | f5 | g5 | f6 | g6 | c6  |Pin18
     -------------------------------------------------------------------------------
     |Com1|PROG| e1| d1| c1| e2| d2 | e3| d3| c3| e4| d4 | e5 | d5 | c5 | e6 | d6  |Pin17
     -------------------------------------------------------------------------------
           Pin1 P2 Pin3 Pin4 P5 Pin6 Pin7 P8 P9  P10 P11  Pin12 P13 Pin14 P15 Pin16
    
                                                   VCC
                                                    +
                                                    |  ___
                                                10k +-|___|-+
                                                            |
                                                       ___  |
                                                10k +-|___|-+
                                                    |       |
                                                    |  \]   |
                                               100µ +--|]---+
                                                    |  /]+  |
                                                   ===     .-.
                                                   GND  Rs*| |
                                                        6k8| |
                                                           '-'
      18x150k (2 Netzwerke 9x150k)                          |
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
      | .-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-.
      | | || || || || || || || || || || || || || || || || || |
      | | || || || || || || || || || || || || || || || || || |
      | '-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-'
      |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
      V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V Display
      1                                                     19
    
                                                  220
                                                  ___
                         +-----------------------|___|--+
                         |       .----U----.            |
                         |      -|VPP    B7|-           |
                         |  D19<-|A0     B6|->D2        o
                         |  D18<-|A1     B5|->D3        __--o-+
                         |  D17<-|A2     B4|->D4      +-o     |
                         |  ___ -|A3     B3|->D5      |       |+
            Spitze <-----+-|___|-|A4     B2|->D6      |       -
                            470 -|A5     B1|->D7   +--+      ---
             +--+----------------|VDD    B0|->D8   |  |       | Akku
             |  | ||  /----------|OSC1  VCC|-------+ ---      - 2,4V
            === +-||-+22p+-------|OSC2  VDD|-------+ --- µ1  ---
            GND | || |   |  D16<-|C0     C7|->D9   |  |       |-
                |   _-_  |  D15<-|C1     C6|->D10  +--+-------+
                |  |___| |  D14<-|C2     C5|->D11     |
                |    -   |  D13<-|C3     C4|->D12     |
                | || |   |       '---------'          |
                +-||-+---+        PIC16F870           |
                  ||  7,3728 MHz                     \|/
                                                      X
                  22p                                / \
                                                    /   \
             D2...D19 - Displaypins                  GND
    
    
    ;	Programm zum Messen der Frequenz am T0CKI Pin mit 7,3728 MHz Quarz und Display LPH2673-1
    	LIST      P=16F870
    	include "P16F870.inc"
    	__CONFIG	_CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
    ;	TOCKI	PORTA,4				;I Frequenzeingang
    #define	_C	STATUS,C
    #define	_Z	STATUS,Z
    #define	_DC	STATUS,DC
    #define	_RP0	STATUS,RP0
    #define	_Fcra	Flags,0
    #define	_Fcrp	Flags,1
    #define	_Fdca	Flags,2
    #define	_Ferr	Flags,3				;Überlauf (Fehler)
    #define	_Frs	Flags,4
    #define	_Fnz	Flags,5
    #define	_Flow	Flags,6
    #define	_Ftmp	Flags,7				;Zwischenspeicher
    #define	DATE	TB3,2				;Segmentszuweisung	
    #define	START	TC3,0
    #define	dp	TC3,5				;Doppelpunkt
    #define	a1	TB3,6
    #define	b1	TB3,5
    #define	c1	TB1,4
    #define	d1	TB1,5
    #define	e1	TB1,6
    #define	f1	TB2,6
    #define	g1	TB2,5
    #define	a2	TB3,4
    #define	b2	TB3,3
    #define	c2	TB2,2
    #define	d2	TB1,2
    #define	e2	TB1,3
    #define	f2	TB2,4
    #define	g2	TB2,3
    #define	a3	TB3,1
    #define	b3	TB3,0
    #define	c3	TC1,7
    #define	d3	TB1,0
    #define	e3	TB1,1
    #define	f3	TB2,1
    #define	g3	TB2,0
    #define	a4	TC3,7
    #define	b4	TC3,6
    #define	c4	TC2,5
    #define	d4	TC1,5
    #define	e4	TC1,6
    #define	f4	TC2,7
    #define	g4	TC2,6
    #define	a5	TC3,4
    #define	b5	TC3,3
    #define	c5	TC1,2
    #define	d5	TC1,3
    #define	e5	TC1,4
    #define	f5	TC2,4
    #define	g5	TC2,3
    #define	a6	TC3,2
    #define	b6	TC3,1
    #define	c6	TC2,0
    #define	d6	TC1,0
    #define	e6	TC1,1
    #define	f6	TC2,2
    #define	g6	TC2,1
    ;Com1		PORTA,2				;Portszuweisung
    ;Com2		PORTA,1
    ;Com3		PORTA,0
    ;Seg1		PORTB,7
    ;Seg2		PORTB,6
    ;Seg3		PORTB,5
    ;Seg4		PORTB,4
    ;Seg5		PORTB,3
    ;Seg6		PORTB,2
    ;Seg7		PORTB,1
    ;Seg8		PORTB,0
    ;Seg9		PORTC,7
    ;Seg10		PORTC,6
    ;Seg11		PORTC,5
    ;Seg12		PORTC,4
    ;Seg13		PORTC,3
    ;Seg14		PORTC,2
    ;Seg15		PORTC,1
    ;Seg16		PORTC,0
    A3		equ	20			;Register fürs Rechnen Hex_Dec
    A2		equ	21
    A1		equ	22
    A0		equ	23
    B3		equ	24
    B2		equ	25
    B1		equ	26
    B0		equ	27
    C3		equ	28
    C2		equ	29
    C1		equ	2A
    C0		equ	2B
    D3		equ	2C
    D2		equ	2D
    D1		equ	2E
    D0		equ	2F
    Flags		equ	30
    Tmp		equ	31			;vorläufige Register
    ATmp		equ	32
    HTmp		equ	33			;Zwischenspeicher
    RTmp		equ	34
    DTmp		equ	35			;temporary (temp) für Display 
    DTmp1		equ	36
    PA		equ	37			;temp für PORTA
    PB		equ	38			;temp für PORTB
    PC		equ	39			;temp für PORTC
    TA1		equ	3A			;temp für TRISA bei Com1
    TA2		equ	3B			;temp für TRISA bei Com2
    TA3		equ	3C			;temp für TRISA bei Com3
    TB1		equ	3D			;temp für TRISB bei Com1
    TB2		equ	3E			;temp für TRISB bei Com2
    TB3		equ	3F			;temp für TRISB bei Com3
    TC1		equ	40			;temp für TRISC bei Com1
    TC2		equ	41			;temp für TRISC bei Com2
    TC3		equ	42			;temp für TRISC bei Com3
    SWR		equ	43			;sicherung vom W-Register 
    SSR		equ	44			;Sicherung vom STATUS-Register
     		ORG	0
    		call	Init			;alles initialisieren
    Main		goto	DispLoop		;und in die endlose Schleife springen 
    		ORG	4			;hier fängt ISR (interrupt service routine) an
    		bcf	INTCON,GIE		;alle interrupts sperren
    		movwf	SWR			;W-Register sichern
    		movf	STATUS,0		;STATUS Register
    		movwf	SSR			;sichern
    		btfss	INTCON,T0IF		;ist Timer0 überlaufen ?
    		goto	CheckTMR1		;nein, dann prüfe Timer1
    		bcf	INTCON,T0IF		;ja, Timer0 interrupt flag löschen und bearbeiten
    	 	movlw	1
    		addwf	A2,1			;erhöhe A2 durch Addition
    		btfsc	_C			;um Überlauf von A2 zu erkennen und
    		incf	A3,1			;increment A3, wenn A2 überlaufen ist
    CheckTMR1	btfss	PIR1,TMR1IF		;ist Timer1 überlaufen ?
    		goto	ISREnd			;nein, dann ISR beenden und interrupts erlauben
    		bcf	PIR1,TMR1IF		;Timer1 interrupt flag löschen
    		call	Multip			;Interrupts vom Timer1 im UP "Multip" zählen
    ISREnd		movf	SSR,0			;STATUS Register
    		movwf	STATUS  		;wiederherstellen
    		movf	SWR,0			;W-Register wiederherstellen
    		retfie				;ISR beenden und interrupts erlauben
    Multip		incf	Tmp,1			;Interruptszähler von Timer1 erhöhen
    		btfss	Tmp,2			;schon 4.interrupt?
    		return				;nein, dann zurück
    		bsf	_RP0			;ja, weiter
    		movf	TRISA,0			;stopp Timer 0 usw.
    		andlw	0xEF
    		movwf	TRISA			;TOCKI Pin (A4) als Ausgang
    		bcf	_RP0
    		bcf	T1CON,TMR1ON		;stopp Timer1
    GetFreq		movf	TMR0,0			;Prescaler ins Register A0 kopieren
    		movwf	A1
    		movwf	RTmp
    		clrf	ATmp
    		incf	ATmp,1
    		bsf	_RP0
    		bsf	OPTION_REG,T0SE
    		bcf	OPTION_REG,T0SE
    		bcf	_RP0
    		movf	TMR0,0
    		subwf	RTmp,0
    		btfsc	_Z
    		goto	$-8
    		comf	ATmp,1
    		incf	ATmp,0
    		movwf	A0
    GetFreq1	call	Hex_Dec			;Messergebnis auf Decimal wandeln
    		call	DispSet			;und auf das Display übergeben
    		call	AClr
    		clrf	Tmp
    		call	TMRStart		;beide Timer starten
    		return
    AClr		clrf	A0			;Register A löschen
    		clrf	A1
    		clrf	A2
    		clrf	A3
    		return
    TMRStart	clrf	TMR0			;TMR0 und Prescaler löschen
    		movlw	30			;Timer1 konfigurieren
    		movwf	T1CON			;(Psc=8) und laden
    		movlw	7B			;berechneter Wert: TMR1H=7Ch
    		movwf	TMR1H
    		movlw	0xF8			;berechneter Wert: TMR1L=0
    		movwf	TMR1L
    		bsf	_RP0			;start Timer0
    		movf	TRISA,0
    		iorlw	10
    		movwf	TRISA			;TOCKI Pin (A4)als Eingang
    		bcf	_RP0
    		bsf	T1CON,TMR1ON		;start Timer1
    		return
    Hex_Dec 	call	DClr			;Hex>A, D>Dec
    		movlw	1
    		movwf	C0
    		movlw	20			;32 bit Hex > 32 bit Dec (8 Stellen)
    		movwf	HTmp
    		btfsc	A0,0
    		call	AddDC
    		call	CopyCB
    		call	AddCB
    		call	ARotRb
    		decfsz	HTmp,1
    		goto	$-6
    		return
    DClr		clrf	D0
    		clrf	D1
    		clrf	D2
    		clrf	D3
    		clrf	C0
    		clrf	C1
    		clrf	C2
    		clrf	C3
     		return
    CopyCB		movf	C0,0
    		movwf	B0
    		movf	C1,0
    		movwf	B1
    		movf	C2,0
    		movwf	B2
    		movf	C3,0
    		movwf	B3
    		return
    AddCB		movlw	B0			;C+B>C
    		movwf	FSR
    		goto	AddR
    AddDC		movlw	C0			;D+C>D
    		movwf	FSR
    AddR		bcf	_Ferr			;Addiere zwei Register
    		bcf	_Fcrp
    		movlw	4			;X=4 Bytes lang
    		movwf	ATmp
    		bcf	_Fdca
    		bcf	_Fcra
    		movf	INDF,0
    		movwf	RTmp
    		movlw	4			;X=4 
    		addwf	FSR,1
    		btfss	_Fcrp
    		goto	$+4
    		movlw	1
    		addwf	INDF,1
    		call	DecCor
    		movf	RTmp,0
    		addwf	INDF,1
    		call	DecCor
    		btfss	_Fdca
    		goto	$+3
    		movlw	6
    		addwf	INDF,1
    		btfss	_Fcra
    		goto	$+5
    		movlw	60
    		addwf	INDF,1
    		btfsc	_C
    		bsf	_Fcra
    		movf	INDF,0
    		andlw	0xF0
    		sublw	0xA0
    		btfss	_Z
    		goto	$+6
    		movf	INDF,0
    		andlw	0x0F
    		clrf	INDF
    		addwf	INDF,1
    		bsf	_Fcra
    		bcf	_Fcrp
    		btfsc	_Fcra
    		bsf	_Fcrp
    		movlw	5			;X+1=5
    		subwf	FSR,1
    		decfsz	ATmp,1
    		goto	$-28
    		btfsc	_Fcra
    		bsf	_Ferr
    		return
    DecCor		btfsc	_DC			;dezimale Korrektur (equ "DAW" bei PIC18FXXX)
    		bsf	_Fdca
    		btfsc	_C
    		bsf	_Fcra
    		movf	INDF,0
    		andlw	0F
    		sublw	9
    		btfss	_C
    		bsf	_Fdca
    		movf	INDF,0
    		andlw	0xF0
    		sublw	90
    		btfss	_C
    		bsf	_Fcra
    		return
    ARotRb		movlw	A3			;rotiere A Register 1 Bit rechts
    		movwf	FSR			
    RRotRb		movlw	4			;rotiere X=4 Bytes
    		movwf	ATmp
    		bcf	_Fcrp
    		btfsc	A0,0
    		bsf	_Fcrp
    		bcf	_Fcra
    		btfsc	INDF,0
    		bsf	_Fcra
    		bcf	_C
    		btfsc	_Fcrp
    		bsf	_C
    		rrf	INDF,1
    		bcf	_Fcrp
    		btfsc	_Fcra
    		bsf	_Fcrp
    		incf	FSR,1
    		decfsz	ATmp,1
    		goto	$-0C			;RRotRbL
    		return
    Geändert von PICture (02.12.2014 um 16:46 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress