Forum: Mikrocontroller und Digitale Elektronik Buzzer am Olimexboard LPC2148


von Franjo Rupcic (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

okay irgendwie stelle ich hier glaube ich die dümmsten Fragen ^^ aber
ich bin dankbar das sich trotzdem immer jemand Zeit nimmt und meistens
komme ich dann auch alleine zurecht.

Also ich lerne (üb) gerade am hier Angebotene OLIMEX LPC2148 Board.
Bin zufrieden. Speichertest prog war erfolgreich, UART tut, LEDs und
Buttons kein problem. Aber der Buzzer macht mir zu schaffen ^^

Ich finde die Beschreibung von OLIMEX aber auch wirklich mager. Das
einzigste was ich weiß kam vom Schaltplan und da ich kein Elektroniker
bin weiß ich net wirklich was ich tun soll. PWM puls ist nicht das
problem sondern : WARUM GEHEN 2 PORTS auf den Buzzer??? sollte es nicht
1ner sein und der ausgang geht auf Masse?? Welchen soll ich den nun
Pulsen? Beide? ich blicks einfach net.

von Franjo Rupcic (Gast)


Lesenswert?

p.s. Skizze findet man im Anhanf. Anschlüsse gehen auf P0.12 & P0.13

von Marko B. (Gast)


Lesenswert?

Um den Buzzer anzusteuern gibt man immer abwechselnd low und high auf
die beiden Pins, der Buzzer wird also jedesmal umgepolt. Dadurch
bekommt der Buzzer im Mittel eine doppelt so hohe Spannung wie wenn man
nur einen Pin schalten würde. Er wird also lauter.

Man kann mit dieser Beschaltung auch nur einen Pin schalten. Damit hat
man zwei Lautstärkestufen.

von Wolfram (Gast)


Lesenswert?

>> Dadurch bekommt der Buzzer im Mittel eine doppelt so hohe Spannung
>>wie wenn man nur einen Pin schalten würde.

im Mittel ist die Spannung 0. Das soll ja auch bezweckt werden.
Der DCWert an einem Lautsprecher sollte auch 0 sein.
Wie schon gesagt die Spannung wird jeweils umgepolt.
Also HIGH ->LOW spannung +Vtarget, Membran beim Buzzer wird
rausgedrückt
LOW->HIGH spannung -Vtarget, Membran wird reingedrückt
der Widerstand dient zur Strombegrenzung. Durch das Umpolen wird
jeweils die Stromrichtung geändert.

von Franjo Rupcic (Gast)


Lesenswert?

Hallo,

danke für die Antworten. Marko seine hab ich zuerst probiert und
festgestellt es klappt net ^^ aber das hat mich auch schon auf die
richtige Spur gebracht ---> Versuch es umzupolen ^^ von daher hat
Wolfram hier recht behalten. Ich spiel gerade mit den Tönen rum aber
naja ein Datenbaltt währe mir schon recht. Hier mal mein kleiner Code
ausschnitt:

<CODE>
#define fnBUZZ1()  {  IO0CLR = 0x00002000;  \
        IO0SET = 0x00001000;  }
#define fnBUZZ2()  {  IO0CLR = 0x00001000;  \
        IO0SET = 0x00002000;  }
...

f_ton = 2000;

for( k=0; k<10; i++)       //Anzahl wiederholungen = k * T
{
  fnBUZZ1();
      while( f_ton > 0){ --f_ton;  }
  fnBUZZ2();
      while( f_ton < 2000){ ++f_ton;  }
}

</CODE>

Frage: da kein Datenblatt enthalten ist weiß ich nicht welche
Frequenzen ich abspiele.
Meine Theorie: Disassembly --> die Dauer der Befehle zusammenaddiere
und Ein/Ausschaltzeiten PIN, in Abhängigeit der CPU Frequenz
(hier 60 MHz). Währe das richtig?? oder gibt es einen einfacheren Weg?

Trotzdem jetzt schon vielen dank

von Wolfram (Gast)


Lesenswert?

Also prinzipiell geht das schon das du im Disassembly die befehlzeiten
addierst, wird halt nur sehr unschön wenn du einen Befehl (in C)
änderst.
Entweder nimmst du eine delay funktion (wenn vorhanden) oder du benutzt
die Unterstützung in der Hardware. Stichwort: Timer
Da stellst du die Anzahl von Takten ein die gezählt werden soll und
überprüfst deinen Zähler oder läßt dir nach Ablauf der Zählzeit ein
Flag setzen, dass du abfragst.

von Franjo (Gast)


Lesenswert?

hi ,

danke Wolfram. War eher nur ne theoretische Frage aber natürlich hast
ud recht. Mit nem Timer ist das ganze viel eleganter. Nochmals an alle
Teilnehmer des Threads DANKE

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.