Sida 2 av 3

Postat: 2 maj 2007, 22:47:32
av bengt-re
Aha, ser man på !

Synd att jag inte har något att bygga nu bara... Kliar i fingrarna.... Speciellt som man har fått en ny C-kompilator som vore kul att testa...

Postat: 3 maj 2007, 00:26:57
av Marta
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.

Postat: 3 maj 2007, 07:17:08
av Cenorpa
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...

Postat: 3 maj 2007, 07:40:01
av bos
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.
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.

Sid 94 i databladet för 628A:an (DS40044B).

Postat: 3 maj 2007, 07:42:58
av sodjan
Du ska sätta din CONFIG så att du *INTE* har OSC-out på RA6.
TRISA har ingenting med det att göra...
Som sagt, hur du gör det i just *ditt* Basic-verktyg vet jag inte...

> Ska man använda fosc=101 ?

Kanske, jag vet inte vad just det syftar på...

Postat: 3 maj 2007, 08:09:45
av bos
sodjan skrev:Kanske, jag vet inte vad just det syftar på...
fosc i det här fallet är vad jag kan utröna <FOSC2:FOSC0> i configuration word, men hade jag inte läst databladet så hade jag aldrig kunnat deducera det.

Postat: 3 maj 2007, 10:04:17
av Marta
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.

Postat: 3 maj 2007, 10:25:07
av sodjan
Men å andra sidan så kan man göra det lite enklare för sig
och gå upp från 18 pinnar till en 28-pinnars kapsel.

Men å tredje sidan så håller jag med att man inte ska kasta
hårdvara i onödan på ett problem som kan lösas med lite
programvara... .-)

Postat: 3 maj 2007, 11:57:13
av Marta
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.

Bild

Postat: 3 maj 2007, 13:03:04
av Marta
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.

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

Postat: 3 maj 2007, 15:06:33
av sodjan
Hur ändras ditt steg som kallas "konvertera till 7-segment med tabell"
ifall segmenten är kopplade "hoppsan hejsan" ??

Är det inte bara tabellen i sig som blir lite annorlunda ?
Vad menar du med "rakt kopplade" ? Vad är "rakt" ?

Postat: 3 maj 2007, 15:29:22
av Icecap
Det är en sak i detta som jag kanske har missat: om en display ska visa '8' och har 10mA på varje segment kommer den portpinne som har common anode/cathod ju att skulle dra 70mA och det finns ju inte i verkligheten!

Postat: 3 maj 2007, 16:17:31
av Marta
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å.

Postat: 3 maj 2007, 16:58:06
av sodjan
> 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. :-)

Postat: 4 maj 2007, 08:14:30
av Cenorpa
Nu har jag försökt och satt fosc =100 men det fungerar inte.

Define fosc=100

Testade även fosc=101 för säkerhetsskull och det fungerade inte heller.

Får den inte att fungera korrekt varken som ingång eller utgång. Använder jag den som utgång så får jag konstant ut ca +2,1v på pinnen.