Hallo zusammen,
ich schreibe gerade ein kleines Programm für ein Projekt in der
Technikerschule. Und zwar muss ich mit einem Atmega32 8 Analoge Eingänge
abfragen. Das ist auch kein Problem. Ich habe in einer for-Schleife
einen AnalogDigitalwandler aufgerufen der den Wert des jeweiligen
Eingang in ein Array "Fach[]" schreibt. Jetzt möchte ich in einer
weiteren for-Schleife die Ausgänge in Port D setzen wenn der Wert
innerhalb einer Toleranz liegt. Also wenn Fach[1] kleiner 800 und größer
500 dann setze PortD 1. Der Code sieht bisher so aus:
1 | void ADC_init(void)
|
2 | {
|
3 | uint16_t result;
|
4 |
|
5 | ADMUX = (1<<REFS1) | (1<<REFS1);
|
6 | ADCSRA = (1<<ADPS1) | (1<<ADPS0);
|
7 | ADCSRA |= (1<<ADEN);
|
8 |
|
9 | ADCSRA |= (1<<ADSC);
|
10 | while(ADCSRA & (1<<ADSC)){}
|
11 | result = ADCW;
|
12 | }
|
13 |
|
14 | uint16_t ADC_Read (uint8_t channel)
|
15 | {
|
16 | ADMUX = (ADMUX & ~(0x1f)) | (channel & 0x1f);
|
17 | ADCSRA |= (1<<ADSC);
|
18 | while (ADCSRA & (1<<ADSC)){}
|
19 | return ADCW;
|
20 | }
|
21 |
|
22 | int main(void)
|
23 | {
|
24 | int i;
|
25 | uint16_t Fach[8];
|
26 | for (i=0; i<7; i++)
|
27 | {
|
28 | ADC_Read(i);
|
29 | Fach[i] = ADCW;
|
30 | }
|
31 |
|
32 | for (i=0; i<7; i++)
|
33 | {
|
34 | if (Fach[i] < 800)
|
35 | {
|
36 | if (Fach[i] > 500 )
|
37 | {
|
38 | PORTC |= (1<<PD[i]);
|
39 | }
|
40 | }
|
41 | else
|
42 | {
|
43 | PORTC &= ~(1<<PD[i]);
|
44 | }
|
45 | }
|
46 | }
|
Ich müsste jetzt wissen wie der Syntax ist um PortD[i] zu setzen. So
nimmt AVR-Studio das Programm nicht an.
Schonmal danke im voraus.