PIC18 ADC liefert nur zwei Werte.

Gast #2779115
Lesenswert?
• ▲
▼
Hallo Leute.

Ich versuche gerade den umstieg auf PICs (bitte hierzu noch keine 
Kommentare).
Jetzt bin ich aber leider an einer Stelle angekommen, an der ich nicht 
mehr weiter weiß!

µC: PIC18F2550
Board: PICDEM 2 Plus
Programmer: ICD2
Takte: ext 4MHz Oszillator
Compiler: c18 (v3.40)
Library: MPLAB C18 Lib


Auf dem Board ist ein Poti am RA0/ANA0 angeschlossen.
Ich versuche den Wert des ADCs auszulesen und via USART auszugeben.

Der UART funktioniert auch so weit! Nur mein ADC liefert mir nur die 
Werte 0 oder 1023 (was ja das min bzw. max des darstellbaren Wertes 
darstellt)
Hat einer von euch einen heißen Tipp für mich?

Vielen Dank für eure Hilfe
Hansi
1
#include <p18f2550.h>
2
#include <delays.h>
3
#include <usart.h>
4
#include <stdio.h>
5
#include <stdlib.h>
6
#include <adc.h>
7

8
#pragma config FOSC=XT_XT
9
#pragma config PWRT=ON   //Power on timer
10
#pragma config BOR=OFF   //Brown out reset
11
#pragma config WDT=OFF   //Watchdog timer
12
#pragma config LVP=OFF   //Low voltage progr.
13
#pragma config MCLRE=ON  //Master clear reset
14

15
void delay_ms(int ms);
16
void INIT_IO(void);
17

18
void delay_ms(int ms)
19
{
20
  int z;
21
    for (z=1; z<ms; z++)
22
    {     
23
      Delay10TCYx(25);
24
    }
25
}
26

27
void INIT_IO(void)
28
{
29
  PORTA = 0x00;
30
  TRISA = 0x10;   //Port A Bit 4 = input
31
  PORTB = 0x00;
32
  TRISB = 0x00;  //Port B all Bits = Output
33
}
34

35
void main (void)
36
{
37
  int result;
38
  char temp_str[]="00000";
39
  
40
  INIT_IO();
41
  
42
  OpenUSART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 25);
43
  OpenADC( ADC_FOSC_2 & ADC_RIGHT_JUST & ADC_0_TAD, ADC_CH0 & ADC_INT_OFF,1);
44
  Delay10TCYx( 50 );     // Delay for 50TCY
45

46
    while (1)
47
  {
48
    if(!(PORTA & 0x10))
49
    {
50
      ConvertADC();
51
      while( BusyADC() );   // Wait for completion
52
        result = ReadADC();   // Read result
53
      itoa(result, temp_str);
54
      putrsUSART((const rom far char *)"\n\rADC");
55
      putsUSART(temp_str);
56
      while(!BusyUSART());      
57
    }
58
    else
59
    {
60
      delay_ms(1000);
61
      PORTBbits.RB3 = 1;
62
      delay_ms(1000);
63
      PORTBbits.RB3 = 0;
64
    }
65
  }
66
  CloseUSART();
67
  CloseADC();
68
}
Gast #2780169
Lesenswert?
• ▲
▼
Lies die Doku zum Chip gründlich. Du mußt sowohl die Portpins einstellen 
als auch die Register des ADC, dann geht das auch. Erwarte bitte nicht, 
daß sich hier alle Helfer durch deinen Quellcode durcharbeiten.

W.S.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.