www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA16 Rechteckgenerator 0-500Hz


Autor: Man S. (flecko)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <avr/io.h>                            
#include <stdint.h>                            
#include <stdlib.h>
#include <util/delay.h>

uint16_t Analogwert;           //Analogwert als Longinteger 

int main (void)
{  
  DDRA  = 0b00000000;         //A Eingang
  DDRB  = 0b11111111;      //7Segment Ausgang
  DDRD  = 0b11111111;         //Port D  Motor

  PORTD = (1<<PD7) | (1<<PD6) | (0<<PD3) | (0<<PD1) | (1<<PD0); //Motoransteuerung Enable
  
TCCR1A = (1<<COM1A0); // toggle pin
TCCR1B = (1<<WGM12) | (1<<CS12) | (0<<CS11)| (1<<CS10); // CTC / 256

    while(1)
    { 
    ADMUX = 0b01000010; //AVCC,  Input PA2

    ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);  //Enable,  Prescaler 64
    
            Analogwert = ADCW; 
      
        while (bit_is_set(ADCSRA,6))  
    {
    ;
    }
    OCR1A = Analogwert;
    }
}
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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
     Analogwert = ADCW; 
     while (bit_is_set(ADCSRA,6))  
    {
    ;
    }

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.