Seriell LCD igen. Hjälp mig...

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Seriell LCD igen. Hjälp mig...

Inlägg av klasg »

Hej alla.
Jag skrev en tråd för ett par veckor sedan där jag anropade lite hjälp med mitt projekt. Projektet fick ha semester under semestern men nu vill jag fortsätta och behöver verkligen hjälp med att lösa det här problemet. Jag ska försöka förklara så bra jag kan vad det är som jag försöker göra och vad som inte fungerar, ni får hojta till om jag är otydlig.

Det jag försöker göra är att skriva ut en textsnutt på en seriell LCD. T ex. "hello world".

Jag använder:
Microchip Pickit 1
BPI-216 Serial LCD Module (2x16)
PIC12F675 (kan köra PIC16F684/PIC16F675 om det skulle behövas/underlätta)
MPLAB IDE 7.0

Så har jag kopplat:
Har svårt att tänka mig att jag har kopplat fel, men skriver ner det iaf. Från datorns USB till Pickit 1. Från ett ben (som går till "EVALUTION SOCKET", Ben 2 ("GP5/T1CKI/OSC1/CLKIN")) LCD:ns "seriella kontakt".

Koden:
Det är antagligen det här som är det stora problemet, och jag som är den felande faktorn. Eftersom jag är kass på assembler så använde jag den enda koden jag kunde hitta på Internet. Det är i princip en kopia av den ursprungliga koden, med ett par ändringar eftersom koden är skriven för en PIC16C84. Här har ni en zipfil med mitt projekt.

Det här händer:
Det är inga problem med att kompilera och programmera/verifiera ((kan ju vara) fel på koden ändå). Men det händer i princip ingenting på/med displayen. Bara bakgrundsbelysningen som lyser, men det gör den ju hela tiden... Men(!) när/om jag väljer att programmera i 2,5kHz däremot då händer det iaf någonting. Under programmeringen i 2,5kHz så ser man massa tecken och skit på displayen. När programmeringen är klar så rensas displayen (då funkar kanske "lcd_clr", clear LCD?), sedan efter en liten sekund så börjar displayen skriva ut lite tecken, typ grekiska och japanska tecken...man fattar ingenting. En sak som jag reagerade över är att tecknen som skrivs ut, skrivs ut i samma hastighet som de programmerades i, alltså 2,5kHz. Ska det verkligen vara så? Det är ca. en sekunds fördröjning mellan alla tecken som skrivs ut.

Om ni har tid och lust så skulle jag verkligen uppskatta lite vägledning och hjälp av er, kunskap vet jag att ni har. Om man bara kunde få ut en liten textsnutt så vet man iaf att man är på väg åt rätt håll. Jättesvårt att göra det här själv.

PS. Som ni kanske anar så är assembler och microcontrollers någonting nytt för mig. Jag har dock läst boken "PIC Microcontrollers" som finns på mikroelektronika.co.yu (har också läst den svenska boken "Mikroprocessorteknik", men den gav inte lika mycket), så jag har vant mig lite grann med assemblersyntaxen, men att skriva en helt egen kod från scratch är lite mastigt för mig nu.

Tack på förhand
/Klas
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

16F684 hjälper inte så mycket eftersom även den saknar USART.
16F675 vet jag inte vad det är, ett skrivfel ?

Och vilket kod ! :-)
Full med hårdkodade värden för t.ex fördröjningar för att få 4.800 baud.
Den största delen av koden har enbart med serie kommunikationen att göra.
Har du kollat att alla hårdkodade värden stämmer med hastigheten på din processor ?

At ta en kod för F84'an och bara "lyfta in" den i en modern processor (med mindre justeringen", är ofta en dålig ide. F84'an lider sån brist på finessar så att koden ofta är full med "ful-kodning" för att komma runt begränsningarna.

Om Pickit 1 stöden någon PIC med USART så skulle detta sannolikt
bli mycket enklare. I dag är det ingen som "bit-bangar" seriekommunikation utan i väldigt speciella fall.

Med en PIC med USART skulle detta inte bli många rader kod... :-)

[kollar Pickit sidan........]

En 16F688 t.ex skulle vara ett mycket bättre alternativ.
Säg till om jag skall skicka dig en. Det är en "sample" så jag behöver bara din adress...

/Janne.
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Tja sodjan

Ja 16F675 kan ha vart ett skrivfel. Skulle kanske stå 676, kommer inte ihåg (kan inte kolla nu heller)

