Sida 1 av 1

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

Postat: 7 januari 2013, 09:18:52
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

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

Postat: 7 januari 2013, 09:46:44
av H.O
Kolla upp det som kallas Charlieplexing.

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

Postat: 7 januari 2013, 10:30:26
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).

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

Postat: 7 januari 2013, 12:28:01
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);
}

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

Postat: 7 januari 2013, 13:53:27
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.

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

Postat: 7 januari 2013, 14:17:13
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.

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

Postat: 8 januari 2013, 06:22:52
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.