Hi,
ich hoffe das wird mein letzter Beitrag zu diesem Chip ;)
(Dank eurer Hilfe hat alles andere bestens funktioniert)
Es bleibt nur noch Pin Nr 3 (RA1) aus meinem Layout übrig, für welchen
ich noch keinen Code erzeugen konnte, der mich weiter Bringt.
Hier noch Mal das Layout aus meinem ersten Post:
http://www.mikrocontroller.net/attachment/171491/schematic_test.png
Wie man sieht, ist an diesem Pin entweder das MIC oder das Poti
angeschlossen.
Ziel soll es sein, im Falle des zugeschalteten MICs einen Takt zu
generieren und im Falle des zugeschalteten Potis ein Value darus zu
generieren.
Nun bin ich mir immer noch nicht sicher, was laut Layout an diesem Pin
anliegt!
Daher habe ich mich zuerst daran gemacht den Pin RA1 als AN1 (analog) zu
konfigurieren und auf den Interrupt des ADCs zu warten, in der Hoffnung,
dass dieser nur anspringt sobald das MIC einen entsprechenden Pegel
erreicht.
Doch der ADC gibt mir bei jeder Auswertung entweder 0 oder 1023 (max)
aus.
Für den Taktgeber wäre es ausreichend, doch in verbindung mit dem Poti
würde ich gerne etwas differenziertere Werte erhalten.
Hier der abgespeckte Code:
1 | void init_ADC(void)
|
2 | {
|
3 | ANSELAbits.ANSA1 = 1; //SPEED
|
4 | TRISA1 = 1; //SPEED
|
5 |
|
6 | ADCON0bits.ADON = 0;
|
7 | ADCON0bits.CHS = 0b00001; //AN1
|
8 | ADCON1bits.ADFM = 1; //Right justified. Six Most Significant bits of ADRESH are set to ?0?
|
9 | ADCON1bits.ADCS = 0b001; //FOSC/8 bei 8000000Hz
|
10 | ADCON1bits.ADNREF = 0;
|
11 | ADCON1bits.ADPREF = 0b00;
|
12 | ADCON0bits.ADON = 1;
|
13 | PIE1bits.ADIE = 1;
|
14 | // ADCON0bits.GO_nDONE = 1;
|
15 | }
|
16 |
|
17 |
|
18 | void interrupt ISR()
|
19 | {
|
20 | if (ADIE && ADIF)
|
21 | {//AN1 als Analog-Input Konfiguriert
|
22 | uint16_t analog = ((uint16_t) ADRESH) << 8;
|
23 | analog |= ADRESL;
|
24 | if(analog > 1000)//---BREAKPOINT--->analog=0 | analog =1023??
|
25 | next_fixColor(3,0);
|
26 | ADIF = 0;
|
27 | }
|
28 | }
|
Der Aufruf im laufenden Code lautet dann regelmäßig:
1 | ....
|
2 | if(DmxRxField[4]>150 && !GO_nDONE)
|
3 | ADCON0bits.GO_nDONE = 1;//next_fixColor_delay über ADC
|
4 | ...
|
http://www.mouser. com/ds/2/268/41364A-75942.pdf
(Kapitel 11)
Grüße Oekel
PS:Vollständigen Code unterscheidet sich nur durch diverse
Erweiterungen, die zur Zeit des Aufrufes von GO_nDONE nicht aktiv sind.
Was mache ich falsch?