mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzgenerator für Piezo-Speaker


Autor: Sir Sydom (sirsydom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin ganz neu was das Thema AVR (ATMega32) angeht und probiere 
einfach etwas rum.

Ich möchte Töne ausgeben mittels des Piezo-Speakers.
Schalte ich den Piezo einfach an einen normalen Port und toggle den 
manuel mit entsprechenden Wartezeiten haut das wunderbar hin.

Nun würde ich das aber gerne mit etwas weniger Zeitverschwendung machen 
:) und dafür sollten doch die Timer/Counter geeignet sein.

Also nachdem was ich hier und im Datenblatt gelesen habe sollte das in 
etwa so gehen:

#include <avr/io.h>

int main (void)
{
  TCCR0 = (1<<COM00) | (1<<CS00) | (1<<CS02);
  // just toggle and prescaler set to 1024
  OCR0 = 16;
  // Every 16 Cycles Match
  while(1);
  return 0;
}

Der Piezo Speaker ist an OC0 bzw PORTB3 angeschlossen (Pin4).
Eigentlich sollte das doch mit einer Taktfrequenz von 16MHz ein 1kHz 
Signal ausgeben, oder? Es passiert jedoch gar nix.. Was mach ich falsch?

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

Bewertung
0 lesenswert
nicht lesenswert
Dein Timer läuft mit 16Mhz / 1024 = 15625 Hz

der Timer läuft von 0 bis 255.
Jedesmal wenn der Timer den Wert 16 hat, wird der Output
Pin getoggelt. Das passiert 15625 / 256 = 61 mal in der
Sekunde. Du erzeugst also eine Frequenz von knapp 30 Herz

Wenn du willst, dass der Timer bei einem Wert von 16 auf
0 zurückgesetzt wird, dann musst du schon den CTC Modus
einschalten.


BTW: Von welchem Prozessor reden wir eigentlich?
Ich hab mal den Mega16 angenommen.

Autor: Sir Sydom (sirsydom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh, dann hab ich das falsch verstanden.. Ist mein Englisch doch nicht 
so gut wie angenommen ;)

Ich benutze einen Mega32, wie in der 2ten Zeile meines Beitrages erwähnt 
:)

Okay, aber selbst die 30Hertz müsste ich ja eigentlich hören, oder? Es 
tut sich aber gar nix..

Für CTC setze ich dann noch WGM01. Hilft auch nix.

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

Bewertung
0 lesenswert
nicht lesenswert
Sirsydom Sirsydom wrote:

> Ich benutze einen Mega32, wie in der 2ten Zeile meines Beitrages erwähnt

Hab ich überlesen, Tschuldigung.

Autor: Sir Sydom (sirsydom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kein Problem, Danke für deine Hilfe.

Es tut sich nix an dem Port, auch wenn ich ne LED anschließe passiert 
nix..

Muss ich den noch irgendwie "freischalten" oder so? Auf Ausgang was weiß 
ich..?

Tja das wars tatsächlich. Versteh ich zwar nicht.. Aber ein DDRB = 0xFF; 
hat das Problem gelöst.

Muss ich für alle "Spezialfunktionen" wie Timer, UART, usw erst die 
Ports auf Ausgang schalten?

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt Pins, die Du als Ausgänge benutzen willst, auch als solche 
schalten. Das machst Du mit einer "1" im betreffenden Bit des 
betreffenden DDRx Registers. Mit $FF setzt Du den kompletten Port, also 
alle 8 Pins, auf Ausgang! Vorsicht bei dort liegenden, festen Pegeln, 
weil es besteht Kurzschlußgefahr. Bestenfalls aktiviert man nur die Pins 
als Ausgang, die man auch wirklich als solche braucht.

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.