Nej, jag har inte kontrollerat hastigheten. Jag har tänkt på det, får göra det snarast. Jag vet iaf att när jag inte programmerar i 2.5kHz så går det betydligt snabbare, men antagligen så går det inte alls.

För ett tag sedan läste jag att den processorn var lite kass och gammal, men jag tänkte (hoppades) att det kanske skulle kunna funka ändå...

...Men det låter ju bra att det kan bli ENKLARE med en annan processor. Fast enkelt blir det ju bara om man vet hur man gör... Kan det finnas någon information om hur 16F688 kan programmeras för en seriell LCD? Det största problemet är just LCD, det finns i princip ingen exempelkod, enda som finns är i Basic...

Du får jättegärna skicka mig en sådan processor om du hade någon över som du inte kommer sakna. Jag kan maila min adress om det är OK?
/Klas
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Nu vet jag inte om det finns någon särskild anledning till att du vill använda just en seriell display?

Om du hade använt en vanlig parallell display så finns det hur mycket exempelkod och färdiga bibliotek som helst som man kan använda.

De seriella diplayerna brukar dessutom vara MYCKET dyrare än de parallella!
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Schnegelwerfer:
Tänkte att det skulle vara intressant att lära sig :)
Men du har ju rätt i att de parallella är mer prisvärda.
/klas
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK. 16F676 har inte heller något hårdvaru serieinterface (USART) så det blir inte mycket bättre med den.

När man har (som i detta fall) fasta "loppar" för att få tiderna rätt i seriekommunikationen, så måste antingen båda processorerna gå med exakt samma hastighet, eller så måste det "ses över" (vilket igentligen inte är ett bra nybörjarprojekt, det kan vara lite trixigt att räkna på antal cykler på olika instruktioner...)

Med lite avancerad assembler programmering kan få assemblern att själv anpassa koden till olika hastigheter (man måste dock fortfarande på en plats tala om vilken hastighet som gäller), men det är lite överkurs just nu.

Vad merar du med att "programmera i 2.5kHz". Det förstår jag inte alls.

Om du syftar på F84 med "kass och gammal", så stämmer nog det :-)
Man bör alltid "se upp" med gammal F84 kod, eftersom den oftast är ganska dålig.

"...hur 16F688 kan programmeras för en seriell LCD..."

Nja, frågan är igentligen lite felstäld... :-)

Det du behöver veta är :

- hur (vilka kommandon) vill just din LCD vill ha ? Du har väll datablad ?
- Hur skickar jag via USART'en ? Alltså i allmänhet, LCD är bara en tillämpning av det.

Kollade just på websidan för LCDn och allt verkar ju vara med i de två PDF manualerna.

Att så att säga "knyta ihop" det hela, det är ju det som är *din* utmaning och även det som igentligen är kul ! :-)

Från de Basic program som finns i en av manualerna kan man ju se vilka sekvenser som skall skickas. Sedan är det bara att skicka ut dessa via USART'en. Hur *det* går till beskrivs i PIC'ens datablad, och har igentligen inget med LCDn i sig att göra...

Du kan PM'a mig en adress så postar jag en 16F688 i morgon... :-)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Seriella LCD'er är (ibland mycket) dyrare, men ger en viss flexibilitet.
Färre "trådar".
Kan enkelt "köras" från en PC (varför man nu skulle vilja det förstår jag dock inte...)

Dessutom, på en PIC med USART blir det sannolikt enklare med en serie LCD, speciellt som seriella LCD'er ofta har byggt in lite extra funktioner som saknas i ett vanligt HD44780 interface...
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Det jag menar med att programmera i 2.5kHz:
I MPLAB Under menyn Program --> Settings, där kan man välja 2.5kHz. Det har jag tolkat som att man programmerar den i den hastigheten. Kan ju ha fel iofs. Det blir definitivt skillnad mellan att ha den rutan ikryssad och inte.

Njae, jag menar inte riktigt att du ska skriva min kod, men jag kan förstå att det tolkas som det. Nu har jag hållit på ganska länge med det här projektet och det verkar inte komma så mycket framåt. Lätt att man tröttnar om man inte får se några resultat. Vill gärna ta genvägar då.

Första stegen blir:
Läsa på lite om hur USART:n funkar. Man glömmer saker.
Kasta den koden som jag har åt skogen.
Dumpa processorn.
Börja om från början :)
/Klas
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

Halloj!

Om jag tolkade koden rätt så bör du köra på 4MHz klocka. Om man kollar sourcen så räknar han med 2400 baud för att styra LCD:n och fördröjer varje bit med 416 us vilket ger 1*10^6 / 416 = ~2400.

