8 channel quiz buzzer circuit using 8051 microcontrollerBaud-rate for 8051 MicrocontrollerAVR Button...

Multi tool use
Multi tool use

First index is not integer using foreach loop from 0

What is the best translation for "slot" in the context of multiplayer video games?

Anatomically Correct Strange Women In Ponds Distributing Swords

Increase performance creating Mandelbrot set in python

What is the difference between "behavior" and "behaviour"?

How to do get all objects in nested array after performing calculation in javascript

What's this thing which looks like a water sensor inside a PC mouse?

How does residential electricity work?

apt-get update is failing in debian

How to Reset Passwords on Multiple Websites Easily?

Can a monster with multiattack use this ability if they are missing a limb?

Why are on-board computers allowed to change controls without notifying the pilots?

How was Earth single-handedly capable of creating 3 of the 4 gods of chaos?

How does the UK government determine the size of a mandate?

What are the ramifications of creating a homebrew world without an Astral Plane?

when is out of tune ok?

problem with theorem, tikzpicture and center environment

Italian words for tools

There is only s̶i̶x̶t̶y one place he can be

Trouble understanding the speech of overseas colleagues

I've worked out the reasoning, but how do I write the proof?

Why Were Madagascar and New Zealand Discovered So Late?

Valid Badminton Score?

What is the oldest known work of fiction?



8 channel quiz buzzer circuit using 8051 microcontroller


Baud-rate for 8051 MicrocontrollerAVR Button InterfacingSend a text from 8051 using TR8008051 Microcontroller & OscillatorBuzzer Driver CircuitCountdown Timer on Switch Input ARM 7PIC16F1783 Inclinometer Project using Accelerometer 12-bit ADC issueUsing timers 8051 Assembly MicrocontrollerInterfacing keypad with 8051 microcontroller in ProteusUsing piezo buzzer to play complex waveforms













2












$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.



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.



circuit diagram



#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;

}
}









share|improve this question









New contributor




Shrutika Jagtap is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$








  • 1




    $begingroup$
    it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
    $endgroup$
    – Jasen
    5 hours ago










  • $begingroup$
    We measure the voltage on buzzer .It is 5v.
    $endgroup$
    – Shrutika Jagtap
    5 hours ago






  • 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
    5 hours ago












  • $begingroup$
    P3^3 What language is this? It is nonsense in C, ^ being the bitwise XOR operator.
    $endgroup$
    – Lundin
    5 hours ago






  • 2




    $begingroup$
    @Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
    $endgroup$
    – Huisman
    4 hours ago
















2












$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.



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.



circuit diagram



#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;

}
}









share|improve this question









New contributor




Shrutika Jagtap is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$








  • 1




    $begingroup$
    it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
    $endgroup$
    – Jasen
    5 hours ago










  • $begingroup$
    We measure the voltage on buzzer .It is 5v.
    $endgroup$
    – Shrutika Jagtap
    5 hours ago






  • 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
    5 hours ago












  • $begingroup$
    P3^3 What language is this? It is nonsense in C, ^ being the bitwise XOR operator.
    $endgroup$
    – Lundin
    5 hours ago






  • 2




    $begingroup$
    @Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
    $endgroup$
    – Huisman
    4 hours ago














2












2








2





$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.



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.



circuit diagram



#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;

}
}









share|improve this question









New contributor




Shrutika Jagtap is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$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.



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.



circuit diagram



#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






share|improve this question









New contributor




Shrutika Jagtap is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Shrutika Jagtap is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 2 hours ago









SamGibson

11.6k41739




11.6k41739






New contributor




Shrutika Jagtap is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 6 hours ago









Shrutika JagtapShrutika Jagtap

212




212




New contributor




