8X8 matrix LEDS PIC16f88

Hey, ik heb op school een project gemaakt met 7 LEDS en externe RC-klok en als mircocontroller de PIC16f88 gebruikt . nu wil ik als uitbreiding een 8X8 matrix maken met 2 x 74LS374N als als flip-flop buffer maar ik weet niet hoe ik deze met Flowcode of C-code moet programmeren (de LEDS laten oplichten gaat maar ik weet niet hoe ik de rijen en kolommen moet programmeren graag hulp)

schema 8x8 matrix:http://nl.tinypic.com/r/w9cw1v/8
schema looplicht :http://nl.tinypic.com/r/x1lhxk/8
aansluitingen LEDS :http://nl.tinypic.com/r/9kw09k/8

je maakt het jezelf nogal moeilijk zo, heb je geen 16 uitgangen? nu moet je al gaan multiplexen,

kwestie van je 8 bits(D1-8) invoeren, clock hoog maken U1
andere 8 bits(D1-8) invoeren, clock hoog maken U2

nee, dat is nu juist de "uitdaging" ik heb maar 8 uitgangen
en multiplexen hoe moet dat ?

dat is niks anders als dezelfde pin voor meerdere dingen gebruiken
zoals je nu doet door met de clock van U1 en U2 te spelen

8 bits
klok U1
8 bits
klok U2

door dit snel genoeg achter elkaar te doen in een for loop, krijg je vanzelf bewegend beeld

verder is het gewoon programmeren en een beetje proberen dan kom je daar wel uit

kan je dat misschien ook niet met strings en dan indexen ?

ik bedoel de waarden van de leds of uitgangen al op voorrand bepalen buiten de loop en dan de index gwn snel laten loopen of moet dit anders

http://www.circuitsonline.net/images/icons/edit_message.png?

