"Binär" output - allmän fråga

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Skede
Inlägg: 9
Blev medlem: 18 juni 2008, 12:20:29
Ort: Kalmar
Kontakt:

"Binär" output - allmän fråga

Inlägg av Skede »

Hej!

Jag är lite halvgrön så ha gärna lite överseende med det :)

På fikarasterna har vi börjat labba lite med arduino och PIC, och har följande fråga:

Låt oss säga att vi har 10st lysdioder. Istället för att "slösa" 10 portar på arduinon, skulle man istället kunna nyttja kombinationer av portarna.

Tex 4 st portar används liknande binär 8, 4, 2, 1 så har vi 16 möjliga kombinationer. Men behöver man bygga detta men en massa AND gatar eller finns det något smart sätt för å lösa detta?
Tanken är ju sen att man tänder dom i så snabb takt att man inte ser att det blinkar.

Är detta möjligt eller är jag helt enkelt ute och cyklar? :) Eller gör man på något annat sätt kanske?

Mvh,
Stefan
H.O
Inlägg: 5918
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: "Binär" output - allmän fråga

Inlägg av H.O »

Kolla upp det som kallas Charlieplexing.
Nerre
Inlägg: 27231
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: "Binär" output - allmän fråga

Inlägg av Nerre »

Ja, charlieplexing eller liknande är enklast (kräver inte direkt några extra kringkretsar)

Med "4 bitar till 16 dioder" så kan du normalt bara tända en i taget och då behöver du dessutom en avkodare (en extra krets).
Användarvisningsbild
SeniorLemuren
Inlägg: 8427
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: "Binär" output - allmän fråga

Inlägg av SeniorLemuren »

Annars är det skiftregister som gäller. Med tre portar kan man i princip få hur många utgångar man önskar. Koden nedan är för ett 8 bitars skiftregister men man kan hänga på fler om man väljer ett skiftregister som går att kaskadkoppla.

Kod: Markera allt

     Test 8-bit shift register
     µC = PIC16F690
     SIPO = SN74LS164
     USED PIN: C 0,1,2
*/

short sPORT[] = {5,5,5,5,5,5,5,5};
short *sPTR ;
const int on = 7 ;
const int off = 5 ;
short i;

void main() {
    TRISC = 0;
    sPTR = &sPORT[0];

    sPORT [0] = on;   //set port0
    sPORT [1] = on;   //set port1
    sPORT [2] = on;   //set port2
    

    // send to SIPO
    for (i = 7; i > -1 ; i--) {
        PORTC = sPORT [i] ;
        PORTC = 1 ; //clock
    }

    do{
    //main loop
    }
    while(1);
}
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: "Binär" output - allmän fråga

Inlägg av Icecap »

Skede: om jag förstår dig rätt vill du kunde tända många LED utan att använda många pinnar och då finns det en del olika lösningar. Vilken som är bäst beror på vad man vill uppnå.

Om vi tänker oss 4 pinnar kan dessa i teorin styra 15 LED! Inte 16 - det ska ju finnas en "ingen alls" kombination eller hur?

Nåväl, det kan göras med charlieplexing som inte kräver externa kretsar. om man kan styra 15 st LED med 4 ledare i charlieplexing ids jag inte kolla men en del blir det.

Sedan finns det sätt att expandera antalet utgångar från en mikroprocessor (µC) i allmänhet, detta räknas dock inte som speciellt smart om inte det finns viktiga anledningar.

Man kan använda ett skift-register som kan flytta in bits seriellt och där man sedan kan få ut dom parallellt. Dessa kan man sedan oftast koppla efter varandra så att det t.ex. kan sitta fler skiftregister efter varandra och där varje ger 8 bit.

För att styra sådana behövs en klocka, data och i latch/strobe alltså 3 pinnar.

Sedan finns det "IO-expander"-kretsar som gör ung. det samma fast mer sofistikerat.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: "Binär" output - allmän fråga

Inlägg av sodjan »

Förrutom det som redan har nämnts finns det "Led-drivers" som är kretsar där
ett antal LEDs kan styras och adresserad idividuellt. De har även normalt
ljusstyrkestyrning med PWM mot lysdioderna, inte enbart on/off.
Användarvisningsbild
Glenn
Inlägg: 36736
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: "Binär" output - allmän fråga

Inlägg av Glenn »

Man kan också köra en BCD to binary, typ 74184 eller liknande, fast då sparar man ju inte lika mycket.

..Jag brukar dock i första hand använda en större PIC, men det beror ju på exakt vad man vill göra.
Skriv svar