Shrutika Jagtap is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Shrutika Jagtap is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Shrutika Jagtap is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 1




    $begingroup$
    it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
    $endgroup$
    – Jasen
    5 hours ago










  • $begingroup$
    We measure the voltage on buzzer .It is 5v.
    $endgroup$
    – Shrutika Jagtap
    5 hours ago






  • 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
    5 hours ago












  • $begingroup$
    P3^3 What language is this? It is nonsense in C, ^ being the bitwise XOR operator.
    $endgroup$
    – Lundin
    5 hours ago






  • 2




    $begingroup$
    @Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
    $endgroup$
    – Huisman
    4 hours ago














  • 1




    $begingroup$
    it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
    $endgroup$
    – Jasen
    5 hours ago










  • $begingroup$
    We measure the voltage on buzzer .It is 5v.
    $endgroup$
    – Shrutika Jagtap
    5 hours ago






  • 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
    5 hours ago












  • $begingroup$
    P3^3 What language is this? It is nonsense in C, ^ being the bitwise XOR operator.
    $endgroup$
    – Lundin
    5 hours ago






  • 2




    $begingroup$
    @Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
    $endgroup$
    – Huisman
    4 hours ago








1




1




$begingroup$
it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
$endgroup$
– Jasen
5 hours ago




$begingroup$
it sounds like the microcontroller output is too weak to drive the buzzer, measure the voltage on the buzzer
$endgroup$
– Jasen
5 hours ago












$begingroup$
We measure the voltage on buzzer .It is 5v.
$endgroup$
– Shrutika Jagtap
5 hours ago




$begingroup$
We measure the voltage on buzzer .It is 5v.
$endgroup$
– Shrutika Jagtap
5 hours ago




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
5 hours ago






$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
5 hours ago














$begingroup$
P3^3 What language is this? It is nonsense in C, ^ being the bitwise XOR operator.
$endgroup$
– Lundin
5 hours ago




$begingroup$
P3^3 What language is this? It is nonsense in C, ^ being the bitwise XOR operator.
$endgroup$
– Lundin
5 hours ago




2




2




$begingroup$
@Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
$endgroup$
– Huisman
4 hours ago




$begingroup$
@Lundin It is no nonsense. Please read keil.com/support/man/docs/c51/c51_le_sbit.htm
$endgroup$
– Huisman
4 hours ago










2 Answers
2






active

oldest

votes


















5












$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.






share|improve this answer











$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
    1 hour ago





















1












$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?






share|improve this answer









$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 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
    1 hour ago













Your Answer





StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");

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
});


}
});






Shrutika Jagtap is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















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









5












$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.






share|improve this answer











$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
    1 hour ago


















5












$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.






share|improve this answer











$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
    1 hour ago
















5












5








5





$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.






share|improve this answer











$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.







share|improve this answer














share|improve this answer



share|improve this answer








edited 2 hours ago

























answered 2 hours ago









Dave TweedDave Tweed

122k9152264




122k9152264












  • $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
    1 hour ago




















  • $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
    1 hour ago


















$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
1 hour ago






$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
1 hour ago















1












$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?






share|improve this answer









$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 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
    1 hour ago


















1












$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?






share|improve this answer









$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 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
    1 hour ago
















1












1








1





$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?






share|improve this answer









$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?







share|improve this answer












share|improve this answer



share|improve this answer










answered 2 hours ago









AnalogKidAnalogKid

2,73637




2,73637








  • 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
    1 hour ago
















  • 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
    1 hour ago










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
1 hour ago






$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
1 hour ago












Shrutika Jagtap is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















Shrutika Jagtap is a new contributor. Be nice, and check out our Code of Conduct.













Shrutika Jagtap is a new contributor. Be nice, and check out our Code of Conduct.












Shrutika Jagtap is a new contributor. Be nice, and check out our Code of Conduct.
















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.




draft saved


draft discarded














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





















































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







Kbh2pu80z,XO
24YsuEp3Nsr4p m,mVHhZ,qa r,DLsCeb2i XgcBCI3R8Xr,7THfqm

Popular posts from this blog

IEEEtran - How to include ORCID in TeX/PDF with PdfLatexIs there a standard way to include ORCID in TeX /...

Can't compile dgruyter and caption packagesLaTeX templates/packages for writing a patent specificationLatex...

How to fix the “Sorry, but C:…miktex-pdftex.exe did not succeed. ” error? The 2019 Stack...