mikrocontroller.net

Forum: Compiler & IDEs 5Khz an OC1A erzeugen???


Autor: Herrmann A (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Habe einen Mega 128 mit 16MHZ Taktung.

void init_pwm()
{
DDRB |= (1<<PB5);
TCCR1A = 0x00;

TCCR1A |= (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0)
TCCR1B |= (1<<CS10) | (1<<CS12);  //PSC 1024
OCR1A = 255; //volle Leistung
}


Am Ausgang OC1A habe ich ein Piezo Schallwandler der mit 5 Khz läuft.

Derzeit höre ich nur ein Klackern nicht sehr laut vom Schallwandler.


Wie bekomme ich die 5 Khz hin.

Autor: Wolfgang Horn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Herrmann,

Tipp für alle Fahranfänger mit AVR: Lade Dir AtmanAVR von 
www.atmanecl.com, der läuft 30 Tage, in der Zeit benutze den Wizzard. Da 
gibt's Du für einen Timer nur den Systemtakt an, die Frequenz oder 
Periode des Ausgangssignals, und der Wizzard  bastelt Dir Deinen C-Code.

Anschließend übernimmst Du das Fragment C-Code in Dein eigentliches 
Programm.

Es gibt wohl auch andere Wizzards dieser Art, ich bin mit dem AtmanAVR 
aber vollauf zufrieden. Im Beruf arbeite ich mit WinAVR, weil mein 
Auftraggeber das so wollte. Aber bevor ich mit PWM auch nur 10 Minuten 
herumprobiere, mache ich mit AtmanAVR mit 5 Minuten Zeitaufwand den 
"ersten Schuß" - und der traf bisher immer, und arbeite von da aus 
weiter.

Ciao
Wolfgang Horn

Autor: Herrmann A (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ja du hast recht habe es mit dem Calculator im ATMAN gemacht und es 
kommt ein TON raus kann nun auch die Frequenz verändern nur leider ist 
er mit 5 Volt zu leise.

Kennt jemand einen Schallwandler der mit 3-5 Volt funktioniert und 
schhön laut ist.

Danke

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PWM ist falsch !

- Für Spannungseinstellung nimmt man PWM

- Aber für Frequenzeinstellung nimmt man Toggle on Compare

Den Comparewert setzt man auf die halbe Frequenz

Soll der Timer noch anderweitig verwendet werden, ist es oftmals 
sinnvoll ihn durchlaufen zu lassen (kein Clear on Compare).
Dann wird zum Comparewert im Compareinterrupt der nötige Teilerwert 
addiert. Durch das Togglen des Pins per Hardware ist das trotzdem 
jitterfrei.

So kann man z.B. auch 2 verschiedene Frequenzen erzeugen.


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang Horn wrote:
> Aber bevor ich mit PWM auch nur 10 Minuten
> herumprobiere, mache ich mit AtmanAVR mit 5 Minuten Zeitaufwand den
> "ersten Schuß"

Weshalb must Du 10 Minuten probieren ???

Wie wärs einfach mal mit Rechnen ?

Du weißt die Quarzfrequenz, den Vorteiler, welche Frequenz Du willst und 
gut is.

Kann man mit nem Taschenrechner machen, aber ich bin zu faul dazu.

Ich schreib einfach die Formel hin und laß das Rechnen den Präprozessor 
des Compiler machen, dazu ist er ja schließlich da.


Peter

Autor: Herrmann A (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Also nicht PWM

ich hab ejetzt folgendes Probiert Compare match OCR1A toggle.

void init_pwm()
{
DDRB |= (1<<PB5); //Port OCR1A as Output
OCR1A = 0x0fa0; //4000Hz=4Khz
TCNT1 = 0xf060;
TCCR1A = 0x40;
TCCR1B = 0x01;
TCCR1C = 0x00;
}


ISt das richtig leider kommt immer noch nicht die lautstärke raus die 
ich haben will.

Ich denke es muß ein anderer schallwandler her der mit 5 Volt seine 
volle leistung bringt.

Autor: Wolfgang Horn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Peter,

Du: "Weshalb must Du 10 Minuten probieren ???"

Hihi. Erinnerung an den ersten Versuch mit PWM, Lesen und 
Verstehen-Wollen des Datenblatts und der Unsicherheit, ob ich die 
richtigen Bits gesetzt habe.

Stattdessen so einen Wizzard - gibt's ja woh auch von anderen Autoren -, 
am STK500 probiert, mit dem Oszi geguckt - und dann die Bitkombinationen 
in das eigentliche Programm geschrieben mit BV()und einer Dokumentation, 
die auch ein anderer lesen kann.

Bei dem heutigen Stundensatz hat sich eine 100$-Lizenz schnell gelohnt.

Ciao
Wolfgang Horn

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wolfgang,

naja, ich hatte vor den AVRs schon einige andere MC-Datenblätter gelesen 
und so schlecht sind die AVR-Datenblätter ja nicht (Beispielcode in 
C/Asm).


Aber es gibt auch Datenblätter, die verstehe ich nicht, z.B. den 
Interruptcontroller der ARM7 von ST (35 Seiten), da strotzt es nur so 
vor Notes, Warnings, Cautions, Considerations usw.
Da mir dann auch die Programmierumgebung etwa alle 15min abgestürzt ist, 
hab ich den ganzen Kram hingeschmissen.


Den 8051 hatte ich noch mit einem Valvo 8051-Datenbuch in deutsch 
gelernt.


Peter

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.