Hallo!
Ich möchte gerne den Wert den ich per ADC Eingang einlese an den PWM
Ausgang
(PD5) ausgeben, doch es klappt nicht. Hab ich irgendwo einen denkfehler?
Oder kann ich den "int messwert;" in der (while) nicht einfach so auf
den OCR1 übergeben?
Hier der Code
1 | #include <avr/io.h>
|
2 | #define F_CPU 8000000UL
|
3 |
|
4 |
|
5 | int messwert;
|
6 |
|
7 | ISR(ADC_vect)
|
8 | {
|
9 | // Wert im ADCH in "messwert" ausgeben
|
10 | messwert = ADCH;
|
11 |
|
12 |
|
13 | }
|
14 |
|
15 |
|
16 | int main(void)
|
17 | {
|
18 | // *** PWM-Ausgang festlegen ***
|
19 | // OCR1A-Ausgang (PD5)
|
20 | DDRD |= (1<<PD5);
|
21 |
|
22 |
|
23 | // *** PWM konfigurieren ***
|
24 | // -- Max-Wert festlegen
|
25 | TCCR1A |= (1<<WGM10); // (OFF = 255)
|
26 |
|
27 | // -- Zählergeschwindigkeit festlegen
|
28 | TCCR1B |= (1<<CS11); // CK/8 = 1MHz
|
29 |
|
30 | // -- Impulslage festlegen
|
31 | TCCR1A |= (1<<COM1A1); // Impuls am Anfang
|
32 |
|
33 | // *** Impuls einstellen ***
|
34 | OCR1A = 0;
|
35 |
|
36 |
|
37 |
|
38 |
|
39 | //PA0-PA7 als ADC-Eingang
|
40 | DDRA = 0b00000000;
|
41 |
|
42 | // ADC für ADC5-Eingang Konfiguration
|
43 | ADMUX = (1<<ADLAR) | (1<<MUX2) | (1<<MUX0); //ADC5
|
44 |
|
45 | // ADC einschalten
|
46 | // Free-Running-Mode (d.h. kontinuierlich messen)
|
47 | // Verwendung von Interrupts
|
48 | // Prescaler = 64 (d.h. schnelle Messung)
|
49 | ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADATE);
|
50 | ADCSRA |= (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1);
|
51 |
|
52 |
|
53 |
|
54 | while(1)
|
55 | {
|
56 | OCR1A = messwert;
|
57 | }
|
58 | }
|