www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [PIC] 18F46K20 A/D Wandler Problem


Autor: Andreas Riegebauer (blackpuma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum!

Ich habe ein Problem bei meinem PIC. Ich verwende einen PIC18F46K20 und 
möchte die Spannung an Kanal 5 messen. Es liegt eine Spannung von 1,29V 
an. Leider misst mein Controller irgendwas. Kann mir jemand sagen was 
ich beachten muss bzw. was an meinem Programm falsch ist.
/** I N C L U D E S ********************************/
#include <p18f46K20.h>
#include <usart.h>
#include <adc.h>
#include <delays.h>
#include <stdlib.h>

/** Configuration Word ******************************
 *
 * PIC18F46K20 mit externem Quarz.
 *
 */
        #pragma config FOSC     = HS
        #pragma config FCMEN    = OFF
        #pragma config IESO     = OFF
        #pragma config PWRT     = OFF
  #pragma config BOREN  = OFF
        #pragma config BORV     = 30
        #pragma config WDTEN  = OFF
        #pragma config WDTPS    = 32768
        #pragma config MCLRE    = ON
        #pragma config LPT1OSC  = OFF
        #pragma config PBADEN   = OFF
//      #pragma config CCP2MX   = ON
        #pragma config STVREN   = ON
        #pragma config LVP      = OFF
//      #pragma config ICPRT    = OFF       // Dedicated In-CircuitDebug/Programming
        #pragma config XINST    = OFF       // Extended Instruction Set
        #pragma config CP0      = OFF
        #pragma config CP1      = OFF
//      #pragma config CP2      = OFF
//      #pragma config CP3      = OFF
        #pragma config CPB      = OFF
//      #pragma config CPD      = OFF
        #pragma config WRT0     = OFF
        #pragma config WRT1     = OFF
//      #pragma config WRT2     = OFF
//      #pragma config WRT3     = OFF
        #pragma config WRTB     = OFF       // Boot Block Write Protection
        #pragma config WRTC     = OFF
//      #pragma config WRTD     = OFF
        #pragma config EBTR0    = OFF
        #pragma config EBTR1    = OFF
//      #pragma config EBTR2    = OFF
//      #pragma config EBTR3    = OFF
        #pragma config EBTRB    = OFF

/** D E C L A R A T I O N S ********************/
#pragma code

/** F U N C T I O N S **************************/

// **********************************************
//
// Hauptprogramm
//
// **********************************************
void main()
{
  char str[20];

//Einstellen der Ports
// 0 = Output
// 1 = Input
TRISD = 0x0F; // PORT D
TRISC = 0x00; // PORT C Ausgang

// USART Einstellen
OpenUSART(  USART_TX_INT_OFF &
      USART_RX_INT_OFF &
      USART_ASYNCH_MODE &
      USART_EIGHT_BIT &
      USART_CONT_RX &
      USART_BRGH_LOW, 18 );

// ADC Einstellen
OpenADC( ADC_FOSC_32    &
         ADC_RIGHT_JUST &
         ADC_12_TAD,
         ADC_CH5        &
         ADC_INT_OFF, 15 );

while(1) {

  // Nur ausführen wenn Taster gedrückt wird.
  if( PORTDbits.RD0 == 0 )
  {
    SetChanADC( ADC_CH5 );

    Delay10TCYx( 5 );
    ConvertADC();
    while( BusyADC() );        // Warten bis A/D Wandler fertig ist.

    ultoa( ADRESH, str );
    putsUSART( str );
    while( BusyUSART() );
    ultoa( ADRESL, str );
    putsUSART( str );
    while( BusyUSART() );
    WriteUSART( 0x0D );        // Zeilenanfang
    while( BusyUSART() );
    WriteUSART( 0x0A );        // Neue Zeile
    while( BusyUSART() );

    while( PORTDbits.RD0 == 0);   // Erst weiter wenn Taste Losgelassen wird.
    Delay10TCYx( 5 );         // Entprellen
    PORTDbits.RD7 ^= 1;
  }
}

// Programmende
}

BG
Andreas

Autor: Andreas Riegebauer (blackpuma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe gestern Abend noch ein wenig herum probiert aber ich bin auf 
keine Lösung gekommen. Bei openADC habe ich die 15 durch die 32 ersetzt. 
Jetzt ist AN5 als Analoger Eingang konfiguriert. Ich "messe", wenn das 
überhaupt ein Messergebnis ist, noch immer den selben Wert.

Wo liegt der Fehler?

BG
Andreas

Autor: Andreas Riegebauer (blackpuma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler gefunden!

Laut Datenblatt sollen die Referenzspannungen nach einem Reset auf VSS 
und VDD liegen. Bei mir ist es aber so das sie auf den 
Referenzspannungspins liegen. Komische sache.

BG
Andreas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.