Hallo,

Ik wil een ledbar maken met mijn pic maar heb te weinig uitgangen. Nu kan ik een lm3915 pakken en een analoog signaal uitsturen maar ik werk liever met een digitaal signaal.

Is er een chip of een manier om met maar een paar uitgangen een ledbar te maken (soort digitale lm3915 of lm3914)?

In het totale project met een 16F628 (ik werk met proton pcibasic, de demoversie maar heb de normale inmiddels besteld) wil ik het volgende aansluiten:
- 2 led bars. 1 van 24 leds en 1 van 15 leds
- twee ingangen
- 1 7-segment display (maar moet ook een soort "R" aangeven.)
- 2 voor het kristal
Optioneel:
- 1x3 7-segment displays
-1x2 7-segment displays

Zoals waarschijnlijk de meeste al vermoeden wordt het aantal km en het toerental met leds aangegeven en de versnelling op een 7-segment display.
Optioneel wil ik de snelheid en het toerental ook nog weergeven op 7-segment displays.

Door alle displays te multiplexen gebruik ik al 13 uitgangen. Plus 4 voor de ingangen en het kristal ga ik al 1 over het maximum. Als ik nu werk met het interne kristal (waarschijnlijk wel nodig voor de pulsin meting) en met een 74LS47 ism met multiplexen kom ik tot 12 gebruikte ingangen. dit geeft mij er nog 4 voor de ledbars..
Hierbij moet ik dan nog in de logische tabel van de 74LS47 duiken of ik er uberhaupt iets van een "R" uit kan krijgen.

zelfs al vervallen de 7-segmenten (Twee aparte pics) kom ik met de 16 pootjes nog niet ver voor de 24 en 15 leds ledbars.

Weet iemand een goede/betere manier?

Ik zou schuifregisters gebruiken voor de LED bars, de 74xx595 ofzo.

En die kun je ook gebruiken om 7 segmentjes te driven, dan kun je als het echt moet ongeveer je hele readout met 1 pin van je pic doen.

wow, ik ben wat mijn naam zegt en een shiftregister heb ik nog nooit gebruikt. Ik heb even gekeken maar dat wordt nog experimenteren zie ik wel. Kan met "SHOUT" wel gemakkelijk in picbasic gedaan worden. Ik zie alleen maar 8 uitgangen aan bijv. 74HC595 zitten. zijn er nadere met meer uitgangen of kunnen deze meerdere tegelijk aangesloten worden op dezelfde poorten (of doorgelust of zoiets).

Om dit te gebruiken om de 7 segmentjes aan te sturen zal ook nog wel ff lastig worden maar we gaan aan de gang. Ik zal er deze week eens eentje gaan halen en aansluiten. Als ik het goed begrijp, moet ik toch 3 uitgangen aan dit IC leggen?

Je kan zoveel schuifregisters in serie zetten als je maar wil:
http://pros.gethost.be/Schemas/SchuifregistersBedienen.png
Telkens QH' doorverbinden naar de data-ingang van het volgende schuifregister. Clk en Latch aan mekaar knopen.
Je moet dan wel --bij 2 schuifregisters-- eerst 16 bits serieel inklokken, en vervolgens Latch even hoog maken.

Hier zie je hoe de signalen eruit zien. In onderstaand voorbeeld zijn de pulsen weergegeven voor 4 stuks 74HC595 na elkaar. Je ziet bovenaan 4 maal na elkaar 8 clockpulsen die door de controller aangemaakt worden. Op de 2de lijn zie je de serieele data bitjes wijzigen die je uitstuurt. Op de 3de lijn zie je op het einde van de 4x8 clockpulsjes dat er een loadpuls gegeven wordt. Deze loadpuls zal de serieele data in eenmaal op de uitgangen van de 4 schuifregisters plaatsen. In dit voorbeeld bekom je dus 32 gestuurde uitgangen.

http://users.skynet.be/fotoopa/fpga/hc595.png

Zoals pros al tekende heb je maar 3 pinnen nodig:

- Ser. Clk
- Data
- Latch

