Ich spiel grad ein wenig mit oben genannten PIC rum. Aber scheinbar hab
ich da was übersehen.
Ich beschäftige mich derzeit mit dem ADC.
Folgendes hab ich dazu geschrieben:
1 | //Config in MPLAB einstellen, Programm geht von einem 20 MHz-Quarz aus
|
2 |
|
3 | #pragma chip PIC18F2455
|
4 |
|
5 | #pragma bit Channel @ ADCON0.2 //AD-Wandler 0: AN0
|
6 | // 1: AN1
|
7 | #pragma bit ADC_ON @ ADCON0.0 //ADC Wandler ein: 1
|
8 | // Wandler aus: 0
|
9 | #pragma bit ADC_GO @ ADCON0.1 //ADC Wandlung starten: 1
|
10 | // Wandlung fertig: 0
|
11 |
|
12 | void main(void)
|
13 | {
|
14 | //Wandler Voreinstellungen
|
15 | ADCON0 = 0b00000000; //Preset:AN0, Wandler aus, Wandlung fertig
|
16 | ADCON1 = 0b00001110; //AN0 aktiv, alle anderen sind digitale IOs
|
17 | ADCON2 = 0b00010101; //TAD-Einstellung für 20 MHz, vgl. Datenblatt
|
18 | //Comperator aus
|
19 | CMCON = 7;
|
20 | //Ports Konfigurieren
|
21 | LATA = 0;
|
22 | TRISA = 0b00000101; //RA0,RA2: Inputs, other Outputs
|
23 | LATB = 0;
|
24 | TRISB = 0b00000000; //Test ADC-Anzeige
|
25 | LATC = 0;
|
26 | TRISC = 0b00000000; //
|
27 |
|
28 | ADC_ON = 1;
|
29 |
|
30 | while(PORTA.2 == 0)
|
31 | {
|
32 | Channel = 0;
|
33 | ADC_GO = 1;
|
34 | while(ADC_GO);
|
35 | LATB = ADRESH;
|
36 | }
|
37 |
|
38 | }
|
An RA0 ist der Schleifer eines Potis, welches zwischen Vdd und Vss
hängt, an RA2 ist ein Widerstand gegen Vss und über einen Schalter kann
man Vdd auf RA2 schalten. An Port B ist von jedem Pin über einen
Widerstand zu Vss eine Diode angeschlossen.
Solange also an Port A Pin 2 Masse liegt soll der PIC lustig die
Spannung vom Schleifer digitalisieren und das Highbyte an Port B
ausgeben.
Problem ist, dass RB5 nix macht, das bleibt unabhägig von der
Schleiferposition immer auf Low (wodurch dann auch die LED dunkel
bleibt). Ich hab das Datenblatt jetzt schon ein paar mal durchgesehen
aber ich bin scheinbar blind oder um diese Uhrzeit nicht mehr so
auffassungsfähig wie ich sein sollte. Was muss ich noch einstellen, dass
Port B Pin 5 auch high werden darf/kann?