Iomed att delaylooparna verkar vara kodade för en instruktionscykel = 1us och 1 instruktionscykel är 4 klockcykler så antar jag att din PIC ska klockas på 4MHz för att få det att funka.

Enligt länken till din seriella LCD så klarar den 2400 och 9600 baud, så det borde funka. Kolla att du klockar PIC:en på rätt hastighet.

Du måste som de ovan nämnt givetvis också kolla att register och konfigurering av portar stämmer med din PIC modell. Så inte t.ex. bit 1 på PORTA (som han använder som TX) är dedikerad till någon annan funktion.

Datablad för din modell finns ju att hämta på Microchip's hemsida.

mvh Mats
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

"I MPLAB Under menyn Program --> Settings, där kan man välja 2.5kHz."

OK, Det kanske har med hur "snabbt" programmeringan av PIC'en sker från MPLAB, jag vet inte riktigt. Vad jag vet är att det kan *inte* ha något med att göra med vilken hastighet PIC processorn i sig själv kör. Det beror enbart på vilken kristall som är ansluten (eller om man kör på intosc, då den går med *ca* 4 Mhz, det är inte så exakt, och jag skulle inte köra en seriekommunikation med intosc på en 12F675'a i alla fall...)

"Det blir definitivt skillnad mellan att ha den rutan ikryssad och inte."

Vänta lite, jag tittade tillbaka i tråden, titta på dessa två citat ur ditt första inlägg :

"Under programmeringen i 2,5kHz så ser man massa tecken och skit på displayen." Och sedan :
"Ben 2 ("GP5/T1CKI/OSC1/CLKIN")) LCD:ns "seriella kontakt"

Allså, serieingången på LCD'n delar ben med clockingången för programmeringen ("CLKIN"). LCDn får på det sättet in "skräp" på sin ingång under själva *programmeringen*. Helt normalt och gör varken till eller ifrån ! Och i just detta fall gör det ingen skada. Men å andra sidan så går det väll långsammare att programmera i "2,5Khz" än annars, gör det inte ?

Och när det gäller att "skriva koden". Jag tolkade det så att du inte bara vill ha igång LCD kopplingen, utan även lära dig lite om PIC programmering "på vägen". Om det *bara* gällde att få igång det, så vore det snabbaste att du skickade över LCDn till mig, men det vill du väll inte :-) :-)

Nej, du behöver inte "börja om från början", du är ju redan halvvägs, bara lägga om kursen något och göra några mindre justeringen i "verktygen"... :-)

"Lätt att man tröttnar om man inte får se några resultat...."

Jo, det är en av anledningarna att jag tycker att man skall start med en processor som har mera funktioner i hårdvaran (USART, flera timers o.s.v).
Med (t.ex) en F84 blir det en massa "ful-kodning" för att komma runt bristerna i just den modellen. Och sedan får man "lära om" en del när man byter till en modern processor, helt i onödan. Det är lätt att man fastnar i "dåliga vanor" från F84'an...

Men, 12F675 är absolut ingen dålig krets, den är bara inte helt optimal för att köra just seriekommunikation.

PS: En 16F688 åker "på lådan" i morgon (torsdag)...
Jag hoppas att Pickit'en har resten (kristall, kondingar o.s.v) som behövs. Det borde vara förmonterat på kortet...
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Det här blir bara halvt svar på din senaste postning. Klockan är så mycket så jag lär gå och lägga mig snart, får svara mer utförligt imorron.

LCD är första steget kan man säga. Ska koppla till en knappsats och fixa ett kretskort också är det tänkt. Men det får jag ta sen. En sak i taget.

Det här är inte första gången jag skriver något microcontrollerprogram, har skrivit nåt enklare blinka-lysdioder-med-lite-knappar-och-sånt för motorolas processorer. PIC är dock nytt. Och dem skiljer sig som bekant från varandra.

Ska svara dig också Kaggen, imorron.
Nä nu ska jag sova enliten stund.
Tack för idag alla.
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Kaggen:
Jag tycker att det kan vara lite knepigt att räkna hastigheter och sånt. Jag har gissat att jag bör köra i 4MHz (är väl en standardhastighet också?). Men vilken hastighet jag faktiskt kör i vet jag inte. Enda jag vet är att när jag "programmerar i det dära 2.5kHz läget" så ser jag att pulserna är just den hastigheten, inte bara under programmeringen alltså...

