Morgen zusammen!
Ich habe eine Frage zu meinem Programm.
Ich lese hier testweise eigentlich nur einen LTC2420 (20Bit-ADC) aus,
sonst macht das Programm grad nichts.
Jedoch ist die Laufzeit jedesmal unterschiedlich. Wie kann das sein,
bzw. woher kommt das? Ich kann mir das nicht erklären. Ich habe mal ein
Bild vom Oszi angehängt, sowie den entsprechenden Code.
Und nochwas - ist es OK, wenn ein ADC gut 150-160ms für eine Wandlung
braucht?
Bin für jede Antwort dankbar!
Hauptprogramm:
1 | while (1)
|
2 | {
|
3 | test = get_pressure_adc_value ();
|
4 | test *= -1; // Nur zum debuggen
|
5 | }
|
ADC-Wert lesen:
1 | int32_t get_pressure_adc_value (void)
|
2 | {
|
3 | uint8_t repeat;
|
4 | int32_t adc_result = 0;
|
5 |
|
6 | ADC_ENABLE; // Chip-Select auf 'low'
|
7 |
|
8 | while (ADC_CONV_IN_PROG) // Warten, dass Wandlung fertig
|
9 | {}
|
10 |
|
11 | LED_OUT |= LED_1; // <- HIER TEST-LED AN
|
12 |
|
13 | for (repeat = 0; repeat < 3; repeat++) // 3 Bytes empfangen
|
14 | {
|
15 | IFG2 &= ~UCB0RXIFG; // RX-IFG loeschen
|
16 | UCB0TXBUF = 0x00; // Daten senden, um zu empfangen
|
17 | while (!(IFG2 & UCB0RXIFG)) {} // Auf empf. Zeichen warten
|
18 | adc_result |= (uint8_t) UCB0RXBUF; // Daten in Variable speichern
|
19 |
|
20 | if (repeat < 2) // 2 Bit-Shifts ausfuehren
|
21 | {
|
22 | adc_result = (adc_result << 8); // Bit-Shift um 1 Byte
|
23 | }
|
24 | }
|
25 |
|
26 | LED_OUT &= ~LED_1; // <- HIER TEST-LED AUS
|
27 |
|
28 | ADC_DISABLE; // CS auf 'high'
|
29 |
|
30 | return adc_result; // Ergebnis zurueckgeben
|
31 | }
|