Hallo, ich kämpfe seit einiger zeit mit einem PIC16F690 und den AD Ports AN8 bis AN11. Ich bekomme die einfach nicht als Analog IN geschaltet. Mit den Ports AN0..AN7 geht es ohne Probleme. Aufgefallen war es mir, als in der Schaltung der AN8 und AN9 einfach nicht das erwartete Ergebnis lieferte. Am Pin liegt allerdings die analoge Spannung an. Also Verdrahtung ausgeschlossen. Ich habe dann mal den Simulator bemüht und mir die I/O Pins angesehen. Dabei habe ich festgestellt, die stehen anstatt auf Ain immer auf Din. Nun habe ich ein kleines C Programm geschrieben um das mal zu testen, komme aber nicht dahinter. AN8..AN11 müssten doch über ANSELH gesteuert werden. Egal was ich da eintrage, nix ändert sich. Bei den unteren AD Ports geht es wie gewünscht .... Hier der C-Code: #include <stdio.h> #include <stdlib.h> #include <xc.h> //Use this to include the device header for your PIC. #define _XTAL_FREQ 8000000 #pragma config FOSC=INTRCIO, WDTE=OFF, PWRTE=OFF, MCLRE=ON, BOREN=OFF, IESO=OFF, FCMEN=OFF /* * */ volatile unsigned int uart_data; int main(int argc, char** argv) { // // Basic Setup der HW // ANSEL = 0b11111111; ANSELH = 0b10001111; PORTA = 0; PORTB = 0; PORTC = 0; TRISC = 0b11111111; TRISB = 0b00110000; ADCON0bits.CHS0 = 0; ADCON0bits.CHS1 = 0; ADCON0bits.CHS2 = 0; ADCON0bits.CHS3 = 1; while(1) { __delay_ms(1000); } return (EXIT_SUCCESS); } Hat jemand eine Idee oder weiß was ich falsch mache? Vielen Dank, Georg
Georg Keller schrieb: > ANSELH = 0b10001111; Warum ist Bit 7 gesetzt? fchk
Ups. Ist nicht bewusst gesetzt. Ändert aber nix am Ergebnis da von ANSELH nur die unteren 4BIT genutzt werden.
Hallo, hab mal das Datenblatt angeschaut. Hast du möglicherweise das SPI oder/und UART aktiviert? Gruss picfan
Hallo, Hab ich auch schon vermutet. In der minimalen config habe ich es nicht verwendet bzw. nicht bewusst gesetzt. Im Datenblatt habe ich keine weiteren Register gefunden die gesetzt werden müssten. Viele Grüße Georg
Gast
#4141173
Falschen Pic eingestellt? Georg Keller schrieb: > Bei den unteren AD Ports geht es wie gewünscht ....
Hallo, Der eingestellte Typ ist korrekt, hab ich mehrfach geprüft. Gibt es jemanden, der es schon einmal mit einem 16F690 gemacht hat und einen der AD Ports die mit dem ANSELH Register selektiert werden zum laufen brachte? Gruß Georg
Gast
#4141462
Sieht alles gut und richtig aus. Zeig doch mal den Rest vom Code (wo das Adresult gelesen wird). Versuchsweise mal einen der Eingänge mit einen der funzt Brücken. Die müssen dann ja das gleiche Ergebnis haben (sonst Hardware böse).
Gast
#4141493
Deine Tristate ist leider inkorrekt. Die Analog Eingängen müssen als
EINGANG definiert sein.
FALSCH:
TRISC = 0b11111111;
TRISB = 0b00110000;
RICHTIG:
TRISC = 0b11111111;
TRISB = 0b00111111;
Gast
#4141497
Soory, Falsche PIC im kopf gehabt :-( deine TRIS einstellung seht richtig aus. Ist deine TRISA auch definiert?
Hallo,
so ich poste jetzt mal das Programm - zumindest die relevanten Teile:
Im Simulator habe ich den Breakpoint auf die "for
(kanal=0;kanal<=3;kanal++) {" Zeile gesetzt und dann ist der PORT Status
wie im Screenshot angehängt.
Vielleicht hilft das ....
Vielen Dank für die Mithilfe, Georg
Hier das Hauptprogramm:1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
und hier das File mit den HW Setup Routinen
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
und hier die RS232 Teile
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
und hier die AD Routinen
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
Gast
#4141686
Unabhängig von deine Kanal-problem (oder auch nicht) ist deine ADC benützung etwas unkonventionell. Standard wäre: Init: I/O pins einstellen. ADC einstellen/konfigurieren ADC einschalten und an LASSEN. in main: CH selektieren. (kurz warten: <100us) GO setzen auf /DONE warten. Werte aus ADRES lesen. In deine software wird die I/O pins und ADC register überall eingestellt bzw. geändert. Und der ADC wird ständig ein- bzw. ausgeschaltet. Macht mann normalerweise nicht. (über deine übermässige benützung von delays fange ich am besten nicht an). Viel glück noch.
Das hier in < float ADC_get_value(unsigned char ADC_channel) > macht
auch wenig Sinn:
> PIE1bits.SSPIE = 0;
Wird SPI irgendwo verwendet? Oder sollte an der Stelle etwas anderes
stehen?
Warum macht das keinen / wenig Sinn? SPI wird nicht verwendet. Ich wollte sicher sein das es def. ist.
Gast
#4142289
dies erklärt nicht warum es ab AN8 nicht geht, Folgendes fällt mir aber
auf:
1)
Das Pragma FOSC=INTRCIO sollte beim 16F690 lt. Datenblatt eigentlich
INTOSCIO heißen, oder ist INTRCIO im device file identisch definiert?
Oer nochmal gefragt: Richtiges device file ausgewählt?
2)
In "Hardware_basic_init" hat die Zuweisung zu OSCCON ein Bit zuviel. Wer
weiß was das anrichtet...
OSCCON = 0b011100000;
Gruß
Gast
#4142389
Georg Keller schrieb: > so ich poste jetzt mal das Programm - zumindest die relevanten Teile: Da schlage ich ein systematisches herangehen vor, erst einmal eingrenzen. Nimm nur die Teile die du brauchst und probiere es damit. In Pseudocode: 1. µP konfigurieren 2. A/D konfigurieren 3. Kanal einstellen 4. Wandlung starten 5. Wandlungszeit abwarten. 6. Ergebnis lesen 7. An den Uart senden. Bei dieser Herangehensweise entsteht über kurz oder lang ein getestetes Gerüst der Grundfunktionen. Die erweiterst du dann mit deinen Funktionen.
Hallo, hmmm, jetzt habe ich viele Hinweise bekommen und habe wohl erst noch ein wenig zu tun mit der Aufarbeitung. Zuerst einmal Danke an alle die sich die Zeit genommen haben hier bei meinem Problem zu helfen. Als Feedback möchte ich noch den Hinweis aus dem Microchip Forum mit geben, hier schreibt mir jemand das die IO-PIN Simulation im MPLABx für den 16F690 defekt ist - ups. Er hat es auf dem Demo Board nachgestellt und hat im Assembler die Ports wie gewünscht ansprechen können. http://www.microchip.com/forums/tm.aspx?tree=true&m=866212&mpage=1 Für mich ist es gut und schlecht ;-) Jetzt weiß ich das es vermutlich doch geht, weiß auch das ich generell und grundsätzlich nichts falsch mache. Schlecht ist, auf meiner HW geht AN8..AN11 nicht, obwohl am Pin AN8 die analoge Spannung anliegt. Vielleicht werde ich es noch mit einem anderen uC testen (16F1829) der auch so noch ein paar Vorteile für mein Vorhaben mit sich bringt und dann auch die hier angemerkten Punkte in der Software berücksichtigen. Viele Grüße, Georg
Gast
#4143351
Georg Keller schrieb: > Als Feedback möchte ich noch den Hinweis aus dem Microchip Forum mit > geben, hier schreibt mir jemand das die IO-PIN Simulation im MPLABx für > den 16F690 defekt ist Wundert mich bei Mplab gar nicht. Die Idee alle Produkte einer Firma unter einer Haube zu verwursten halte ich schlicht für falsch. Nach meiner Erfahrung läuft das z.B. bei MikroE Compilern (bin weder verwandt noch verschwägert) deutlich besser. Unter anderem weil da eine Produktreihe auch eine IDE hat. > Vielleicht werde ich es noch mit einem anderen uC testen Sollten Indizien darauf hinweisen das evtl. Probleme vor dem Monitor sitzen könnten ist es besser diese als erstes zu lösen. Zumal der ganze Aufbau schon vorhanden ist. Isoliere das Problem wie oben beschrieben. Wenn es dann immer noch nicht funzt liegt es evtl. an was anderem als dem TE. Den Chip gibt es schon länger, in den Erratas steht auch nichts in der Richtung und so ein Fehler wäre aufgefallen (zumindest jedem außerhalb der MPlAB Abteilung bei Microchip).
Gast
#4143725
X4U schrieb: > Den Chip gibt es schon > länger, in den Erratas steht auch nichts in der Richtung und so ein > Fehler wäre aufgefallen Das sehe ich genauso. Die analogen Ports beim 16f690 funktionieren auch anstandslos -habe u.a. in einem Projekt mal AN10 verwendet, kann das also grundsätzlich bestätigen. Auch wenn ich das in Assembler gemacht habe im Prinzip genauso konfiguriert wie hier gezeigt. Ich würde mal vermuten, dass der Fehler irgendwo anders im Quelltext steckt, also woanders TRIS oder ANSEL überschrieben wird.
Hallo, ich kann die positive Rückmeldung geben, die Lösung ist gefunden. Der Controller ist kaputt. Ich habe einfach einmal auf Verdacht den Chip gewechselt und siehe da auf einmal klappt alles. Warum und wieso und was denn nun genau auf dem Ding kaputt ist weiß ich nicht aber der neue Baustein tut genau das was er soll. Da haben mir zwei Faktoren aber einen gewaltigen Streich gespielt. Zum einen der kaputte Controller und zum anderen der Simulator, der einen ähnlichen bug hat. Dann kann es mit der Programmierung jetzt entsprechend weitergehen. An dieser Stelle noch einmal vielen Dank an alle die geholfen haben. Gruß, Georg
hallo freut mich für Dich, dass es nun geklappt hat. Hatte mit einem anderen PIC auch enorm Zeit verloren, bis ich endlich gemerkt hatte dass der Simulator von MPPLAB nicht das machte was er sollte. Falls die Spannungsquelle niederohmig war, die Du mit den drei Problem-Eingängen messen wolltest und die PORT's als Ausgänge geschaltet waren, hätte dies womöglich die jeweiligen PORT's beschädigt... freundliche Grüsse Jochen-Paul
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.

