Hallo Jungs (und Mädels [gibt es die hier überhaupt?]), ich habe ein Problem mit meinem Programm auf einem AVR µC. Ich habe am Eingang eine Blinkspannung (300ms on, 300ms off) mit einer Lampe/LED am Ausgang. Sobald die Lampe an ist( Interrupt bei positiver Flanke am Eingang), messe ich an einem weiteren Analogeingang die Blinkspannung (über ADC, Taktfrequenz 125kHz). Sobald die Spannung unter 2V fällt (während off) soll die Lampe am Ausgang ausgehen. Als Resultat hätte ich gerne kontinuierliches Blinken, jedoch setzt das Blinken schonmal aus und ich habe unregelmäßiges Blinken. Ich habe schon folgendes versucht: * Spannung variiert um zu sehen ob der Vergleichswert 2V richtig ist -> funktioniert * Anstatt Spannungsmessung: feste Zeit eingestellt um die Lampe auszuschalten (100ms, 500 ms) -> funktioniert * Sobald ich die Spannungsmessung über ADC "dazu schalte" funktionierts nicht mehr.
1 | uint16_t Messung(uint8_t kanal) |
2 | {
|
3 | aus Tutorial AVR_GCC ADC |
4 | Taktfrequenz 125kHz |
5 | |
6 | Dummy-Readout |
7 | |
8 | Messung (4mal) mit Mittelwertbildung |
9 | |
10 | return mittelwert |
11 | }
|
12 | |
13 | void main(void){ |
14 | [...]
|
15 | if (Blinker == ein) // Wenn Blinker eingeschalten ist |
16 | { // abgefragt über Interrupt |
17 | timer_init(); // Timer initialisieren und starten |
18 | LED = on; // LED/Lampe einschalten |
19 | }
|
20 | //if (t0_zaehler >= Zeit_100ms) // Versuch über Zeit --> geht
|
21 | // LED = off;
|
22 | |
23 | if ( Messung(2) < Spg_2V ) // Wenn Blink-Spannung kleiner 2 Volt |
24 | {
|
25 | Blinker = aus; |
26 | TCCR0B = 0x00; // Timer anhalten |
27 | t0_zaehler = 0; // Zaehler zuruecksetzen |
28 | }
|
29 | [...]
|
Hat da jemand ne Idee?