Redals1311
27.06.2008, 16:40
Habe eine frage,
Habe an einem Pic eine Sensorenspannung von 0 bis 5 V anliegen.
Diese muss ausgewertet werden.
Bei einer Reichweite von 10 cm gibt der Sensor eine Spannung von 5 V aus.
Nun möchte ich mit Hilfe des Pics 16f877, diese Spannung auswerten.
;************************************************* **********
;* Name : Datum: 05.03.2008 *
;* ------------ *
;* Funktion : sensor *
;* *
;* Autor : *
;************************************************* **********
LIST p=16F877 ; TAB - otherwise: unnecessary warning
#include <p16F877.inc>
;__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _LVP_OFF & _BODEN_OFF
__CONFIG 0x3F39
ERRORLEVEL -302
ADW_1 EQU 0x31
Initialisierung:
bsf STATUS,RP0
clrf TRISB
bsf TRISA,0
bcf STATUS,RP0
clrf PORTB
movlw B'00000000'
movwf ADCON1
Main_1
; ADC-Vorbereitungen:
; ADC einschalten
bsf ADCON0, 0 ; ADON=1
; ADC speed für (fosc/32) MHz einstellen
bsf ADCON0, 7 ; ADCS1=1
bcf ADCON0, 6 ; ADCS0=0
Haupt:
clrf PORTB
bcf PORTB,4
clrf ADW_1
bcf ADCON0, 5
bcf ADCON0, 4
bcf ADCON0, 3
call Verzögerung_100us
bsf ADCON0, 2
warte_auf_ADW:
btfsc ADCON0, 2
goto warte_auf_ADW
movf ADRESH,W
movwf ADW_1
movlw D'100'
subwf ADW_1,W
btfss STATUS,Z
goto Test
goto Haupt
Test
bsf PORTB,4
call Verzögerung_1s
call Verzögerung_1s
call Verzögerung_1s
;call Verzögerung_1s
;call Verzögerung_1s
goto Haupt
#include "VERZ/Verz_A.inc"
end
Bei diesem Code wird immer wieder das Zero Flag überprüft. Da sich die Spannung immer um ein paar mV veränder und nie konstant ist, ist das Zero flag auch nur einen kurzen Moment gesetzt.
es sollte aber länger gesetzt sein. damit an einem Portpin ein High signal ausgegeben werden kann
WIe kann ich das realisieren bzw. den code umstellen
Habe an einem Pic eine Sensorenspannung von 0 bis 5 V anliegen.
Diese muss ausgewertet werden.
Bei einer Reichweite von 10 cm gibt der Sensor eine Spannung von 5 V aus.
Nun möchte ich mit Hilfe des Pics 16f877, diese Spannung auswerten.
;************************************************* **********
;* Name : Datum: 05.03.2008 *
;* ------------ *
;* Funktion : sensor *
;* *
;* Autor : *
;************************************************* **********
LIST p=16F877 ; TAB - otherwise: unnecessary warning
#include <p16F877.inc>
;__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _LVP_OFF & _BODEN_OFF
__CONFIG 0x3F39
ERRORLEVEL -302
ADW_1 EQU 0x31
Initialisierung:
bsf STATUS,RP0
clrf TRISB
bsf TRISA,0
bcf STATUS,RP0
clrf PORTB
movlw B'00000000'
movwf ADCON1
Main_1
; ADC-Vorbereitungen:
; ADC einschalten
bsf ADCON0, 0 ; ADON=1
; ADC speed für (fosc/32) MHz einstellen
bsf ADCON0, 7 ; ADCS1=1
bcf ADCON0, 6 ; ADCS0=0
Haupt:
clrf PORTB
bcf PORTB,4
clrf ADW_1
bcf ADCON0, 5
bcf ADCON0, 4
bcf ADCON0, 3
call Verzögerung_100us
bsf ADCON0, 2
warte_auf_ADW:
btfsc ADCON0, 2
goto warte_auf_ADW
movf ADRESH,W
movwf ADW_1
movlw D'100'
subwf ADW_1,W
btfss STATUS,Z
goto Test
goto Haupt
Test
bsf PORTB,4
call Verzögerung_1s
call Verzögerung_1s
call Verzögerung_1s
;call Verzögerung_1s
;call Verzögerung_1s
goto Haupt
#include "VERZ/Verz_A.inc"
end
Bei diesem Code wird immer wieder das Zero Flag überprüft. Da sich die Spannung immer um ein paar mV veränder und nie konstant ist, ist das Zero flag auch nur einen kurzen Moment gesetzt.
es sollte aber länger gesetzt sein. damit an einem Portpin ein High signal ausgegeben werden kann
WIe kann ich das realisieren bzw. den code umstellen