Har för mig att Pickitet ska köra i 4MHz. Är det någonting man kan ändra utan att byta oscillolator/kristall?

sodjan:
Att det är så att det kommer en massa skit till LCDn under programmeringen har jag redan räknat ut. Men att den delade ben med klockingången visste jag inte. Har faktiskt nästan för mig att det ser ut på liknande sätt på alla ben under själva programmeringen, men det ska jag inte svära på.

Och angående huruvida jag vill lära mig om kodningen eller om jag bara vill ha det gjort fortast möjligt svarar jag: Jag vill absolut lära mig mer, väldigt intressant det här med programmering och microcontrollers. Men, nu när jag ska byta till en annan processor så känns det som jag är tvungen att byta ut hela koden också. Och eftersom det finns så lite information om seriella LCD och PICar på Internet värkar det inte bättre än att skriva allting själv, från början. Det vore ju kul och så, men vete fan om jag skulle klara av det. Fast du säger att det skulle bli mycket lättare med den här nya processorn...

Det roligast vore ju som sagt att skriva allting själv, men det blir då kanske lite svårt. Det optimala för min del vore en kod som man med lite justeringar man kan få att fungera. Du tror att man kan använda delar av den koden som jag kör med nu?

Taskigt av LCD-tillvärkaren att inte fixa lite assemblerkod så man kan se hur man "kan" göra.
/Klas
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Det är inte "taskigt" av LCD-tillverkaren att inte fixa kod till hur man ska göra! Har du någon aning om hur många olika processorfamiljer som finns? Hur många olika programmeringsspråk som finns?

Vad LCD-tillverkaren ska tillhandahålla är datablad med tydlig beskrivning av hur LCD:n ska köras, vilka koder som ger vilken effekt osv. och sen är det upp till användaren (du alltså) att se till att den önskade effekt uppnås.
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Icecap:
Du behöver inte tolka det så bokstavligt. Tycker väl kanske att dem borde ha skrivit fler exempel. Varför 3 exempel i basic när de istället kunde ha skrivit ett i basic, ett i assembler och ett i C++. Men det är lite OT.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det hade varit bättre LCD tillverkaren hade slopat kodexempel helt och hållet, och istället hade skrivit lite tydligare förklaringar till de olika koderna. Det som är helt avgörande här är ju själva *gränssnittet* in till LCD modulen. Det måste vara 100% kristallklart beskrivet. Sedan har det igentligen ingen betydelse varifrån koderna kommer.

"Men att den delade ben med klockingången visste jag inte."

OJ OJ !! FEL AV MIG, ber om ursäkt !! :shock:
Jag blandade ihop "CLKIN" och "ICSPCLK", det är två olika pinnar... Shit...

OK, just nu, utan att veta mer om Pickit'en, så har jag ingen bra förklaring till "skräpet" på LCD'n, mer än att det tydligen sker vid själva programmeringen och därför i princip kan lämnas därhän. Det är ju vad som sker när programmet *körs* som är det viktiga.

At det finns så lite om seriella LCDer och PICar på nätet, kan bero på att det inte är så mycket att skriva om, igentligen. Det krävs ingen "special- programmering", bara vanlig seriekommunikation (med koder enligt LCD tillverkarens datablad). Inte mycket att "skriva hem" om... :-)

"Men vilken hastighet jag faktiskt kör i vet jag inte."

Detta är fundamentalt ! Det måste/bör du veta, annars får du aldrig igång det (om du inte har tur och gissar rätt, men det är inte ett bra sätt att jobba på).

Laddade just ner manualen (User Guide) till PICkit 1, och det ser ut som om det är miningen att kretsar som PICkit1 stöder skall köras med intosc (valigtsvis 4Mhz, men 16F688 har 8Mhz, vilket inte bör vara något problem).

När det gäller "2.5 Khz" mysteriet, så verkar det vara en signal som kan läggas till ett ben på PICen för att kallibrera den internal oscillatorn. Se sid 12 i manualen. Så det har varken med hastigheten på programmeringen eller hastigheten på PICen att göra, men ger uppenbarligen "störningar" till LCDn...

Se också sidan 23 !!
Har du justerad din kod för "internal osccilator" ??


"Du tror att man kan använda delar av den koden som jag kör med nu?"

Nuvarnade koden är uppdelad i två delar, den större delen (som i princip enbart innhåller bit-bangingen av seriekommunikationen) försvinner i stort sätt helt. Den andra delen "huvudprogrammet" kan nog återanvändes till största delen med lite anpassningar til nya processorn.
Skriv svar