Likeagenius
Cadet 2nd Year
- Registriert
- Feb. 2015
- Beiträge
- 17
Hey,
ich habe zu meiner Letzten Schaltung nun einen Piezzo Buzzer mit integriert.
Dieser klingelt aber nur so leise das man es fast garnicht hört.
Wenn ich ihn direkt an die 3 V hänge is er gut hörbar.
Meine Schaltung ist immer noch die Selbe
bis auf das der Widerstand garnicht mehr existiert und die LED nun der Buzzer ist
und mein Code ist:
Wie kann ich hier jetzt den Widerstand runter schrauben? so das der Buzzer lauter ist?
Ich habe keinen Hardware Widerstand dran.
Das ist mein Buzzer:
http://www.conrad.de/ce/de/product/...raeusch-Entwicklung-83-dB-2-5-VDC-Inhalt-1-St
ich habe zu meiner Letzten Schaltung nun einen Piezzo Buzzer mit integriert.
Dieser klingelt aber nur so leise das man es fast garnicht hört.
Wenn ich ihn direkt an die 3 V hänge is er gut hörbar.
Meine Schaltung ist immer noch die Selbe
bis auf das der Widerstand garnicht mehr existiert und die LED nun der Buzzer ist
und mein Code ist:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#define F_CPU 1000000LU
#include <util/delay.h>
#define isButtonPressed() !(PINB & _BV(PB3))
#define buzzerON() PORTB |= _BV(PB4)
#define buzzerOFF() PORTB &= ~_BV(PB4)
#define buzzerTOGGLE() PORTB ^= _BV(PB4)
enum uCState {
STATE_MAIN = 0,
STATE_WAIT = 1,
STATE_BUZZ = 2
};
enum uCState currentState;
uint16_t _ovf_cnt = 0;
ISR(TIM0_OVF_vect)
{
/* Overflow Zähler erhöhen */
++_ovf_cnt;
}
void timer_reset(void)
{
uint8_t oldSREG = SREG;
/* Interrupts deaktivieren */
cli();
/* Timer zurück setzen */
_ovf_cnt = 0;
TCNT0 = 0;
/* SREG wiederherstellen */
SREG = oldSREG;
}
uint8_t timer_get(void)
{
uint8_t oldSREG = SREG, scnds = 0;
/* Interrupts deaktivieren */
cli();
/*
1 Overflow 261120 uS
_ovf_cnt XXX S
*/
scnds = (_ovf_cnt / 1) * 261120E-6;
/* SREG wiederherstellen */
SREG = oldSREG;
return scnds;
}
int main(void)
{
// PB3 als EINGANG definieren
// PB4 als AUSGANG definieren
DDRB = _BV(PB4);
/* Gesamter Port B auf 0 setzen ; interner Pull-UP Widerstand bei PB3 aktivieren */
PORTB = _BV(PB3);
/* Timer Konfigurieren */
TCNT0 = 0;
// Timer Overflow Interrupt zulassen
TIMSK0 = 0b00000010;
// Normaler Modus
TCCR0A = 0b00000000;
// Prescaler von 1024 einstellen
TCCR0B = 0b00000101;
#if 0
/* ADC bei PB3 aktivieren */
ADMUX = _BV(MUX0) | _BV(MUX1);
ADCSRA = _BV(ADEN) | _BV(ADPS1) | _BV(ADPS0);
/*
255 / 3 = 85
0-85 = RANDOM 1
85-170 = RANDOM 2
170-255 = RANDOM 3
*/
for (;;) {
/* ADC Wert auslesen */
// Messung starten
ADCSRA |= _BV(ADSC);
// Warten bis fertig
while (ADCSRA & _BV(ADSC));
// Wert speichern
adcValue = ADCH;
buzzerON();
_delay_ms(500);
uint8_t rCase = adcValue / 3;
/*
switch (rCase) {
case 0: _delay_ms(1000); break;
case 1: _delay_ms(2000); break;
case 3: _delay_ms(3000); break;
default: _delay_ms(500);
}*/
buzzerOFF();
}
#endif
/* Globale Interrupts erlauben */
sei();
/* Zustand ist MAIN */
currentState = STATE_MAIN;
/* Endlos Schleife */
while (1) {
switch (currentState) {
case STATE_MAIN: {
/* Warten bis der Taster an PB3 gedrückt wurde */
if (isButtonPressed()) {
currentState = STATE_WAIT;
/* Timer zurücksetzen */
timer_reset();
}
} break;
case STATE_WAIT: {
/* Warten bis 2 Min. und 20 Sek. verstrichen sind */
if (timer_get() >= 5) {
/* State wechseln */
currentState = STATE_BUZZ;
/* Timer zurücksetzen */
timer_reset();
}
} break;
case STATE_BUZZ: {
/* Buzzer anstellen */
buzzerON();
/* Warten bis 3 bis 5 Sekunden verstrichen sind */
if (timer_get() >= 3) {
/* Buzzer ausstellen */
buzzerOFF();
/* Ins MAIN zurückspringen */
currentState = STATE_MAIN;
}
} break;
}
}
}
Wie kann ich hier jetzt den Widerstand runter schrauben? so das der Buzzer lauter ist?
Ich habe keinen Hardware Widerstand dran.
Das ist mein Buzzer:
http://www.conrad.de/ce/de/product/...raeusch-Entwicklung-83-dB-2-5-VDC-Inhalt-1-St
Zuletzt bearbeitet: