Op 5 april 2008 17:08:06 schreef Zonnepaneeltje:
Welke controller, welke programmeertaal?
Misschien wel helemaal geen controller....
neen helemaal geen controller, ik wil gewoon de 8 bitjes laten zien op 3 displays. Bijvoorbeeld 00001010 geeft 10 op de 7-seg display.
ik heb op dit moment nog geen BCD-code, deze moet ik waarschijnlijk eerst ook nog verkrijgen, ik vertrek gewoon van een binair getal van 8 bits.
ElektronThomas
Denk simpel, doe moeilijk
BCD = binair = je ingangs bitjes
[Bericht gewijzigd door ElektronThomas op (45%)]
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
BCD is geen binair, maar Binary Coded Decimal. TS heeft echt binair als input.
Zoals gezegd, zoek in de TTL en CMOS reeksen voor binair naar BCD en 7-segm decoders.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
De CD4026 is een decade counter met ingebouwde displaysturing...
Ik zou zeggen zet daar 3 kleine (ep)rommetjes/pal's tussen en vul deze met de juiste omzetting van binair naar segment decoding. Eventueel nog aangevuld met wat uln2003 om de segmenten van stroom te voorzien.
Van binair naar BCD zou ik normaal moeten doen met 3x 74185's en dan nog eens naar 3x 7447's, gaat dit niet eenvoudiger?
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Het kan eenvoudiger, als je een EPROM kan programmeren. Dat hoeven er geen 3 te zijn, zoals driessens_nl suggereert, al blijft dat evengoed een bruikbare optie.
Je kan immers enkele van de adressen gebruiken om te multiplexen, waarbij je uiteraard een tellertje nodig hebt.
benleentje
Golden Member
Waar komt je binaire code vandaan. Is ook wel interressant om te weten. Mschien kan je daar iets aanpassen.
Als dit een bv een AD converters kan je beter gelijk een digitale voltmeter chip eraan hangen.
Van binair naar BCD zou ik normaal moeten doen met 3x 74185's en dan nog eens naar 3x 7447's
In dat geval zou ik ook voor een (1) EPROM opteren.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Ik heb daar nog eens over nagedacht. Met enkel 1 EPROM kom je er niet. Je hebt een uitgangsbuffer nodig, omdat de doorsnee-EPROM nu eenmaal onvoldoende stroom kan leveren om er LED-segmenten mee aan te sturen. Daarnaast heb je ook een teller nodig voor het multiplexen, en 3 torren om de gemeenschappelijke aansluiting v/d LED-displays te sturen. En de nodige serieweerstanden, uiteraard.
Met 1 ATmega8 lukt het net zo goed.
@peterthijs: als je niet vertrouwd bent met microcontrollers, wat info:
Hardware:
1 ATmega8
3 stuks BS170
7 weerstanden
En uiteraard een gestabiliseerde 5V-voeding en 3 LED-displays
Voor het programmeren v/d AVR:
Een printerkabel
4 weerstanden
Software:
avrdude of iets gelijkaardigs
Een hex-file (dat met plezier even voor je aangemaakt wordt)
Red-E
Gr. Red-E || There are only 10 types of people in the world. Those who understand binary, and those who don't ||
mocht je de voorgestelde tor van pros (BS170) niet hebben liggen volstaat een gewoon BC547B transistor 
@pros: dit lijkt me namelijk geen torretje dat je standaard in je arsenaal hebt zitten of wel? (ik niet teminsen
)
deze hebben een doorlaatstroom (CE-stroom) van 200mA
aangezien je 8 leds hebt van ieders 20mA kom ik op 160mA uit en moet deze dus ook volstaan 
[Bericht gewijzigd door Red-E op (19%)]
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
@pros: dit lijkt me namelijk geen torretje dat je standaard in je arsenaal hebt zitten of wel?
Hier is dat standaard aanwezig. Bij Voti heb je ze voor 0.15 euro, da's amper meer dan hetgeen ik bij de locale elektronicaboer voor een BC547 betaal. Daar komt bij, dat je geen basisweerstand nodig hebt, dat de BS170 veel sneller schakelt dan de BC547, en dat hij meer stroom kan schakelen.
Ideaal voor een dergelijke toepassing, dus.
chuckie
Honourable Member
Ervaring is de naam voor de som der fouten die we gemaakt hebben--Oscar Wilde
Red-E
Gr. Red-E || There are only 10 types of people in the world. Those who understand binary, and those who don't ||
@pros: zou je mij uitkunnen leggen waarom deze BS170 geen basisweerstand nodig heeft?
@chuckie: het boek hier voor mijn neus zegt iets anders
200mA
[Bericht gewijzigd door Red-E op (52%)]
chuckie
Honourable Member
Ervaring is de naam voor de som der fouten die we gemaakt hebben--Oscar Wilde
Hmm, vreemd, ik heb het nog eens nagezocht, maar ook mijn compendium en datasheet.com geven 100mA als max. Ic.
Het verschil tussen A,B en C zit em als het goed is in de versterking.
Maar goed, wellicht dat ie het ook aankan, het ene boek is het andere niet.
Ik heb de nare gewoonte om ruim binnen de specs te blijven 
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Op 6 april 2008 12:13:38 schreef Red-E:
@pros: zou je mij uitkunnen leggen waarom deze BS170 geen basisweerstand nodig heeft?
De BS170 is een FET, die prima aan te sturen is met digitale logica.
chuckie
Honourable Member
Ervaring is de naam voor de som der fouten die we gemaakt hebben--Oscar Wilde
Vanmiddag wil ik overigens mijn klok voor mijn belichter gaan maken, daarbij gebruik ik de 74HC190 synchrone BCD counters i.c.m. 4543 voor de 7-segments display's.
Zou ook moeten werken (hoop ik toch)...
is er iemand die me kan helpen met het programmeren van een controller om er een BCD-code uit te krijgen. Stel bijvoorbeeld ik geef het getal decimaal 82 in en ik wil op mijn uitgang van de controller 10000010 krijgen, hoe moet ik dit programmeren?
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
In C kan je dat zo doen (met 82 als voorbeeld):
unsigned char dec2bcd(unsigned char dec)
{
unsigned char tmp;
tmp = dec / 10; // 82 / 10 = 8
dec -= (tmp * 10); // 82 - (8 * 10) = 2
tmp = tmp << 4; // 00001000 << 4 = 10000000
tmp |= dec; // 10000000 | 00000010 = 10000010
return (tmp);
}
Als je echter getallen hoger dan 99 wil weergeven, past het niet meer in een byte; je hebt dan 12 bits nodig. Dit is een mogelijke aanpak:
// Voorbeeld: 234
unsigned int dec2bcd(unsigned char dec)
{
unsigned char digit1, digit2, digit3;
digit1 = dec / 100; // 234 / 100 = 2
dec -= (digit1 * 100); // 234 - (2 * 100) = 34
digit2 = dec / 10; // 34 / 10 = 3
digit3 = dec - (digit2 * 10); // 34 - (3 * 10) = 4
return ((digit1 << 8) | (digit2 << 4) | digit3);
}
[Bericht gewijzigd door pros op (43%)]