- LiFePO4 Speicher Test         
Ergebnis 1 bis 2 von 2

Thema: Hilfe bei ADC Auswertung

  1. #1

    Hilfe bei ADC Auswertung

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    brauche dringend Hilfe bei einer ADC Auswertung beim PIC12F675.
    Das Programm ist für Ein Trennrelais zu schalten, wenn man im Auto 2 Batterien Betreiben will.
    Die Zweite Batterie Zoll zugeschaltet werden, wenn die Spannung am ADC über 1,38Volt steigt.
    Zuerst wird Die Spannung am ADC abgefragt, dann wird geschaut ob das Register „ADRESH“
    Größer 0x46 (1,38Volt ) , dann gegebenen Falls das Relais eingeschaltet/ausgeschaltet und Dann noch etwas gewartet.
    Mein Problem ist, das im Register ADRESH kein Wert steht (oder Falscher Wert),
    wo dran kann das Liegen?



    ;************************************************* ***********************************************
    ; File: TrennRelai.asm
    ; Vom 1.9.2007
    ; Vers. 1.0

    ;************************************************* ***********************************************
    list p=12F675
    #include P12F675.INC
    ; 4 MHZ Interner Tackt
    ;************************************************* ******************************
    ; Watch_Dog_Timer OFF, Interner Ozzilator an, MasterClear auf pin 4 Aktiv, usw.
    __config _INTRC_OSC_NOCLKOUT & _WDT_OFF &_MCLRE_OFF & _CP_OFF
    ;************************************************* ******************************
    ;Define GP5 als Piepser
    #define Starthilfe GPIO,0 ;IN ;ist derzeit noch abgeschaltet
    #define Reali GPIO,1 ;OUT
    #define LED GPIO,2 ;OUT
    #define ADCIN GPIO,5 ;IN ADC
    ;************************************************* ******************************
    ;EQU
    Zeit1 equ H'0020'
    Zeit2 equ H'0021'
    Zeit3 equ H'0022'
    ADCWERT equ H'0023'


    ;************************************************* ******************************
    ; Option Register
    bsf STATUS,RP0
    movlw 0x00
    movwf OPTION_REG
    bcf STATUS,RP0
    ;************************************************* ******************************
    ;I/O
    bsf STATUS,RP0
    movlw b'010001'
    movwf TRISIO
    bcf STATUS,RP0
    clrf GPIO ;Ausgang löschen
    ;************************************************* ******************************
    ;CMCON
    bcf STATUS,RP0
    movlw 0x07
    movwf CMCON
    ;************************************************* ******************************
    ;******************************Setzen der Register ANSEL und ADCON
    ;ADCON
    bcf STATUS,RP0

    BCF ADCON0, 0 ;ADC aus


    BSF ADCON0, 2 ;AN3 (GP4 Pin3)
    BSF ADCON0, 3

    BCF ADCON0, 6 ;Voltage Reference bit VDD=0

    BCF ADCON0, 7 ;A/D Result Formed Select bit, Daten linksbündig

    ;************************************************* ******************************
    ;ANSEL
    bsf STATUS,RP0

    BCF ANSEL, 0 ;AN3 ein
    BCF ANSEL, 1
    BCF ANSEL, 4
    BSF ANSEL, 3

    BSF ANSEL, 4 ;ADC Arbeitstackt festlegen (Bei 4 MHZ), 16 TOSC, ADCS2:ADCS0 101 (FOSC/16)
    BCF ANSEL, 5
    BSF ANSEL, 6
    bcf STATUS,RP0

    ;************************************************* ******************************
    ;Programm Start
    start
    call ADC
    call Relai
    call mainloop
    goto start

    ;************************************************* ******************************
    ;********************************************Subro utinen*************************
    ADC ;ADC Auswertung,wert in Register "ADRESH" und "ADRESL" gespeichert wird.
    BSF ADCON0, 1 ; ADC starten
    loop6
    BTFSC ADCON0, 1 ; ist der ADC fertig?
    GOTO loop6 ; nein, weiter warten
    ;OK ADC IST Fertig
    return
    ;************************************************* ***********************************************
    Relai ;Reali ein ?
    ;Das Relai einschalten bei einer spannung größer als 13,8V (ADC (Register ADRESH) größer als 0x46)

    ;2^10bit=1024, Uref 5V, 5V/1024=0,0048828125 Volt Pro Schritt,
    ;Spannungsvorteiler 1/10 bei 13,8V sind am ADC 1,38V, 13,8V/0,0048828125=282,624 (282)
    ;Relai Einschalten wenn Wert über 282, b'100011010' ==(8Bit ADRESH 1000110 (0x46))

    MOVF ADRESH,0 ;Kopiere ADRESH nach ADCWERT
    movwf ADCWERT

    ;Ziehe von ADCWERT 0x46 ab. Ist jetzt ein Unterlauf eingetreten war die Spannung unter 13,8V

    movlw 0x46
    subwf ADCWERT,1
    btfss STATUS,C ;Carry unterlauf 0?
    return

    BSF Reali
    return
    ;************************************************* ***********************************************
    ;Zeitschleife Groß, mehrere Minuten
    mainloop
    bsf LED ;LED Ein
    movlw 0xff
    movwf Zeit3
    LK movlw 0xff
    movwf Zeit2
    LX movlw 0xff ;Zählerstand von dem Runter gezählt wird.
    movwf Zeit1
    schleife
    clrwdt
    decfsz Zeit1
    goto schleife
    clrwdt
    decfsz Zeit2
    goto LX
    clrwdt
    decfsz Zeit3
    Goto LK
    bcf LED ;LED Aus
    return

    end

  2. #2
    Hat sich erledigt, habe vergessen im ADCON register den ADC einzuschalten.

Berechtigungen

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

12V Akku bauen