@ Michael Köhler
Dabei habe ich mir gar nichts gedacht sondern nur vergessen die zweite
Wartesequenz zu ändern.
Ich habe jetzt beide abschnitte in
1 | while (ADCSRA & (1<<ADSC))//Warte bis die Messung abgeschlossen ist
|
2 | {
|
3 | }
|
geändert.
Es tut miraußerdem leid, dass ich jedes mal vergesse diese Zuweisung zu
ändern.
->geändert in
1 | DDRA = 0b00000000;
|
2 | DDRB = 0b11111111;
|
Ich hoffe sie ist jetzt richtig
Bezüglich ADC und ADCW ist kein unterschied, denn im iom16.h File steht:
1 | /* Combine ADCL and ADCH */
|
2 | #ifndef __ASSEMBLER__
|
3 | #define ADC _SFR_IO16(0x04)
|
4 | #endif
|
5 | #define ADCW _SFR_IO16(0x04)
|
6 | #define ADCL _SFR_IO8(0x04)
|
7 | #define ADCH _SFR_IO8(0x05)
|
Soweit ich mir das angesehen habe bedeutet das, dass ADC funktioniert,
wenn es nicht im Assembler Code geschrieben ist, ADCW aber immer
funktioniert.
oder liege ich da falsch???
Die LED funktioniert einwandfrei, denn ich habe jetzt eine Sequenz in
mein Programm eingefügt, bei der jedes mal, wenn das System einen Reset
erfährt einmal kurz hoch- und runter- dimmt(Ich habe die LED richtig
herum eingebaut ;-) )
1 | //Testen ob LED funktioniert
|
2 | for (int x = 0;x<=255;x++)//Max: 255
|
3 | {
|
4 | OCR0 = x;
|
5 | _delay_ms(5);
|
6 | }
|
7 |
|
8 | for (int x = 255;x>=0;x--)//Max: 255
|
9 | {
|
10 | OCR0 = x;
|
11 | _delay_ms(5);
|
12 | }
|
Damit ist das überprüfen mittels Oszi überflüssig und bewiesen, dass der
PWM-ausgang funktioniert.
Ich lasse das ADC Ergebnis jetzt auch durch vier teilen (,weil wie du
richtig bemerkt hast der PWM-Mode nur 255 schaltstufen kennt der ADC
aber 1024 werte ausgibt)
1 | //Hauptschleife (hoffentlich selbsterklärend[funktion wie Dummy Conversation])
|
2 | while(1)
|
3 | {
|
4 | x=0;
|
5 | ADCSRA |=(1<<ADSC);
|
6 | while(ADCSRA & (1<<ADSC))
|
7 | {
|
8 | }
|
9 | x=ADCW; //Zuordnung des ADC wertes an x
|
10 | x /= 4;
|
11 | OCR0 =x;//Übernahme des x Wertes von OCR0
|
12 | }
|
Ich hoffe, dass das genügend Infos waren, dass Ihr mir helfen könnt,
denn es funktioniert leider immer noch nicht.
Lg MP