Hur använder man en KS0108B display

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur använder man en KS0108B display

Inlägg av sodjan »

Som sagt, det finns anledning till att den inte finns på exempel sidan... :-)
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: Hur använder man en KS0108B display

Inlägg av Pajn »

Jag hade tydligen ingen ledig pic med tillräckligt många pinnar hemma så måste köpa en ny. Jag funderar på en 16f887 så att jag kan använda en bootloader, eller kanske en 18f? nån ni kan rekommendera?

Om man använder en bootloader går det att använda seriell kommunikation i programmet också, via samma serieport till datorn då?

Sodjan: Tack för exemplet. Jag tror dock jag kommer att använda basic eller c (om jag får ordning på kompilatorn nån gång) men det går ju att plocka tips och initfunktionen ändå.
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: Hur använder man en KS0108B display

Inlägg av Pajn »

Jag har stött på ett problem.
Ett exempel

Kod: Markera allt

void main() {
  PORTA = 0;
  TRISA = 0;
  while(1) {
    PORTA.F1 = 1;
    delay_us(1000);
    PORTA.F2 = 1;
    delay_us(1000);
    PORTA.F1 = 0;
    delay_us(1000);
    PORTA.F2 = 0;
    delay_us(1000);
  }
}
Lysdioder är kopplade till RA1 och 2. Där tänds båda dioderna direkt sedan hoppar dem ner lite i lysstyrka sen släcks dem. När dem tänds igen lyser dem hela tiden (förutom att ljusstyrkan hoppar upp och ner)
vad kan det vara för fel?

EDIT: Jag använder mikroC, Wisp 648 och en 16f648a
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur använder man en KS0108B display

Inlägg av sodjan »

Är det där hela koden ?
Hur gör du t.ex med de analoga funktionerna ?
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: Hur använder man en KS0108B display

Inlägg av Pajn »

Jag glömde en rad

Kod: Markera allt

CMCON  = 7;
annars är det hela koden. Jag har aldrig behövt stänga av några analoga register förut (finns ens det på 648an?)
I en simulator tände den först den ena sen släkte han den innan han tände den andra???

En kod som jag hittade på nätet funkar

Kod: Markera allt

void main() {
  PORTA = 0;
  TRISA = 0;

  while(1) {
    PORTA = ~PORTA;
    Delay_ms(500);
  }
}
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur använder man en KS0108B display

Inlägg av sodjan »

> Jag glömde en rad...

OK, och det gjorde ingen skillnad ?

> Jag har aldrig behövt stänga av några analoga register

Behöver och behöver... det kan finnas lägen (t.ex då pinnar enbart används
som utgångar och man inte använda bit-funktioner på PORTx registret) då
de analoga funktionerna kanske inte "stör". Men det stora "gräjen" är att
visa att man faktiskt har tänkt på det och inte missat det helt. Alltså är det
bättre att göra rätt, speciellt i kod som man tänker visa upp och be om hjälp med.
Att slarva brukar straffa sig förr eller senare.

> ...(finns ens det på 648an?)

Ja, komparatorer.

> I en simulator tände den först den ena sen släkte han den innan han tände den andra???

Ja, det verkar rimligt så som koder är skriven. Och anledningen vet du ju nu...
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: Hur använder man en KS0108B display

Inlägg av Pajn »

sodjan skrev: OK, och det gjorde ingen skillnad ?
I simulatorn funkade det nu men i picen är det ingen skillnad???
sodjan skrev:Behöver och behöver... [lång text]
Då jag aldrig behövt använda dem med denna pic visste jag inte om dem.
När jag skriver

Kod: Markera allt

ANCON  = 0;
får jag ett felmedelande, om man läser databladet kanske man förstår varför :roll: (ska göra det nu)
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Hur använder man en KS0108B display

Inlägg av v-g »

ADCON kanske registret heter?

Kolla sist i kapitlet för den port du önskar mecka med där står alla register om berör denna port.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur använder man en KS0108B display

Inlägg av sodjan »

> om man läser databladet kanske man förstår varför...

Är det inte effektivare (för alla) om du gör det *innan* du postar?
Det kanske kan undvika några extra vändor på forumet.

> ANCON = 0;

Och var har du hittat "ANCON" ?
Du hade ju rätt kommando i ett tidigare inlägg.

v-g> ADCON kanske registret heter?

Rör inte till det än värre nu... :-) Att gissa lär inte hjälpa ett dugg.
Rätt register fanns i ett tidigare inlägg...

> Då jag aldrig behövt använda dem med denna pic visste jag inte om dem.

Du har missförstått helt!
Själva poängen är just att du *inte* behöver dom (d.v.s komparatorerna)
och just *därför* ska du slå av dom.
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: Hur använder man en KS0108B display

Inlägg av Pajn »

Jag han inte ens hitta rätt ställe innan jag fick hjälp :P
Vrcon fanns också men det skulle man tydligen inte behöva göra något åt (hjälpte inte heller när jag försökte)