[Bericht gewijzigd door Henry S. op vrijdag 25 april 2014 20:57:40 (65%)

waar je die 8 bits vandaan haalt moet je zelf weten

strings is wat ongebruikelijk? wat moet je met tekst hier?
tekst ontleden en omzetten naar dots kan

maar byte-arrays doorlopen gaat prima,
serieel insturen kan,
een vast patroon kan

Arco

Special Member

Multiplexen doet je schakelingnu ook al. In de software gewoon de leds per rij of kolom aansturen, en daarna de volgende.
Beste resultaat is als je ongeveer op 60...75Hz voor een complete cyclus komt. Per rij of kolom dus 60x8=480Hz=1/480 sec. (of 75x8=600Hz=1/600 sec.)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

dus ik heb verplicht 16 bits nodig ? 00000000 00000000
rij kolom
dus 1ste byte voor de rij en de 2de byte voor de kolom
ik zou echt niet weten hoe ik daar 8-bits kan bijtoveren.

ok dat multiplexen ga ik in ieder geval eens proberen dank je wel

http://www.circuitsonline.net/images/icons/edit_message.png?

[Bericht gewijzigd door Henry S. op vrijdag 25 april 2014 20:58:15 (24%)

begin gewoon eens met 2 vaste bytes
en probeer eens 1 puntje hoog te krijgen terwijl je 'multiplexend' door je loops heen loopt met tig hertz.

het ophalen van bytes uit een bron is compleet los van de aansturing

Arco

Special Member

Je hebt toch 8 rij-bits en 8 kolom-bits in je schema? Klopt precies.
De 220 Ohm weerstanden zijn trouwens te laag, een 74LS374 kan maar 2.6mA sourcen. (sinken kan 'ie wel iets van 20mA)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

wat bedoel je te laag ? ik ondervindt toch geen warmteontwikkeling in de buffers

Arco

Special Member

Het gaat niet om warmte ontwikkeling, maar om wat er in de datasheet staat... ;)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Henry S.

Moderator

@seppe319: Gebruik bij toevoeging aub even de edit: http://www.circuitsonline.net/images/icons/edit_message.png

73's de PA2HS - ik ben een radiohead, De 2019 CO labvoeding.

ok zal ik doen mijn excuses daarvoor

Mijn meester zei telkens als de klokpuls naar boven gaat moet ik de bits van de rij doorlaten en daarna als hij weer naar boven gaat de bits van de kolom doorlaten,omdat het een flip-flop register is maar ik hem ook gevraagt hoe de klokpuls regelt en dat wist hij niet daarom zou ik wat hulp willen van iemand die meer weet over de klok van 16f88

Ik vind C1 en C2 een beetje vreemd geplaatst, het lijkt wel of de +5V daar doorheen moet om bij de twee IC's te komen.

Verder begrijp ik de keuze voor PORTA, 0 niet, waarom gebruik je niet PORTB, 0, dat is toch veel makkelijker aan te sturen in de code.

Bij multiplexen denk ik aan het snel achter elkaar aan- en uitzetten van de ene as en het aanbieden van het bitpatroon op de andere as.
Ik zie niet goed hoe dit moet gaan lukken met dit schema omdat ik niet snap hoe je de flip-flops aanstuurt.

Ik heb intussen al heel wat matrices gebouwd en kom dan altijd tot een oplossing met een kolom-driver (altijd 1 kolom aan, de rest uit) met een ULN2803 om de led's te sturen, een rij-driver voor de bitpatronen (met een UDN2981 o.i.d.).

Ik kan je zat vertellen over de klok van de 16F88 (of andere PIC's), stel je vragen maar.

Just find out what you like and let it kill you

die B0 daar zit standaard al een knop op dat is het standaard bordje om dat het gewone bord maar 7 leds heeft en de uitbreiding die 8x8 matrix die heeft er 8 ik stuur de klok aan van de flip flops in de software vandaar de B0 als A1

c code:

#define MX_PIC

#define MX_USES_UINT8 3
#define MX_USES_SINT16 0
#define MX_USES_CHAR 0
#define MX_USES_FLOAT 0
#define MX_USES_SINT32 0
#define MX_USES_BOOL 1
#define MX_USES_UINT16 0
#define MX_USES_UINT32 0
//Defines voor de microcontroller
#define P16F88
#define FC_CAL_PIC
#define MX_ADC
#define MX_ADC_TYPE_2
#define MX_ADC_BITS_10
#define MX_EE
#define MX_EE_TYPE2
#define MX_EE_SIZE 256
#define MX_SPI_1
#define MX_SPI_1_MISO_PORT portb
#define MX_SPI_1_MISO_TRIS trisb
#define MX_SPI_1_MISO_PIN 1
#define MX_SPI_1_MOSI_PORT portb
#define MX_SPI_1_MOSI_TRIS trisb
#define MX_SPI_1_MOSI_PIN 2
#define MX_SPI_1_CLK_PORT portb
#define MX_SPI_1_CLK_TRIS trisb
#define MX_SPI_1_CLK_PIN 4
#define MX_SPI_1_SS_PORT portb
#define MX_SPI_1_SS_TRIS trisb
#define MX_UART_1
#define MX_UART_1_TX_PORT portb
#define MX_UART_1_TX_TRIS trisb
#define MX_UART_1_TX_PIN 5
#define MX_UART_1_RX_PORT portb
#define MX_UART_1_RX_TRIS trisb
#define MX_UART_1_RX_PIN 2
#define MX_I2C
#define MX_I2C_1
#define MX_I2C_1_SDA_PORT portb
#define MX_I2C_1_SDA_TRIS trisb
#define MX_I2C_1_SDA_PIN 1
#define MX_I2C_1_SCL_PORT portb
#define MX_I2C_1_SCL_TRIS trisb
#define MX_I2C_1_SCL_PIN 4
#define MX_PWM
#define MX_PWM_CNT 1
#define MX_PWM_PSCA1
#define MX_PWM_PSCA4
#define MX_PWM_PSCA16
#define MX_PWM_1_PORT portb
#define MX_PWM_1_TRIS trisb
#define MX_PWM_1_PIN 0
#define MX_PWM_1_PORT_A portb
#define MX_PWM_1_TRIS_A trisb
#define MX_PWM_1_PIN_A 3

//Functies
#define MX_CLK_SPEED 1000000
#ifdef _BOOSTC
#include <system.h>
#endif
#ifdef HI_TECH_C
#include <pic.h>
#endif

//Configuratiegegevens
#ifdef _BOOSTC
#pragma DATA 0x2007, 0x3f3a
#endif
#ifdef HI_TECH_C
__CONFIG(0x3f3a);
#endif
#ifdef _BOOSTC
#pragma DATA 0x2008, 0x3ffc
#endif
#ifdef HI_TECH_C
__CONFIG(0x3ffc);
#endif

//Interne functies
#include "C:\Program Files (x86)\Flowcode\v5\FCD\internals.c"

//Macro functie declaraties
void FCM_klokrij();
void FCM_klokkolom();


//Variable declaraties
#define FCV_TRUE (1)
#define FCV_FALSE (0)
MX_UINT8 FCV_TEST[26];
MX_UINT8 FCV_INDEX;
MX_BOOL FCV_RA1;



#include "C:\Program Files (x86)\Flowcode\v5\CAL\includes.c"

//Macro implementaties


void FCM_klokrij()
{

    //Output
    //Output: 1 -> A3
    trisa = trisa & 0xF7;
    if ((1))
        porta = (porta & 0xF7) | 0x08;
    else
        porta = porta & 0xF7;

    //Delay
    //Delay: 5 ms
    delay_ms(5);

    //Output
    //Output: 0 -> A3
    trisa = trisa & 0xF7;
    if ((0))
        porta = (porta & 0xF7) | 0x08;
    else
        porta = porta & 0xF7;

    //Delay
    //Delay: 5 ms
    delay_ms(5);

}


void FCM_klokkolom()
{

    //Output
    //Output: 1 -> A2
    trisa = trisa & 0xFB;
    if ((1))
        porta = (porta & 0xFB) | 0x04;
    else
        porta = porta & 0xFB;

    //Delay
    //Delay: 5 ms
    delay_ms(5);

    //Output
    //Output: 0 -> A2
    trisa = trisa & 0xFB;
    if ((0))
        porta = (porta & 0xFB) | 0x04;
    else
        porta = porta & 0xFB;

    //Delay
    //Delay: 5 ms
    delay_ms(5);

}



void main()
{
    //Initialisatie
    ansel = 0;
    cmcon = 0x07;


    //Interrupt-initialisatiecode
    option_reg = 0xC0;


    //Lus
    //Lus: While 1
    while (1)
    {

        //Commentaar:
        //kolom1

        //Output
        //Output: 0b11000010 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((194) & 0xFE);

        //Kolom1
        //Output: 1 -> A1
        trisa = trisa & 0xFD;
        if ((1))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokkolom()
        FCM_klokkolom();

        //Commentaar:
        //rij1

        //Output
        //Output: 0b00000000 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((0) & 0xFE);

        //Rij1
        //Output: 1 -> A1
        trisa = trisa & 0xFD;
        if ((1))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokrij()
        FCM_klokrij();

        //Commentaar:
        //kolom2

        //Output
        //Output: 0b10111101 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((189) & 0xFE);

        //Kolom1
        //Output: 1 -> A1
        trisa = trisa & 0xFD;
        if ((1))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokkolom()
        FCM_klokkolom();

        //Commentaar:
        //rij2

        //Output
        //Output: 0b00000010 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((2) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokrij()
        FCM_klokrij();

        //Commentaar:
        //kolom3

        //Output
        //Output: 0b01011010 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((90) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokkolom()
        FCM_klokkolom();

        //Commentaar:
        //rij3

        //Output
        //Output: 0b00000100 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((4) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokrij()
        FCM_klokrij();

        //Commentaar:
        //kolom4

        //Output
        //Output: 0b01111110 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((126) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokkolom()
        FCM_klokkolom();

        //Commentaar:
        //rij4

        //Output
        //Output: 0b00001000 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((8) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokrij()
        FCM_klokrij();

        //Commentaar:
        //kolom5

        //Output
        //Output: 0b01011010 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((90) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokkolom()
        FCM_klokkolom();

        //Commentaar:
        //rij5

        //Output
        //Output: 0b00010000 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((16) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokrij()
        FCM_klokrij();

        //Commentaar:
        //kolom6

        //Output
        //Output: 0b01100110 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((102) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokkolom()
        FCM_klokkolom();

        //Commentaar:
        //rij6

        //Output
        //Output: 0b00100000 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((32) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokrij()
        FCM_klokrij();

        //Commentaar:
        //kolom7

        //Output
        //Output: 0b10111100 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((188) & 0xFE);

        //Kolom1
        //Output: 1 -> A1
        trisa = trisa & 0xFD;
        if ((1))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokkolom()
        FCM_klokkolom();

        //Commentaar:
        //rij7

        //Output
        //Output: 0b01000000 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((64) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokrij()
        FCM_klokrij();

        //Commentaar:
        //kolom8

        //Output
        //Output: 0b11000010 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((194) & 0xFE);

        //Kolom1
        //Output: 1 -> A1
        trisa = trisa & 0xFD;
        if ((1))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokkolom()
        FCM_klokkolom();

        //Commentaar:
        //rij8

        //Output
        //Output: 0b10000000 -> PORTB
        trisb = trisb & 0x01;
        portb = (portb & 0x01) | ((128) & 0xFE);

        //Kolom1
        //Output: 0 -> A1
        trisa = trisa & 0xFD;
        if ((0))
            porta = (porta & 0xFD) | 0x02;
        else
            porta = porta & 0xFD;

        //Call Macro
        //Call Macro: klokrij()
        FCM_klokrij();


    }

    mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}
Arco

Special Member

Wat zou die code moeten doen? (het is nogal een lap code om door te worstelen en te zien wat alles doet...)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com