ATMEGA16 Rechteckgenerator 0-500Hz

OP #1193064
Lesenswert?
• ▲
▼
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
Gast #1193097
Lesenswert?
• ▲
▼
1
     Analogwert = ADCW; 
2
     while (bit_is_set(ADCSRA,6))  
3
    {
4
    ;
5
    }

ist die falsche Reihenfolge. Erst warten, dann lesen.

Dann gibt es noch ein Problem:

Wenn du einen kleineren Wert in OCR1A schreibst, als vorher drin stand, 
kann es passieren, daß der Timer da schon "vorbei" ist, und dann bis zum 
Überlauf einmal rundläuft.

Oliver

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.