Sodjan:
Jag kör med cmcon avstängt men det funkar ju inte ändå? Borde inte vara ett hårdvarufel då jag körde med samma pic och exakt samma koppling (har ej rört labplattan) för en månad sen utan problem. Den koden jag hittade på internet (där dem växlar hela PORTA på en gång) funkar ju också :humm:

>Du har missförstått helt!
>Själva poängen är just att du *inte* behöver dom (d.v.s komparatorerna)
>och just *därför* ska du slå av dom.
Jo, men jag var lite för lat första gången jag använde denna processorn och eftersom det funkade då brydde jag mig inte.

Jag lovar att läsa databladet innan jag postar någon mer fråga i fortsättningen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur använder man en KS0108B display

Inlägg av sodjan »

> Jag kör med cmcon avstängt men det funkar ju inte ändå?

Vad menar du med "avstängt" ? En sådan uppgift är ganska värdelös, tala
om vilket *värde* du har satt CMCON till. Men det finns väl i detta fall ingen
anledning till att använda något annat värde än det i exemplet i databladet.
Men, som sagt, vi vet ju inte om det är det du har gjort...

Själva registret CMCON i sig kan bara ha ett visst värde, aldrig vara "avstängt".
*Komparatorerna* däremot kan vara avstängda, och de stängs av via CMCON.

VRCON har nog med "Voltage Reference" att göra, och den är nog avstängd vid reset,
skulle jag tro. Grejen är just pinnar som han blandade digitala och analoga funktioner,
de är alltid analoga efter en reset (av naturliga orsaker om man funderar lite på det).

> Den koden jag hittade på internet (där dem växlar hela PORTA på en gång) funkar ju också.

Den borde inte fungera utan att ha komparatorerna avstängda. I alla fall inte på alla
PORTA pinnar (jag tror inte att alla PORTA pinnar har analoga funktioner, och för
de som *inte* har det, så fungerar koden även med komparatoerna påslagna. Så det
beror på vilken PORTA pinne du tittade på för att konstatera att "det fungerar").

> Jag lovar att läsa databladet innan

Ja, det ser onekligtn lite bättre ut att "göra hemläxan" först och fråga sen... :-)
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: Hur använder man en KS0108B display

Inlägg av Pajn »

sodjan skrev: Vad menar du med "avstängt" ? En sådan uppgift är ganska värdelös, tala
om vilket *värde* du har satt CMCON till. Men det finns väl i detta fall ingen
anledning till att använda något annat värde än det i exemplet i databladet.
Men, som sagt, vi vet ju inte om det är det du har gjort...

Kod: Markera allt

CMCON  = 7;
Men om det känns bättre för dig körde jag även med det hexdecimala värdet i databladet (0x07) men det gjorde ingen skillnad.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7473
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Hur använder man en KS0108B display

Inlägg av Marta »

Vad är det Du vill göra? Skall dioderna blinka? I så fall är nog inte "delay_us(1000);" helt lyckat. 1000µs = 1ms = 1/1000 sekund = PWM istället för blink.

Åtgärda detta och försök igen.
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: Hur använder man en KS0108B display

Inlägg av Pajn »

aaa, ibland har man en hjärna som ett nötskal :doh:
Jaja tack för hjälpen, det jag ville göra egentligen var att driva displayen men kom då till detta problem och förkortade koden till ett blinkprogram. Nu funkar dispayen i simulatorn dock är det en j*vla massa kablar att löda så att göra det "på riktigt" får vänta tills imorgon.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur använder man en KS0108B display

Inlägg av sodjan »

Bra ! Då ska komparatorerna vara avstängda i alla fall.
Var du med på varför F1 stängdes av när F2 tändes innan ?

Om det nu fungerar som det ska i MPSIM men inte "på riktigt",
så kan det vara felkopplat eller så kan processorn ha ett fel. Det
första brukar vara lite mer vanligt... :-)

> Men om det känns bättre för dig körde jag även med det hexdecimala värdet i databladet (0x07)

Kul... :-)
Jag skulle dock föreslå att du gör det till en vana att aldrig ange konstanter helt utan "radix".
Om du vill ange ett decimalt tal, gör det med d'7', inte bara 7. Det kan uppstå jäkligt
konstiga buggar när man senare får för sig att ändra "default radix" och man har en massa
konstanter som plötsligt får en annan betydelse. Nu är det ju inte så stor fara med just
värdet 7, så klart, men generellt.

Nu har jag tappat tråden helt. För att komma tillbaka on-track så kanske du ska posta
din aktuella kod och vad det aktuella problemet är. D.v.s hur det uppför sig just nu.

PS: Marta är som vanligt "på hugget" och har en inte helt dum synpunkt... :-)
Om det nu är detta som är "felet" (d.v.s ihopblandning av "us" och "ms") så borde det ha
märkts i MPSIM, i alla fall om du använder "Stopwatch" för att kolla tiderna.
Skriv svar