www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenz messen mit ATMEGA16


Autor: Raimund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ,

erst einaml vorne weg, dies ist eine sehr informative und Hilfreiche 
Homepage. Ich lese hier jetzt schon seit mehreren Jahren mit.
Nun zu meinem Problem.
Ich möchte eine Freuquenz mit einem ATMEGA 16 Messen und auf einem LCD - 
Display ausgeben.
Nur liegt die von mir Gemessene Freuquenz immer etwas daneben.
Wenn ich 100 Hz Anlege zeigt mir mein Display 69hex an was 105 dez 
entspricht.
Bei 1000 Hz 467hex bzw. 1127dez
Und bei 3000 Hz d49 bzw. 3401dez.

Hier ist der von mir verwendete Code:
#include "main.h"
#include "lcd_drv.h"
#include "avr/interrupt.h"
#include "util/delay.h"

volatile uint16_t freq_alt;
volatile uint16_t freq;
volatile uint16_t frequenz;

char buf[15];

ISR (TIMER1_CAPT_vect)
{
  freq_alt = freq;
  freq = ICR1;

  }


int main()
{


 lcd_init();

  lcd_pos( 0, 0 );
  lcd_text( (u8*)"TEST");


  TCCR1B |= (1<<ICNC1);
  TCCR1B |= (1<<ICES1);     // pos Flanke
  TCCR1B |= (1<<CS10);
  TIMSK  |= (1<<TICIE1);    //Input Capture enable




        ACSR |= (1<<ACO);
  ACSR |= (1<<ACI);     //komparaton an
  ACSR |= (1<<ACIC);    //Verbindung zu Timer1 Capture
  ACSR |= (1<<ACIS1);    //steigende Flanke */



  freq = 0;
  freq_alt = 0;


  sei();

  for(;;)
  {
    cli();
    frequenz = freq - freq_alt;
    sei();

   frequenz = 1000000/frequenz;



utoa( frequenz, buf, 15);

  lcd_init();

  lcd_pos( 0, 0 );
  lcd_text( (u8*)buf);

  }
}

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Hört sich ganz danach an, als würde der Mega16 mit dem internen Takt 
laufen. Der interne Takt ist (ohne Kalibrierung) äußerst ungenau.

Hänge mal ein Quarz oder einen Quarzoszillator dran, und stelle die 
Fuses so um, dass der Mega den Takt extern bezieht (dabei aufpassen und 
nicht aussperren :-)

Gruß
David

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Taktquelle benutzt du denn?

Autor: Raimund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke für die Antworten. Ich habs fast befürchtet das der Interne Takt 
etwas ungenau ist. Werde mal mit einem externen Quarz Takten.
Leider habe ich mir schon einen verfust.
Benutze Ponyprog.

Beim ATMEGA8 habe ich keine Probleme da nehm ich die CKSEL3 ,CKSEL2, 
CKSEL1 die Haken raus und setzten einen bei CKSEL0.

Leider hat das bei ATMEGA16 nicht funktioniert.
Benutze das Pollin Evalution Board.

Autor: Alexander Schmidt (esko) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Raimund schrieb:
> 100 Hz Anlege zeigt mir mein Display 69hex an was 105 dez entspricht.
5% Fehler
> Bei 1000 Hz 467hex bzw. 1127dez
12,7% Fehler
> Und bei 3000 Hz d49 bzw. 3401dez.
13,3% Fehler

Ergo muss der Fehler in der Software liegen.
Zusätzlich zum ungenauen internen Takt.
Habe das Programm mal überflogen aber den Fehler auch nicht gefunden.

Mit [ c ]C-Code[ /c ] kannst du den Code lesbarer machen.

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Raimund:

Falls noch aktuell - warum nimmst du nicht einfach einen "Fuse 
calculator" á la

http://www.engbedded.com/fusecalc

das macht die Fuse-Berechnungen einfacher. Dann muss man nur noch auf 
die Logik der Programmierer der Brennsoftware (was ist 1 / was ist 
programmiert / was ist "hakerl gesetzt"?) aufpassen.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Raimund schrieb:

> utoa( frequenz, buf, 15);

Vielleicht schreibst Du dort einfach 16 statt 15 rein (oder rechnest im 
15er-Zahlensystem um) ... :)

Manchmal hat man Tomaten auf den Augen, ich weiß.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hazeh Zimmerer schrieb:
> Raimund schrieb:
>
>> utoa( frequenz, buf, 15);
>
> Vielleicht schreibst Du dort einfach 16 statt 15 rein (oder rechnest im
> 15er-Zahlensystem um) ... :)
>
> Manchmal hat man Tomaten auf den Augen, ich weiß.

Wobei sich natürlich die Frage erhebt:
Seit mindestens 15 Jahren (ich weiß ja nicht wie alt er ist) ist er an 
Dezimalzahlen gewöhnt. Warum also nicht einfach 10?

Autor: Raimund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank,

das war der Fehler.


Allerdings kann ich meinen ATMEGA16 auf dem Pollin Board nicht mit 16 
MHZ laufen lassen.
Evtl. Board defekt.
Denn mit dem externen Takt von einem Quarzoszillator funktionierts ohne 
Probleme.

Autor: Peter R. (pnu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf meinem Board läuft ein 16MHz-Quarz, aber das kann bei etwas anderer 
Temperatur oder Exemplarstreuung schon anders aussehen.

16 MHZ macht der atmega8 erst dann sicher, wenn die CKOPT-fuse gesetzt 
ist. Dann schwingt der Oszillator des atmega auf Kosten der 
Stromersparnis auch bei schwierigeren Schwingbedingungen.

Autor: Raimund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles erledigt.
Der Quarz auf dem Pollin Board war defekt.
Alten Ausgelötet neuen rein und schon geht´s.

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.