Hallo,
ich möchte mit meinem Atmega16 ein Rechteck mit einstellbarer Frequenz
erzeugen. Dazu habe ich ein Poti an AD2 angeschlossen. Das ganze soll
später einen Schrittmotor regeln.
Quarz hat 16MHz.
1 | #include <avr/io.h>
|
2 | #include <stdint.h>
|
3 | #include <stdlib.h>
|
4 | #include <util/delay.h>
|
5 |
|
6 | uint16_t Analogwert; //Analogwert als Longinteger
|
7 |
|
8 | int main (void)
|
9 | {
|
10 | DDRA = 0b00000000; //A Eingang
|
11 | DDRB = 0b11111111; //7Segment Ausgang
|
12 | DDRD = 0b11111111; //Port D Motor
|
13 |
|
14 | PORTD = (1<<PD7) | (1<<PD6) | (0<<PD3) | (0<<PD1) | (1<<PD0); //Motoransteuerung Enable
|
15 |
|
16 | TCCR1A = (1<<COM1A0); // toggle pin
|
17 | TCCR1B = (1<<WGM12) | (1<<CS12) | (0<<CS11)| (1<<CS10); // CTC / 256
|
18 |
|
19 | while(1)
|
20 | {
|
21 | ADMUX = 0b01000010; //AVCC, Input PA2
|
22 |
|
23 | ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); //Enable, Prescaler 64
|
24 |
|
25 | Analogwert = ADCW;
|
26 |
|
27 | while (bit_is_set(ADCSRA,6))
|
28 | {
|
29 | ;
|
30 | }
|
31 | OCR1A = Analogwert;
|
32 | }
|
33 | }
|
Bei diesem Code erhalte ich ein Rechteck was auch variabel ist, jedoch
der Timer nicht richtig arbeitet. Das Rechteck am Ausgang ist mehr nach
Zufallsprinzip. Zum Teil kommt auch gar nichts. Im PWM Modus läuft alles
einwandfrei nur der hilft mir nicht weiter.
Kann mir hier jemand weiterhelfen?
Danke
Gruß Manuel