PIC16F628A Lite problem
charlieplex är ine krångligare än att muxa vanligt, det är så lite som tillkomer. Fyra displayer är inte hellre föraktfullt att använda det för, Du sparar ju tre pinnar. Jag har en sak här som använder det till tvådisplayer bara för att spara en enda pinne. Är det vad som fattas så är det värt ansträngningen.
Då ska jag nog försöka med charlieplex. Nackdelen är väl att man måste ha en separat resistor till varje segment på varje display vid den sortens multiplex istället för 7.
Men jag vill ändå få a.6 att fungera och det är det jag inte försåt hur jag ska göra.
Genom att sätta trisa så fungerar det ju inte eftersom oscillator funktionen då redan är satt.
Ska man använda fosc=101 ?
Har inte tid att testa just nu...
Men jag vill ändå få a.6 att fungera och det är det jag inte försåt hur jag ska göra.
Genom att sätta trisa så fungerar det ju inte eftersom oscillator funktionen då redan är satt.
Ska man använda fosc=101 ?
Har inte tid att testa just nu...
Det du måste göra är att ställa in configuration word till INTOSC with I/O, dvs fosc = 100, inte 101. Sätter du 101 så får du en klocka ut på pinnarna, och det vill du inte ha.Cenorpa skrev:Men jag vill ändå få a.6 att fungera och det är det jag inte försåt hur jag ska göra.
Sid 94 i databladet för 628A:an (DS40044B).
Det behövs inte ett motstånd för varje enskilt segment för charlieplex, det krävs bara ett enda extra motstånd. Jag kan rita upp ett schema på hur det skall vara. Det här är ju en generell sak som antagligen många är intresserade av så det kan bli en hel artikel till forumets wiki om intresse finns..
Eftersom Du bara skall ha 4 siffror så om det fortfarande är pinkris så kan Du använda 4 av displaypinnarna för knappar, de som inte har någon gemensam katod till sig. Detta kostar bara en extra pinne i en annan port, samt att det är PORTB som används för att ha intern och avstängbar pullup.
Eftersom Du bara skall ha 4 siffror så om det fortfarande är pinkris så kan Du använda 4 av displaypinnarna för knappar, de som inte har någon gemensam katod till sig. Detta kostar bara en extra pinne i en annan port, samt att det är PORTB som används för att ha intern och avstängbar pullup.
Senast redigerad av Marta 3 maj 2007, 10:29:44, redigerad totalt 1 gång.
Här är ett hemmac(l)addat schema på hur man kopplar en fullt utbyggd 8-bit charlieplex på en 8-bit prot med 8 stycken 7-segmentareutan decimalpunkt. Tricket i det hela är att inte ansluta något segment på en given display till samma pinne som dess gemensamma katod (eller anod om det är sådana) är ansluten till. Det går alltså *inte* att byta ut en av displayern amot att ha deciamalpunkt. Detta kräver en extra portpinne.


Här är lite pseudokod med förslag på hur man kan göra.
Förutsättningarna är gemensam katod och att allt
sitter på samma port och sgmenten är "rakt" kopplade.
Är de kopplade hoppsan hejsan av t.ex. layoutskäl
kan man alltid använda tabeller...
Börjar man med nollat RAM så själviniterar koden sig.
Observera att denna pseudokod inte är testad. Det kan
alltså finnas en eller flera bits på tvären i den.
Förutsättningarna är gemensam katod och att allt
sitter på samma port och sgmenten är "rakt" kopplade.
Är de kopplade hoppsan hejsan av t.ex. layoutskäl
kan man alltid använda tabeller...
Börjar man med nollat RAM så själviniterar koden sig.
Observera att denna pseudokod inte är testad. Det kan
alltså finnas en eller flera bits på tvären i den.
Kod: Markera allt
variabel MASK
variabel KATOD
variabel SCRATCH
variabel INDEX
variabel SIFFRA array 0..7
IRQRUTIN
cleara CARRY
vänsterskift MASK (detta sätter alltid carry)
vänsterskift KATOD
om CARRY = 0
begin
initiera MASK till FF
initiera KATOD till FE
initiera INDEX till SIFFRA
end
sätt PORT till FF
hämta SIFFRA(INDEX)
inkrementera INDEX
konvertera till 7-segment med tabell
(de följande tre raderna är ett partiellt vänsterskift)
spara i SCRATC
gör and mot MASK
addera mot SCRATCH
spara i TRIS
hämta KATOD
spara i PORT
IRQRUTIN SLUT
Har man strömhungriga displayer så krävs det en PNP emitterföljare tll varje display, det förtar ju lite av enkelheten, men det hade behövts drivarehur man än kopplat. Sedan finns det ju superbright displayer som lyser som bara f*n med några få mA. Man bör kunna köra 3mA per segment, fast med 8 siffror lär det inte bli läsbart i starkt ljus. Synd att displayer inte ännu utvecklats mera, LED är bra är det behövs självlysande siffror och det finns bländande vita dider vid 3mA. Med sådana i displayen hade det räckt mera än väl.
Med rakt kopplade så menade jag att alla segment på samma plats i siffran är hopkopplade på varje sida om "växlingspunkten" eller vad man nu skall kalla det där allt flyttas ett steg för varje siffra. Då kan man ha samma tabell och hantera det i programvara på mindre plats än att ha en 80-positioners jättetabell. dessutom kan man ju lagra 7-segmentdata i den indexerade listan som motsvarar displayerna och visa vilka krumelurer som helst som man kan hitta på. Med lite god vilja kan man faktiskt använda 7-segment som alfanumeriska. Det var vanligare förr innan billiga LCD fanns, men det går lika bra nu som då.
Med rakt kopplade så menade jag att alla segment på samma plats i siffran är hopkopplade på varje sida om "växlingspunkten" eller vad man nu skall kalla det där allt flyttas ett steg för varje siffra. Då kan man ha samma tabell och hantera det i programvara på mindre plats än att ha en 80-positioners jättetabell. dessutom kan man ju lagra 7-segmentdata i den indexerade listan som motsvarar displayerna och visa vilka krumelurer som helst som man kan hitta på. Med lite god vilja kan man faktiskt använda 7-segment som alfanumeriska. Det var vanligare förr innan billiga LCD fanns, men det går lika bra nu som då.
> alla segment på samma plats i siffran är hopkopplade på varje sida om "växlingspunkten"...
Ah, right, jo det är klart.
Om man börjar blanda så så måste ju (i värsta fall) varje display
ha en egen tabell...
Men visst, för *processorn* är det inget stort problem när det väl
fungerar, och det *kan* lösa ett stort layoutproblem i inkopplingen.
Inte kul att felsöka dock.
Ah, right, jo det är klart.
Om man börjar blanda så så måste ju (i värsta fall) varje display
ha en egen tabell...

Men visst, för *processorn* är det inget stort problem när det väl
fungerar, och det *kan* lösa ett stort layoutproblem i inkopplingen.
Inte kul att felsöka dock.
