Forum: Mikrocontroller und Digitale Elektronik ADC Wandlung PIC24FJ128 die Zweite.


von Chris (Gast)


Lesenswert?

Hallo,

letztes mal konntet ihr mir mit der ADC Wandlung gut helfen, so weit hat 
bis her alles gut funktioniert.

Allerdings habe ich jetzt ein Phänomen, dass ich nicht erklären kann 
bzw. in den Griff bekomme.

Ich hab an den Pins 28 und 29 des PIC24FJ128 jeweils eine Spannung 
anliegen - mit dem Multimeter geprüft.

Pin 29 (AN14) - also Channel 14 kann ich mit folgender 
selbstgeschriebenen Routine ohne Probleme wandeln (ADC_Read()):
1
#include <p24FJ128GA006.h>
2
#include "adc.h"
3
4
5
void ADC_Init(void)
6
{
7
8
  _ADON = 1; // AD Wanlder einschalten
9
  _VCFG = 0b001;  // Nutze +VRef als Referenz
10
  _ADRC = 0;  //Nutze SystemClock
11
  // Set analoge Eingänge als Input
12
  _TRISB2 = 1; 
13
  _TRISB3 = 1;
14
  _TRISB4 = 1;
15
  _TRISB5 = 1;
16
  _TRISB8 = 1;
17
  _TRISB9 = 1;
18
  _TRISB10 = 1;
19
  _TRISB11 = 1;
20
  _TRISB12 = 1;
21
  _TRISB13 = 1;
22
  _TRISB14 = 1;
23
  _TRISB15 = 1;
24
  // Setzte Analoge Eingänge auf Analog
25
  _PCFG2 = 0; 
26
  _PCFG3 = 0;
27
  _PCFG4 = 0;
28
  _PCFG5 = 0;
29
  _PCFG8 = 0;
30
  _PCFG9 = 0;
31
  _PCFG10 = 0;
32
  _PCFG11 = 0;
33
  _PCFG12 = 0;
34
  _PCFG13 = 0;
35
  _PCFG14 = 0;
36
  _PCFG15 = 0;
37
_SSRC = 0b000; // Manual Conversation
38
_ASAM = 0; // Auto Sampling off
39
_CSCNA = 0; // Select Channel manualy
40
_CH0NA = 0; // VSS is Negative Input
41
_SAMP = 1; // S/H Mode
42
_ALTS = 0; // Use MUX A
43
_SAMC = 0b00010; // Zeit (Anzahl Clock cycles) zwischen Sample und Conversion
44
_ADCS = 0b00000001; // 2xTCY
45
_CH0SA = 0b00101; // Channel 5 ADC Wandlung
46
47
48
}
49
50
51
unsigned int ADC_Read(unsigned int channel)
52
{
53
  _CH0SA = channel; // Channel zuweisen
54
55
  // Starte Sampling
56
  _SAMP = 1; // Starte Sampling
57
  _delay_us(100); // Warte Sample Time
58
  _SAMP = 0; // Beende Sampling und Starte Convertion
59
60
  while (!_DONE); // Warte hier bis Convertion Done
61
62
  return ADC1BUF0;
63
}

Bei Channel 13 allerdings, Pin 28 (AN13) bekomme ich immer 0 als 
Ergebnis - ich nutze die selbe Routine und das Multimeter zeigt die 
Spannung an, die am Pin wirklich anliegt.

Wie kann das sein?
Kann so ein Eingang beim Einlöten zerstört werden? Ich habe mit einer 
Dampfphasenlötanlage die Teile aufgelötet und musste am IC an dieser 
stelle nur 2 kleine Lötbrücken entfernen, also eig. nicht kritisch in 
meinen Augen.

Hat jemand eine Idee?

Dank und Gruß
Chris

von Chris (Gast)


Lesenswert?

Oh man - hab den Fehler gefunden!! AN13-AN10 sind auch die 4 Wire JTAG 
Schnittstelle - die war aktiviert und damit ging der ADC auf diesen 
Kanälen nicht!

Also wer alle ADC kanäle beim PIC24F128 nutzen will sollte JTAG 
ausschalten!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.