Op de onderste regel zie je ook nog eens de hexwaarde van de data die verstuurd wordt. Het is de logic analyser die deze serieele bitjes als een hexwaarde kan weergeven zodat je als gebruiker nog beter de inhoud van de serieele data ziet op het scherm.

ik heb op dit moment 1 74hc595 aan de gang. Werkt mooi zeg. Met een formule in Proton picbasic k=(dcd i) - 1 (i loopt hier even van 0 tot 8 en k is dan de data om te verzenden) krijg ik een leuke led bar. Eens kijken hoe dat gaat als ik de 74hc595 ga uitbreiden (ik had er 3 voor de test maar al eentje samen met mijn pic naar de ic hemel gestuurd)

Nu heb ik nog een vraagje. Op de uitgang krijg de binaire waarde van de ingestuurde getallen. Hoe kan ik dit het beste op een 7-segment display brengen? Met een soort 74LS47 of ca3161 of direct? Heeft hier iemand een bijbehorende code voor? Kan ik dan met de voorgenoemde ic's misschien twee segmenten met 1 74hc595 aansturen?
Ik ben al met de binaire tabel bezig maar kom er even niet aan uit. ( van 16 tot 31 houd het 5de bit bijvoorbeeld een 1 vast wat dan vast niet goed uit ga komen als ik bijvoorbeeld 2 74LS47 aan wil sluiten) natuurllijk 1x74LS47 op een 74hc595 zal wel werken maar worden zoveel ic's.

Een look-up tabel werkt prima. Daar heb je maar 8 bytes ('0 ... '9') voor nodig. Nu heb je per decade maar 7 segmenten nodig, terwijl een schuifregister 8 uitgangen heeft. Dat maakt het aansturen niet moeilijker, zolang je het eerste segment van de 2e decade maar op QH van het eerste schuifregister aansluit en de rest op het 2e schuifregister enz.
M.a.w. een serieschakeling van bv. 4 schuifregisters kan je beschouwen als 1 32-bits schuifregister.

Ik heb hier nog wat gevonden uit een oud projectje:


/*
  De segmenten van de LED-display's worden serieel verstuurd naar
  een stel 74HC595-schuifregisters.

       a
    --------
    |      |
  f |      | b
    |  g   |
    --------
    |      |
  e |      | c
    |      |
    --------
       d
  
  Volgorde van de segmenten in dit voorbeeld:
  QH QG QF QE QD QC QB QA QH QG QF QE QD QC QB QA
        c  d  e  g  b  f  a  c  d  e  g  b  f  a
*/

#define LEDc    1
#define LEDd    2
#define LEDe    4
#define LEDg    8
#define LEDb   16
#define LEDf   32
#define LEDa   64

#define NUL   (LEDa | LEDb | LEDc | LEDd | LEDe | LEDf)
#define EEN   (LEDb | LEDc)
#define TWEE  (LEDa | LEDb | LEDd | LEDe | LEDg)
#define DRIE  (LEDa | LEDb | LEDc | LEDd | LEDg)
#define VIER  (LEDb | LEDc | LEDf | LEDg)
#define VIJF  (LEDa | LEDc | LEDd | LEDf | LEDg)
#define ZES   (LEDa | LEDc | LEDd | LEDe | LEDf | LEDg)
#define ZEVEN (LEDa | LEDb | LEDc)
#define ACHT  (LEDa | LEDb | LEDc | LEDd | LEDe | LEDf | LEDg)
#define NEGEN (LEDa | LEDb | LEDc | LEDd | LEDf | LEDg)

char cijfers[10] = { NUL, EEN, TWEE, DRIE, VIER, VUJF, ZES, ZEVEN, ACHT, NEGEN };

't Is wel C-code, maar dat valt wel om te zetten naar BASIC, denk ik. Met een


    char x = 5;
    char y = cijfers[x];

bevat y de segmenten die moeten oplichten om het cijfer '5' te vormen.
Het laagste bit wordt hier als eerste in het schuifregister geplaatst. Hou daar rekening mee. Verder sluit je de 7-segment displays op de "gemakkelijkste" manier aan, waarna je LEDa ... LEDg aanpast.