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


von Herrmann A (Gast)


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.

von Wolfgang Horn (Gast)


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

von Herrmann A (Gast)


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

von Peter D. (peda)


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

von Peter D. (peda)


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

von Herrmann A (Gast)


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.

von Wolfgang Horn (Gast)


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

von Peter D. (peda)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.