PIC16F628A Lite problem

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg 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...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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.
Användarvisningsbild
Cenorpa
Inlägg: 737
Blev medlem: 11 juli 2005, 20:58:03
Ort: Stockholm | Borlänge
Kontakt:

Inlägg 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...
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg 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).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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å...
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg 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.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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.
Senast redigerad av Marta 3 maj 2007, 10:29:44, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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... .-)
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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" ?
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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!
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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å.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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. :-)
Användarvisningsbild
Cenorpa
Inlägg: 737
Blev medlem: 11 juli 2005, 20:58:03
Ort: Stockholm | Borlänge
Kontakt:

Inlägg 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.
Skriv svar