8 channel quiz buzzer circuit using 8051 microcontrollerBaud-rate for 8051 MicrocontrollerAVR Button Interfacing8051 Microcontroller & OscillatorBuzzer Driver CircuitDetecting Switch input in ARM 7 and multiplexing two seven segment displaysCountdown Timer on Switch Input ARM 7Using timers 8051 Assembly MicrocontrollerCan this circuit validate AT89Cx051 micro if best valued components are used?Latching Soft ON/OFF ButtonBuzzer circuit understanding
What can I do to keep a threaded bolt from falling out of it’s slot
Earliest evidence of objects intended for future archaeologists?
Could sidesticks be linked?
Use of vor in this sentence
Installing the original OS X version onto a Mac?
Is there a commercial liquid with refractive index greater than n=2?
When does The Truman Show take place?
iPad or iPhone doesn't charge until unlocked?
Are there any OR challenges that are similar to kaggle's competitions?
Radix2 Fast Fourier Transform implemented in C++
Same SObject Upsert Parent Lookup record using an external Id
Would it be illegal for Facebook to actively promote a political agenda?
How to detect a failed AES256 decryption programmatically?
Vegetarian dishes on Russian trains (European part)
How to translate 脑袋短路 into English?
Where is this New York City Broadway location from Fall 1958?
Do living authors still get paid royalties for their old work?
My new Acer Aspire 7 doesn't have a Legacy Boot option, what can I do to get it?
Can sulfuric acid itself be electrolysed?
What causes burn marks on the air handler in the attic?
Reducing contention in thread-safe LruCache
Starships without computers?
Is it possible to get the arXiv ID of all papers being referenced by a specific arXiv paper?
Quick destruction of a helium filled airship?
8 channel quiz buzzer circuit using 8051 microcontroller
Baud-rate for 8051 MicrocontrollerAVR Button Interfacing8051 Microcontroller & OscillatorBuzzer Driver CircuitDetecting Switch input in ARM 7 and multiplexing two seven segment displaysCountdown Timer on Switch Input ARM 7Using timers 8051 Assembly MicrocontrollerCan this circuit validate AT89Cx051 micro if best valued components are used?Latching Soft ON/OFF ButtonBuzzer circuit understanding
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
Project: 8 channel quiz buzzer circuit using 8051 microcontroller from this site.
For the first candidate who presses their button, their number will show on the 7-segment display and the buzzer will make a sound.I am using peizo-buzzer in the circuit.
After making all the connections, the display is working but the buzzer is not making any sound. Buzzer delay time in code in 1ms. When we give direct 5V supply to the buzzer it works, but not in the circuit.
Please give me some solution for this.
#include<reg51.h>
#define SEGMENT P2 // PORT2 to Segments of 7-Segment Display
#define SWITCH P1 // Input Switches (buttons) to PORT1
sbit buzz=P3^0; // Buzzer
sbit rst=P3^3; // Reset Switch (Reset the display) - not the microcontroller
sbit digit=P3^7; // 7-Segment Display Common Pin (to enable)
void delay (int); // Delay function
int x=0,y,z;
unsigned char ch[]=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98; // Hexadecimal values from 0 to 9.
void delay (int d)
unsigned char i;
for(;d>0;d--)
for(i=250;i>0;i--);
for(i=248;i>0;i--);
void main()
SWITCH=0xff;
SEGMENT=0xff;
digit=1;
buzz=0;
rst=1;
while(1)
while(SWITCH==0xff); // wait until any button is pressed.
while (SWITCH==0xfe) // Button 1 is pressed.
SEGMENT=ch[1];
buzz=1;
delay(1000); // Activate buzzer for 1 second.
buzz=0;
while(rst!=0); // display the digit until the reset is pressed.
while (SWITCH==0xfd) // Button 2 is pressed.
SEGMENT=ch[2];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xfb) // Button 3 is pressed.
SEGMENT=ch[3];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xf7) // Button 4 is pressed.
SEGMENT=ch[4];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xef) // Button 5 is pressed.
SEGMENT=ch[5];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xdf) // Button 6 is pressed.
SEGMENT=ch[6];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xbf) // Button 7 is pressed.
SEGMENT=ch[7];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0x7f) // Button 8 is pressed.
SEGMENT=ch[8];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
SEGMENT=0xff;
rst=1;
microcontroller 8051 piezo-buzzer
$endgroup$
|
show 5 more comments
$begingroup$
Project: 8 channel quiz buzzer circuit using 8051 microcontroller from this site.
For the first candidate who presses their button, their number will show on the 7-segment display and the buzzer will make a sound.I am using peizo-buzzer in the circuit.
After making all the connections, the display is working but the buzzer is not making any sound. Buzzer delay time in code in 1ms. When we give direct 5V supply to the buzzer it works, but not in the circuit.
Please give me some solution for this.
#include<reg51.h>
#define SEGMENT P2 // PORT2 to Segments of 7-Segment Display
#define SWITCH P1 // Input Switches (buttons) to PORT1
sbit buzz=P3^0; // Buzzer
sbit rst=P3^3; // Reset Switch (Reset the display) - not the microcontroller
sbit digit=P3^7; // 7-Segment Display Common Pin (to enable)
void delay (int); // Delay function
int x=0,y,z;
unsigned char ch[]=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98; // Hexadecimal values from 0 to 9.
void delay (int d)
unsigned char i;
for(;d>0;d--)
for(i=250;i>0;i--);
for(i=248;i>0;i--);
void main()
SWITCH=0xff;
SEGMENT=0xff;
digit=1;
buzz=0;
rst=1;
while(1)
while(SWITCH==0xff); // wait until any button is pressed.
while (SWITCH==0xfe) // Button 1 is pressed.
SEGMENT=ch[1];
buzz=1;
delay(1000); // Activate buzzer for 1 second.
buzz=0;
while(rst!=0); // display the digit until the reset is pressed.
while (SWITCH==0xfd) // Button 2 is pressed.
SEGMENT=ch[2];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xfb) // Button 3 is pressed.
SEGMENT=ch[3];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xf7) // Button 4 is pressed.
SEGMENT=ch[4];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xef) // Button 5 is pressed.
SEGMENT=ch[5];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xdf) // Button 6 is pressed.
SEGMENT=ch[6];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xbf) // Button 7 is pressed.
SEGMENT=ch[7];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0x7f) // Button 8 is pressed.
SEGMENT=ch[8];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
SEGMENT=0xff;
rst=1;
microcontroller 8051 piezo-buzzer
$endgroup$
1
$begingroup$
it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
$endgroup$
– Jasen
Mar 27 at 8:19
2
$begingroup$
Can you remove disconnect the resistor from pin 10 of the AT89C51 and drive it manually with 5V? (P.S. do use reference names as well for components, it is easier to refer to them that way)
$endgroup$
– Huisman
Mar 27 at 8:58
1
$begingroup$
P3^3
What language is this? It is nonsense in C,^
being the bitwise XOR operator.
$endgroup$
– Lundin
Mar 27 at 9:07
3
$begingroup$
@Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
$endgroup$
– Huisman
Mar 27 at 9:23
1
$begingroup$
@Huisman Of course it is nonsense in C, since the^
operator is already taken and perfectly valid to use inside an initializer. This is clearly not valid C but non-standard extensions. There are of course many other reasons why Keil has such a bad reputation, this is just one of them.
$endgroup$
– Lundin
Mar 27 at 9:39
|
show 5 more comments
$begingroup$
Project: 8 channel quiz buzzer circuit using 8051 microcontroller from this site.
For the first candidate who presses their button, their number will show on the 7-segment display and the buzzer will make a sound.I am using peizo-buzzer in the circuit.
After making all the connections, the display is working but the buzzer is not making any sound. Buzzer delay time in code in 1ms. When we give direct 5V supply to the buzzer it works, but not in the circuit.
Please give me some solution for this.
#include<reg51.h>
#define SEGMENT P2 // PORT2 to Segments of 7-Segment Display
#define SWITCH P1 // Input Switches (buttons) to PORT1
sbit buzz=P3^0; // Buzzer
sbit rst=P3^3; // Reset Switch (Reset the display) - not the microcontroller
sbit digit=P3^7; // 7-Segment Display Common Pin (to enable)
void delay (int); // Delay function
int x=0,y,z;
unsigned char ch[]=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98; // Hexadecimal values from 0 to 9.
void delay (int d)
unsigned char i;
for(;d>0;d--)
for(i=250;i>0;i--);
for(i=248;i>0;i--);
void main()
SWITCH=0xff;
SEGMENT=0xff;
digit=1;
buzz=0;
rst=1;
while(1)
while(SWITCH==0xff); // wait until any button is pressed.
while (SWITCH==0xfe) // Button 1 is pressed.
SEGMENT=ch[1];
buzz=1;
delay(1000); // Activate buzzer for 1 second.
buzz=0;
while(rst!=0); // display the digit until the reset is pressed.
while (SWITCH==0xfd) // Button 2 is pressed.
SEGMENT=ch[2];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xfb) // Button 3 is pressed.
SEGMENT=ch[3];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xf7) // Button 4 is pressed.
SEGMENT=ch[4];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xef) // Button 5 is pressed.
SEGMENT=ch[5];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xdf) // Button 6 is pressed.
SEGMENT=ch[6];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xbf) // Button 7 is pressed.
SEGMENT=ch[7];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0x7f) // Button 8 is pressed.
SEGMENT=ch[8];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
SEGMENT=0xff;
rst=1;
microcontroller 8051 piezo-buzzer
$endgroup$
Project: 8 channel quiz buzzer circuit using 8051 microcontroller from this site.
For the first candidate who presses their button, their number will show on the 7-segment display and the buzzer will make a sound.I am using peizo-buzzer in the circuit.
After making all the connections, the display is working but the buzzer is not making any sound. Buzzer delay time in code in 1ms. When we give direct 5V supply to the buzzer it works, but not in the circuit.
Please give me some solution for this.
#include<reg51.h>
#define SEGMENT P2 // PORT2 to Segments of 7-Segment Display
#define SWITCH P1 // Input Switches (buttons) to PORT1
sbit buzz=P3^0; // Buzzer
sbit rst=P3^3; // Reset Switch (Reset the display) - not the microcontroller
sbit digit=P3^7; // 7-Segment Display Common Pin (to enable)
void delay (int); // Delay function
int x=0,y,z;
unsigned char ch[]=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98; // Hexadecimal values from 0 to 9.
void delay (int d)
unsigned char i;
for(;d>0;d--)
for(i=250;i>0;i--);
for(i=248;i>0;i--);
void main()
SWITCH=0xff;
SEGMENT=0xff;
digit=1;
buzz=0;
rst=1;
while(1)
while(SWITCH==0xff); // wait until any button is pressed.
while (SWITCH==0xfe) // Button 1 is pressed.
SEGMENT=ch[1];
buzz=1;
delay(1000); // Activate buzzer for 1 second.
buzz=0;
while(rst!=0); // display the digit until the reset is pressed.
while (SWITCH==0xfd) // Button 2 is pressed.
SEGMENT=ch[2];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xfb) // Button 3 is pressed.
SEGMENT=ch[3];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xf7) // Button 4 is pressed.
SEGMENT=ch[4];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xef) // Button 5 is pressed.
SEGMENT=ch[5];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xdf) // Button 6 is pressed.
SEGMENT=ch[6];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0xbf) // Button 7 is pressed.
SEGMENT=ch[7];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
while (SWITCH==0x7f) // Button 8 is pressed.
SEGMENT=ch[8];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
SEGMENT=0xff;
rst=1;
microcontroller 8051 piezo-buzzer
microcontroller 8051 piezo-buzzer
edited Mar 27 at 15:51
Shrutika Jagtap
asked Mar 27 at 8:08
Shrutika JagtapShrutika Jagtap
262 bronze badges
262 bronze badges
1
$begingroup$
it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
$endgroup$
– Jasen
Mar 27 at 8:19
2
$begingroup$
Can you remove disconnect the resistor from pin 10 of the AT89C51 and drive it manually with 5V? (P.S. do use reference names as well for components, it is easier to refer to them that way)
$endgroup$
– Huisman
Mar 27 at 8:58
1
$begingroup$
P3^3
What language is this? It is nonsense in C,^
being the bitwise XOR operator.
$endgroup$
– Lundin
Mar 27 at 9:07
3
$begingroup$
@Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
$endgroup$
– Huisman
Mar 27 at 9:23
1
$begingroup$
@Huisman Of course it is nonsense in C, since the^
operator is already taken and perfectly valid to use inside an initializer. This is clearly not valid C but non-standard extensions. There are of course many other reasons why Keil has such a bad reputation, this is just one of them.
$endgroup$
– Lundin
Mar 27 at 9:39
|
show 5 more comments
1
$begingroup$
it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
$endgroup$
– Jasen
Mar 27 at 8:19
2
$begingroup$
Can you remove disconnect the resistor from pin 10 of the AT89C51 and drive it manually with 5V? (P.S. do use reference names as well for components, it is easier to refer to them that way)
$endgroup$
– Huisman
Mar 27 at 8:58
1
$begingroup$
P3^3
What language is this? It is nonsense in C,^
being the bitwise XOR operator.
$endgroup$
– Lundin
Mar 27 at 9:07
3
$begingroup$
@Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
$endgroup$
– Huisman
Mar 27 at 9:23
1
$begingroup$
@Huisman Of course it is nonsense in C, since the^
operator is already taken and perfectly valid to use inside an initializer. This is clearly not valid C but non-standard extensions. There are of course many other reasons why Keil has such a bad reputation, this is just one of them.
$endgroup$
– Lundin
Mar 27 at 9:39
1
1
$begingroup$
it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
$endgroup$
– Jasen
Mar 27 at 8:19
$begingroup$
it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
$endgroup$
– Jasen
Mar 27 at 8:19
2
2
$begingroup$
Can you remove disconnect the resistor from pin 10 of the AT89C51 and drive it manually with 5V? (P.S. do use reference names as well for components, it is easier to refer to them that way)
$endgroup$
– Huisman
Mar 27 at 8:58
$begingroup$
Can you remove disconnect the resistor from pin 10 of the AT89C51 and drive it manually with 5V? (P.S. do use reference names as well for components, it is easier to refer to them that way)
$endgroup$
– Huisman
Mar 27 at 8:58
1
1
$begingroup$
P3^3
What language is this? It is nonsense in C, ^
being the bitwise XOR operator.$endgroup$
– Lundin
Mar 27 at 9:07
$begingroup$
P3^3
What language is this? It is nonsense in C, ^
being the bitwise XOR operator.$endgroup$
– Lundin
Mar 27 at 9:07
3
3
$begingroup$
@Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
$endgroup$
– Huisman
Mar 27 at 9:23
$begingroup$
@Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
$endgroup$
– Huisman
Mar 27 at 9:23
1
1
$begingroup$
@Huisman Of course it is nonsense in C, since the
^
operator is already taken and perfectly valid to use inside an initializer. This is clearly not valid C but non-standard extensions. There are of course many other reasons why Keil has such a bad reputation, this is just one of them.$endgroup$
– Lundin
Mar 27 at 9:39
$begingroup$
@Huisman Of course it is nonsense in C, since the
^
operator is already taken and perfectly valid to use inside an initializer. This is clearly not valid C but non-standard extensions. There are of course many other reasons why Keil has such a bad reputation, this is just one of them.$endgroup$
– Lundin
Mar 27 at 9:39
|
show 5 more comments
2 Answers
2
active
oldest
votes
$begingroup$
The 8051 and clones typically use an I/O configuration that is described as "pseudo-bidirectional". They have active pull-down but quasi-passive pull-up (there's a transistor that is turned on briefly to improve the rise time). This means that they can only source a tiny amount of continuous current to an external device. The datasheet (DC Characteristics, page 10) shows that VOH drops to 2.4V at just 60 µA of current.
This is not enough current to drive your NPN transistor. Instead, try putting a logic-level N-channel MOSFET there.
Note also that your other NPN (the one attached to pin 17 — you really do need to use reference designators in your schematics!) should actually be a PNP. This requires inverting the logic in your code that drives pin 17.
$endgroup$
$begingroup$
There's only one digit of display so the transistor attached to pin 17 is not even needed at all. The SEGMENT=0xFF line at the end of the loop blanks the display.
$endgroup$
– Finbarr
Mar 27 at 13:04
$begingroup$
@Dave Tweed any reference for MOSFET ...I want MOSFET number.
$endgroup$
– Shrutika Jagtap
Apr 2 at 10:26
$begingroup$
You could try the 2N7000 or the BSS138.
$endgroup$
– Dave Tweed♦
Apr 2 at 11:04
$begingroup$
@Dave Tweed I tried with 2N7000 (drain terminal connected to the ground, gate terminal to 13 pin of controller, source terminal negative terminal of buzzer), but now when I switch on the circuit buzzer continuously beeps.
$endgroup$
– Shrutika Jagtap
Apr 9 at 11:56
$begingroup$
You swapped drain and source, and the body diode is conducting regardless of the state of the gate. The source should be connected to ground.
$endgroup$
– Dave Tweed♦
Apr 9 at 12:07
|
show 2 more comments
$begingroup$
You don't say what type of device the buzzer is (electromechanical, piezo, etc.) or how much current it requires to operate, but I don't think either of those is the problem.
One millisecond is too short a time for the buzzer to wake up and make enough noise to be heard. Increase the on-time to 1 second to verify that the code is working, then adjust to taste.
BTW, what type of buzzer is it? Datasheet or link?
$endgroup$
1
$begingroup$
Hi, "One millisecond is too short a time for the buzzer to wake up" FYI the OP isn't claiming to drive the buzzer for 1ms. The code (I added a link to the original source page) is supposed to switch on the buzzer, delay for 1000 x 1ms = 1s (hence thedelay(1000);
), then switch the buzzer off. There are comments in the original code which I linked (not included by the OP) which make this clearer. That doesn't answer all of your questions, but I hope their intent is now clearer.
$endgroup$
– SamGibson
Mar 27 at 12:18
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("schematics", function ()
StackExchange.schematics.init();
);
, "cicuitlab");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "135"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2felectronics.stackexchange.com%2fquestions%2f429274%2f8-channel-quiz-buzzer-circuit-using-8051-microcontroller%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
The 8051 and clones typically use an I/O configuration that is described as "pseudo-bidirectional". They have active pull-down but quasi-passive pull-up (there's a transistor that is turned on briefly to improve the rise time). This means that they can only source a tiny amount of continuous current to an external device. The datasheet (DC Characteristics, page 10) shows that VOH drops to 2.4V at just 60 µA of current.
This is not enough current to drive your NPN transistor. Instead, try putting a logic-level N-channel MOSFET there.
Note also that your other NPN (the one attached to pin 17 — you really do need to use reference designators in your schematics!) should actually be a PNP. This requires inverting the logic in your code that drives pin 17.
$endgroup$
$begingroup$
There's only one digit of display so the transistor attached to pin 17 is not even needed at all. The SEGMENT=0xFF line at the end of the loop blanks the display.
$endgroup$
– Finbarr
Mar 27 at 13:04
$begingroup$
@Dave Tweed any reference for MOSFET ...I want MOSFET number.
$endgroup$
– Shrutika Jagtap
Apr 2 at 10:26
$begingroup$
You could try the 2N7000 or the BSS138.
$endgroup$
– Dave Tweed♦
Apr 2 at 11:04
$begingroup$
@Dave Tweed I tried with 2N7000 (drain terminal connected to the ground, gate terminal to 13 pin of controller, source terminal negative terminal of buzzer), but now when I switch on the circuit buzzer continuously beeps.
$endgroup$
– Shrutika Jagtap
Apr 9 at 11:56
$begingroup$
You swapped drain and source, and the body diode is conducting regardless of the state of the gate. The source should be connected to ground.
$endgroup$
– Dave Tweed♦
Apr 9 at 12:07
|
show 2 more comments
$begingroup$
The 8051 and clones typically use an I/O configuration that is described as "pseudo-bidirectional". They have active pull-down but quasi-passive pull-up (there's a transistor that is turned on briefly to improve the rise time). This means that they can only source a tiny amount of continuous current to an external device. The datasheet (DC Characteristics, page 10) shows that VOH drops to 2.4V at just 60 µA of current.
This is not enough current to drive your NPN transistor. Instead, try putting a logic-level N-channel MOSFET there.
Note also that your other NPN (the one attached to pin 17 — you really do need to use reference designators in your schematics!) should actually be a PNP. This requires inverting the logic in your code that drives pin 17.
$endgroup$
$begingroup$
There's only one digit of display so the transistor attached to pin 17 is not even needed at all. The SEGMENT=0xFF line at the end of the loop blanks the display.
$endgroup$
– Finbarr
Mar 27 at 13:04
$begingroup$
@Dave Tweed any reference for MOSFET ...I want MOSFET number.
$endgroup$
– Shrutika Jagtap
Apr 2 at 10:26
$begingroup$
You could try the 2N7000 or the BSS138.
$endgroup$
– Dave Tweed♦
Apr 2 at 11:04
$begingroup$
@Dave Tweed I tried with 2N7000 (drain terminal connected to the ground, gate terminal to 13 pin of controller, source terminal negative terminal of buzzer), but now when I switch on the circuit buzzer continuously beeps.
$endgroup$
– Shrutika Jagtap
Apr 9 at 11:56
$begingroup$
You swapped drain and source, and the body diode is conducting regardless of the state of the gate. The source should be connected to ground.
$endgroup$
– Dave Tweed♦
Apr 9 at 12:07
|
show 2 more comments
$begingroup$
The 8051 and clones typically use an I/O configuration that is described as "pseudo-bidirectional". They have active pull-down but quasi-passive pull-up (there's a transistor that is turned on briefly to improve the rise time). This means that they can only source a tiny amount of continuous current to an external device. The datasheet (DC Characteristics, page 10) shows that VOH drops to 2.4V at just 60 µA of current.
This is not enough current to drive your NPN transistor. Instead, try putting a logic-level N-channel MOSFET there.
Note also that your other NPN (the one attached to pin 17 — you really do need to use reference designators in your schematics!) should actually be a PNP. This requires inverting the logic in your code that drives pin 17.
$endgroup$
The 8051 and clones typically use an I/O configuration that is described as "pseudo-bidirectional". They have active pull-down but quasi-passive pull-up (there's a transistor that is turned on briefly to improve the rise time). This means that they can only source a tiny amount of continuous current to an external device. The datasheet (DC Characteristics, page 10) shows that VOH drops to 2.4V at just 60 µA of current.
This is not enough current to drive your NPN transistor. Instead, try putting a logic-level N-channel MOSFET there.
Note also that your other NPN (the one attached to pin 17 — you really do need to use reference designators in your schematics!) should actually be a PNP. This requires inverting the logic in your code that drives pin 17.
edited Mar 27 at 11:33
answered Mar 27 at 11:24
Dave Tweed♦Dave Tweed
133k11 gold badges166 silver badges287 bronze badges
133k11 gold badges166 silver badges287 bronze badges
$begingroup$
There's only one digit of display so the transistor attached to pin 17 is not even needed at all. The SEGMENT=0xFF line at the end of the loop blanks the display.
$endgroup$
– Finbarr
Mar 27 at 13:04
$begingroup$
@Dave Tweed any reference for MOSFET ...I want MOSFET number.
$endgroup$
– Shrutika Jagtap
Apr 2 at 10:26
$begingroup$
You could try the 2N7000 or the BSS138.
$endgroup$
– Dave Tweed♦
Apr 2 at 11:04
$begingroup$
@Dave Tweed I tried with 2N7000 (drain terminal connected to the ground, gate terminal to 13 pin of controller, source terminal negative terminal of buzzer), but now when I switch on the circuit buzzer continuously beeps.
$endgroup$
– Shrutika Jagtap
Apr 9 at 11:56
$begingroup$
You swapped drain and source, and the body diode is conducting regardless of the state of the gate. The source should be connected to ground.
$endgroup$
– Dave Tweed♦
Apr 9 at 12:07
|
show 2 more comments
$begingroup$
There's only one digit of display so the transistor attached to pin 17 is not even needed at all. The SEGMENT=0xFF line at the end of the loop blanks the display.
$endgroup$
– Finbarr
Mar 27 at 13:04
$begingroup$
@Dave Tweed any reference for MOSFET ...I want MOSFET number.
$endgroup$
– Shrutika Jagtap
Apr 2 at 10:26
$begingroup$
You could try the 2N7000 or the BSS138.
$endgroup$
– Dave Tweed♦
Apr 2 at 11:04
$begingroup$
@Dave Tweed I tried with 2N7000 (drain terminal connected to the ground, gate terminal to 13 pin of controller, source terminal negative terminal of buzzer), but now when I switch on the circuit buzzer continuously beeps.
$endgroup$
– Shrutika Jagtap
Apr 9 at 11:56
$begingroup$
You swapped drain and source, and the body diode is conducting regardless of the state of the gate. The source should be connected to ground.
$endgroup$
– Dave Tweed♦
Apr 9 at 12:07
$begingroup$
There's only one digit of display so the transistor attached to pin 17 is not even needed at all. The SEGMENT=0xFF line at the end of the loop blanks the display.
$endgroup$
– Finbarr
Mar 27 at 13:04
$begingroup$
There's only one digit of display so the transistor attached to pin 17 is not even needed at all. The SEGMENT=0xFF line at the end of the loop blanks the display.
$endgroup$
– Finbarr
Mar 27 at 13:04
$begingroup$
@Dave Tweed any reference for MOSFET ...I want MOSFET number.
$endgroup$
– Shrutika Jagtap
Apr 2 at 10:26
$begingroup$
@Dave Tweed any reference for MOSFET ...I want MOSFET number.
$endgroup$
– Shrutika Jagtap
Apr 2 at 10:26
$begingroup$
You could try the 2N7000 or the BSS138.
$endgroup$
– Dave Tweed♦
Apr 2 at 11:04
$begingroup$
You could try the 2N7000 or the BSS138.
$endgroup$
– Dave Tweed♦
Apr 2 at 11:04
$begingroup$
@Dave Tweed I tried with 2N7000 (drain terminal connected to the ground, gate terminal to 13 pin of controller, source terminal negative terminal of buzzer), but now when I switch on the circuit buzzer continuously beeps.
$endgroup$
– Shrutika Jagtap
Apr 9 at 11:56
$begingroup$
@Dave Tweed I tried with 2N7000 (drain terminal connected to the ground, gate terminal to 13 pin of controller, source terminal negative terminal of buzzer), but now when I switch on the circuit buzzer continuously beeps.
$endgroup$
– Shrutika Jagtap
Apr 9 at 11:56
$begingroup$
You swapped drain and source, and the body diode is conducting regardless of the state of the gate. The source should be connected to ground.
$endgroup$
– Dave Tweed♦
Apr 9 at 12:07
$begingroup$
You swapped drain and source, and the body diode is conducting regardless of the state of the gate. The source should be connected to ground.
$endgroup$
– Dave Tweed♦
Apr 9 at 12:07
|
show 2 more comments
$begingroup$
You don't say what type of device the buzzer is (electromechanical, piezo, etc.) or how much current it requires to operate, but I don't think either of those is the problem.
One millisecond is too short a time for the buzzer to wake up and make enough noise to be heard. Increase the on-time to 1 second to verify that the code is working, then adjust to taste.
BTW, what type of buzzer is it? Datasheet or link?
$endgroup$
1
$begingroup$
Hi, "One millisecond is too short a time for the buzzer to wake up" FYI the OP isn't claiming to drive the buzzer for 1ms. The code (I added a link to the original source page) is supposed to switch on the buzzer, delay for 1000 x 1ms = 1s (hence thedelay(1000);
), then switch the buzzer off. There are comments in the original code which I linked (not included by the OP) which make this clearer. That doesn't answer all of your questions, but I hope their intent is now clearer.
$endgroup$
– SamGibson
Mar 27 at 12:18
add a comment |
$begingroup$
You don't say what type of device the buzzer is (electromechanical, piezo, etc.) or how much current it requires to operate, but I don't think either of those is the problem.
One millisecond is too short a time for the buzzer to wake up and make enough noise to be heard. Increase the on-time to 1 second to verify that the code is working, then adjust to taste.
BTW, what type of buzzer is it? Datasheet or link?
$endgroup$
1
$begingroup$
Hi, "One millisecond is too short a time for the buzzer to wake up" FYI the OP isn't claiming to drive the buzzer for 1ms. The code (I added a link to the original source page) is supposed to switch on the buzzer, delay for 1000 x 1ms = 1s (hence thedelay(1000);
), then switch the buzzer off. There are comments in the original code which I linked (not included by the OP) which make this clearer. That doesn't answer all of your questions, but I hope their intent is now clearer.
$endgroup$
– SamGibson
Mar 27 at 12:18
add a comment |
$begingroup$
You don't say what type of device the buzzer is (electromechanical, piezo, etc.) or how much current it requires to operate, but I don't think either of those is the problem.
One millisecond is too short a time for the buzzer to wake up and make enough noise to be heard. Increase the on-time to 1 second to verify that the code is working, then adjust to taste.
BTW, what type of buzzer is it? Datasheet or link?
$endgroup$
You don't say what type of device the buzzer is (electromechanical, piezo, etc.) or how much current it requires to operate, but I don't think either of those is the problem.
One millisecond is too short a time for the buzzer to wake up and make enough noise to be heard. Increase the on-time to 1 second to verify that the code is working, then adjust to taste.
BTW, what type of buzzer is it? Datasheet or link?
answered Mar 27 at 11:42
AnalogKidAnalogKid
3,4494 silver badges7 bronze badges
3,4494 silver badges7 bronze badges
1
$begingroup$
Hi, "One millisecond is too short a time for the buzzer to wake up" FYI the OP isn't claiming to drive the buzzer for 1ms. The code (I added a link to the original source page) is supposed to switch on the buzzer, delay for 1000 x 1ms = 1s (hence thedelay(1000);
), then switch the buzzer off. There are comments in the original code which I linked (not included by the OP) which make this clearer. That doesn't answer all of your questions, but I hope their intent is now clearer.
$endgroup$
– SamGibson
Mar 27 at 12:18
add a comment |
1
$begingroup$
Hi, "One millisecond is too short a time for the buzzer to wake up" FYI the OP isn't claiming to drive the buzzer for 1ms. The code (I added a link to the original source page) is supposed to switch on the buzzer, delay for 1000 x 1ms = 1s (hence thedelay(1000);
), then switch the buzzer off. There are comments in the original code which I linked (not included by the OP) which make this clearer. That doesn't answer all of your questions, but I hope their intent is now clearer.
$endgroup$
– SamGibson
Mar 27 at 12:18
1
1
$begingroup$
Hi, "One millisecond is too short a time for the buzzer to wake up" FYI the OP isn't claiming to drive the buzzer for 1ms. The code (I added a link to the original source page) is supposed to switch on the buzzer, delay for 1000 x 1ms = 1s (hence the
delay(1000);
), then switch the buzzer off. There are comments in the original code which I linked (not included by the OP) which make this clearer. That doesn't answer all of your questions, but I hope their intent is now clearer.$endgroup$
– SamGibson
Mar 27 at 12:18
$begingroup$
Hi, "One millisecond is too short a time for the buzzer to wake up" FYI the OP isn't claiming to drive the buzzer for 1ms. The code (I added a link to the original source page) is supposed to switch on the buzzer, delay for 1000 x 1ms = 1s (hence the
delay(1000);
), then switch the buzzer off. There are comments in the original code which I linked (not included by the OP) which make this clearer. That doesn't answer all of your questions, but I hope their intent is now clearer.$endgroup$
– SamGibson
Mar 27 at 12:18
add a comment |
Thanks for contributing an answer to Electrical Engineering Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2felectronics.stackexchange.com%2fquestions%2f429274%2f8-channel-quiz-buzzer-circuit-using-8051-microcontroller%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
$begingroup$
it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
$endgroup$
– Jasen
Mar 27 at 8:19
2
$begingroup$
Can you remove disconnect the resistor from pin 10 of the AT89C51 and drive it manually with 5V? (P.S. do use reference names as well for components, it is easier to refer to them that way)
$endgroup$
– Huisman
Mar 27 at 8:58
1
$begingroup$
P3^3
What language is this? It is nonsense in C,^
being the bitwise XOR operator.$endgroup$
– Lundin
Mar 27 at 9:07
3
$begingroup$
@Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
$endgroup$
– Huisman
Mar 27 at 9:23
1
$begingroup$
@Huisman Of course it is nonsense in C, since the
^
operator is already taken and perfectly valid to use inside an initializer. This is clearly not valid C but non-standard extensions. There are of course many other reasons why Keil has such a bad reputation, this is just one of them.$endgroup$
– Lundin
Mar 27 at 9:39