Hallo Zusammen,
ja, bevor die Frage auftaucht, ich hab hier schon gesucht und nichts
gefunden, was mir hilft oder es eben nicht verstanden....;-))
Ich brauch von meinem 2561 eine PWM, die in Frequenz und Tastverhältnis
änderbar ist, zur Ansteuerung eines Piezo-Piepsers.
Systemtakt ist 8MHz.
Port muss B7 sein, s. Code unten.
Ich habe mir ICR1 zur Frequenzeinstellung (TOP-Wert)
und OCR1A zur Pulsbreiteneinstellung gedacht.
Unten der Code, CS0 wird beim einschalten auf 1, beim Ausschalten auf 0
gesetzt (An/Aus)
,allerdings wird der Port dann nur eingeschaltet, dann wieder aus. Von
Frequenz keine Spur…
_
__| |__
Habt Ihr nen Tip, Verbesserungsvorschlag für mich?? Hab irgenwie nen
Knoten im Kopf...
LG Jens
1
TCCR1A|=(1<<COM1C1)|(1<<COM1C0);
2
TCCR1B|=(1<<WGM13);//CS0 will be set/clr to switch on/off later
Hallo Spess,
erstmal Danke für die Antwort.
Das hab ich nicht so recht verstanden, weil ich ja COM1C1 schon gesetzt
habe,
hab aber mit rumexperimentiert und wechselweise gesetzt odr auch beide
nicht,
hat leider die Situation nicht verbessert...
Vielleicht sonst noch ne Idee?
Hatte schon an die Frequenz gedacht, aber mit 8MHz clock, Teiler 1 und
ICR=10k sollte mehr wie 1Hz rauskommen, oder? Ich machs ja nur für 0,5s
an...;-))
Hallo Jens,
wie wäre es wenn du es mit einer LED testest? Die Sache mit der PWM ist
recht einfach. Datenblatt auf, Beschreibung von TCCR1A/B raussuchen und
alles konfigurieren.
Hallo,
das kpl. Programm wär wohl n bisschen viel hier hochzuladen, sind ja
knapp 50 Dateien...
Aber ich versuchs mal zu verbessern:
Erstmal initialisieren....
1
voiduIOASS_BuzzerInit(void)
2
{
3
TCCR1A|=(1<<COM1C1)|(1<<COM1C0);
4
TCCR1B|=(1<<WGM13);//CS0 will be set/clr to switch on/off later
5
6
ICR1=10000;
7
OCR1A=500;
8
9
10
// output channel C for Timer 1 -> FOC1C --> PB7
11
TCCR1C=(1<<FOC1C);
12
13
// set PB7 as output Port
14
DDRB|=0x80;
15
16
// global Buzzer Variable
17
gBuzzerActive=FALSE;
18
19
}
Dann irgendwann:
1
voidvIOASS_BuzzerOn(void)
2
{
3
power_timer1_enable();
4
DDRB|=(1<<7);/*...dir for buzzer out...*/
5
PORTB|=(1<<7);/*...port for buzzer on ...*/
6
7
TCCR1B|=(1<<CS10);
8
}
ca. 0,5s später:
1
voidvIOASS_BuzzerOff(void)
2
{
3
power_timer1_disable();
4
DDRB&=~(1<<7);/*...dir for buzzer in ...*/
5
PORTB&=~(1<<7);/*...port for buzzer off...*/
6
7
TCCR1B&=~(1<<CS10);
8
}
power enable/disable deshalb, weils noch etwas später im sleepmode auch
funktionieren muss...
Jens Berkemeyer schrieb:> Hallo,>> das kpl. Programm wär wohl n bisschen viel hier hochzuladen, sind ja> knapp 50 Dateien...
Dann mach dir ein Testprogramm, bei dem es nur um die PWM geht.
Solche Standalone-Programme um einen bestimmten Sachverhalt
auszuprobieren, haben sich schon das eine oder andere mal bewährt.
Ohne großen Schnickschnack kriegt man damit raus, ob die eingestellte
Timer Konfiguration grundsätzlich funktioniert oder nicht, oder ob man
irgendwo anders im eigentlichen Programm suchen muss.
warum soll die Pulsbreite beim Systempiepser änderbar sein?
Damit holst du dir nur unangenehme Oberwellen auf den Piezo.
Hab das bei mir so realisiert:
-toggle port pin on compare match
-clear timer on compare match
-takteiler noch in den Hörbereich
-und dann kannste über den Compare-Wert die Frequenz ändern.
:-)
Hallo Floh,
das ist der Versuch, mehr Lautstärke aus dem Piezo zu holen,
wobei ich selbst aber glaube, dass bei 50/50 Tastverhältnis das Ding nur
an seiner Resonanzfrequenz betrieben werden muss, um die max. Lautstärke
zu erzielen (mal unabhängig von der Betriebsspannung).
Bei CTC (Mode 4) funktioniert das recht gut und ich kann mit OCR1A die
Frequenz einstellen, sogar wobbeln...
Aaaber ist ja nicht meine Idee, ich solls halt "nur" machen.
Testprogramm bereite ich mal vor....
Jens Berkemeyer schrieb:> an seiner Resonanzfrequenz betrieben werden muss, um die max. Lautstärke> zu erzielen (mal unabhängig von der Betriebsspannung).
Zumindest sagt man das immer.
> Testprogramm bereite ich mal vor....
Lass es aber auch auf deiner Hardware laufen und sieh nach, ob der Timer
wirklich nicht will.
Hi
>Das hab ich nicht so recht verstanden, weil ich ja COM1C1 schon gesetzt>habe,
Entschuldige. Ich jetzt auch nicht mehr. Muss ich wohl Tomaten....
MfG Spess