Seriell LCD igen. Hjälp mig...

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

klasg:

1.
Du skriver att du använder GP5 (ben 2 på 12F675) som TX utgång till LCD:n, men om man kollar koden till ditt projekt du länkar till så deklareras TX=1 (TX är den konstanta variabeln som används i koden för att addressera portbiten) , d.v.s. koden använder GP1 (ben 6) för att klocka ut seriedata (om inte jag sett totalt fel).

2.
Stäng av watchdog timern i kontrollordet (ändra _wdt_on til _wdt_off vid _config satsen). Onödigt att ha om du inte använder den.

3.
iomed att du har _intrc_osc_noclkout satt i kontrollordet så bör processorn normalt köra med den interna 4MHz klockan, om inte picket gör något som jag inte vet nåt om. Jag tror inte du skall välja 2,5kHz som du nämnde nåt om tidigare. Jag har för mig jag sett någon bit i nåt register som kan göra att processorn även kör på 32kHz på intern oscillator, men det kanske inte gäller din modell.

4.
Är du säker på att du skickar rätt kommandon till LCD:n? Kan du fixa datablad till LCD:n så du kan kolla det?

5.
Har du kollat om det stämmer med baudrate, start/stop bitar och paritet m.m. som din seriekod genererar mot den som LCD:n vill ha? Ställer den LCD:n in baudrate automagiskt eller måste du jumpra den eller liknande?

6.
Har du testat LCD:n i övrigt? Vet du att den funkar? Iomed att den är seriell borde det väl inte vara så svårt att koppla in den i datorn och testa?

edit:
Jag testade välja Pickit 1 under programmer menyn. När jag går in på settings finns där en kryssruta "2.5 kHz Osc", är det den du menar med "programmera 2.5kHz"? Isåfall så antar jag att du sätter Pickit 1 till att klocka PICen på 2.5 kHz (Osc är förkortning på oscillator och har nog i detta fall inget med programmering att göra). Det borde isåfall förklara varför du får skräp på LCDn iomed att extern klockingång är på ben 2 (GP5) samma som du använder som seriell utgång. Detta är ju inte bra
isåfall. Se till att stänga av den optionen bums.

Du lär nog kolla upp vilka in/utgångar du igentligen använder (både i kod och fysiskt). Som sagt kan ett ben ha flera funktioner på mikrokontrollers, oftast kan du dock bara använda en funktion åt gången.

mvh Mats
Senast redigerad av Kaggen 4 augusti 2005, 15:27:18, 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 »

2.5 Khz "finessen" lägger bara en 2.5 Khz signal till en pinne på PICen (timer1 ingången) för kallibering av intosc eller som referens för tidmätningar.

Den har inget med själva programmeringen av PICen att göra.

Dock så behövs den inte för LCD exemplet, så det kan lika bra lämnas "off".
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Vad ni kan grabbar... :)

sodjan:
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).

Sånt gillar vi, det låter så lätt när du säger det så. :)

Har läst lite om EUSART idag, verkar intressant. Har läst lite om 16F688 också. Nu väntar man bara… :)

Nästa steg blir då att:
Ändra till:
_CONFIG (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _BODEN_OFF & _CP_OFF & _CPD_OFF)
Och anpassa koden till den andra processorn.

Kaggen:
1. Hmm... Vore ju lite pinsamt av mig om det är så. Jag får kolla om det kommer någonting på de andra benen. Men har för mig att det stod i kommentarerna till koden att de skickas till PORTA bit 1.
2. Ska ske.
4. Svar nej. Visste jag det så... Det är därför jag tycker att det är lite dumt att de bara har basicexempel. Men jo, datablad har jag.
5. Jag vet inte riktigt om det stämmer med baudrate och sånt, känns som att det är bättre att kolla det när jag har en annan processor att jobba med. Dubbelt jobb annars.
6. Den funkar.
Edit. Det var mycket riktigt den rutan jag menade. Du menar alltså att man klockar processorn externt från PICkitkortet i 2.5kHz, fast det egentligen ska vara en intern klocka. Och så ligger den externa klockan på samma ben där jag skicka data till LCD:n. Så du menar? Men jag ska iaf se till att stänga av den.
/Klas
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

"att man klockar processorn externt från PICkitkortet i 2.5kHz,"

NEJ NEJ NEJ !!

Processorn går alltid i (t.ex) 4Mhz (beror på PIC modell) på den interna osc.

2.5 Khz signalen läggs bara till en "in-pinne" så att den kan användas (om man vill och det behövs) som tidsreferens i koden...

Behöver man inte den signalen, så kan/bör den stängs av, det är ju möjligt att samma pinne används till något annat !
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

klasg skrev: Kaggen:
1. Hmm... Vore ju lite pinsamt av mig om det är så. Jag får kolla om det kommer någonting på de andra benen. Men har för mig att det stod i kommentarerna till koden att de skickas till PORTA bit 1.
PORTA bit 1 på en 16C84 som koden är skriven för ja. Men den koden exekveras ju nu på din 12F675 där PORTA överhuvudtaget inte existerar. Du har något som heter GPIO istf PORTA, du har antagligen inte samma ben/IO konfiguration som en 16C84 heller.

Ladda ner http://ww1.microchip.com/downloads/en/D ... 41190c.pdf och titta på sidorna 4 och 21.
4. Svar nej. Visste jag det så... Det är därför jag tycker att det är lite dumt att de bara har basicexempel. Men jo, datablad har jag.
Koder och liknande till LCD:n borde isåfall stå i databladet.
Edit. Det var mycket riktigt den rutan jag menade. Du menar alltså att man klockar processorn externt från PICkitkortet i 2.5kHz, fast det egentligen ska vara en intern klocka. Och så ligger den externa klockan på samma ben där jag skicka data till LCD:n. Så du menar? Men jag ska iaf se till att stänga av den.
Jag hade tydligen fel enligt sodjan angående funktionen av 2.5kHz pulsen (att pulsen är till för att klocka processorn på 2.5kHz är ett fullkommligt förkastligt påstående. Fy på mig! :)), däremot så kan det fortfarande vara så att den pulsen på 2.5kHz skickas på samma ben som du använder som seriell utgång till LCD:n.

sodjan:
Ok ,ok! Jag klantade mig. 8)

mvh Mats
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Kaggen:
Men PORTA är väl samma sak som GPIO, fast annat namn bara. Alltså borde det bli samma sak om man döper om PORTA till GPIO, som jag har gjort. Eller tänker jag fel?

sodjan:
Men man kan ju ändra i koden så det blir en annan frekvens. Då är det väl inte alltid 4MHz. Eller menar du bara att själva programmet kan köra med en viss fördröjning så att det går lite långsammare?
/Klas
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Funktionen av 2.5 Khz signalen beskrivs helt klart på flera platser i "User Guide" (dokument DS40051D) till PICkit 1.

T.x på sidan 12 :

"The 2.5 kHz OSC is a square wave signal that, when selected, is input to pin 3 of the evaluation socket. See the schematic Figure A-1 in Appendix A.
This function is used by Lesson 7 in Appendix C. PIC12F675 Programming
Projects, and for OSCCAL regeneration."

Eller sidan 17 :

"The 2.5 kHz OSC is a square wave signal that, when selected, is input to pin 3 of the evaluation socket. See the schematic Figure A-1 in the Appendix A."

Eller i appendix "C.9" på sidan 66.

En liten fråga till klasg, har du sett dessa delar av manualen ?
Eftersom du alls funderade på att använda funktionen, så borde du ju
ha kollat upp i manualen vad den har för funktion, eller ?
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Näe, det hade jag ärligt talat inte :$. Sorry, men det är mycket att läsa. Om microcontrollers, assembler, pickitet, och diverse datablad.

Men det borde jag ju så klart ha gjort.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

"Men man kan ju ändra i koden så det blir en annan frekvens."

Inte med den INTOSC som sitter i en 12F675'a.

Processorn går alltid i 4 Mhz (d.v.s ca 1 instruktion per us).
Sedan kan man låta programmet "loopa" för att på det sättat
åstakomma olika fördröjningar, men det är en helt annan sak...

Vissa andra (t.ex den jag skickade till dig idag) har den mer
avancerade INTOSC ("motorn") med en "växellåda" så att man
kan växla ner grundhastigehten på 8Mhz till 4, 2, 1 Mhz, 500,
250, 125 eller 31 Khz. Allt från programkoden.

"Alltså borde det bli samma sak om man döper om PORTA till GPIO, "

PORTA på en F84'a har kanske inte utgångarna (t.ec PORTA.1)
på samma be som GPIO.1 på en 12F675...
Jag tänker inte kolla, allt framgår av data bladen.

Man kan aldrig programmera en PIC utan ständig återkoppling till data bladen. Speciellt när man flyttar kod mellan två olika modeller, då måste
man vara noga att kolla allting (nästan varje instruktion !). Ibland kan det vara snabbaer att skriva ihop något direkt för den nya processorn. Det beror lite på...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

"det är mycket att läsa..."

:-)

Jo, man behöver ett par dagar för att "browsa" igenom allt. Sedan är det mycekt enklare att hitta tillbaka. Man bör bli "bekant" med data bladen så att man snabbt kan hitta runt. Något som jag tydker är överlägset när det gäller att leta efter något, är att söka m-h-a Acrobat Readern. Ofta kan det stå något intressant om en viss finess i ett annat kapitel än där man väntade sig !

Ta t.ex detta med 2.5 Khz signalen.

Jag plockade upp filen i Acrobat Reader, tryckte "control-F" för att få ett litet sökfönster, skrev 2.5 och tryckte Enter. 2 sek senare hade jag förklaringen i två meningar. Totalt 15-20 sekunder (exkl nedladdningen, så klart).
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

klasg skrev:Kaggen:
Men PORTA är väl samma sak som GPIO, fast annat namn bara. Alltså borde det bli samma sak om man döper om PORTA till GPIO, som jag har gjort. Eller tänker jag fel?
I det här fallet är det ganska korrekt, men det skall man alldrig ta för givet. PORTA har på många processorer 8 in/ut-gångar, i ditt fall har GPIO bara 6. Vad händer om du tar kod som använder bit 8 och kör på en processor som bara har 0-5 bitar på motsvarande port?

Faktum kvarstår dock att i din första post anger du att du kopplat ben 2 (GP5) från PIC:en till seriella ingången på LCD:n, i databladet på sida 21 längst ner i tabellen framgår att bit 5 motsvarar (GP5 = ben 2 på 12F675), men koden du kör använder bit 1 (GP1 = ben 6 på 12F675) för att klocka ut seriell data på.

mvh Mats
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

sodjan:
Tänkte bara meddela herrn att jag fick paketet idag :). Stort tack, jättesnällt! Har setat hela förmiddagen och läst i 688-manualen och försökt skriva lite ny kod.

Jag kommer säkert att behöva lite mer hjälp snarast. Jag ska försöka gå igenom manualer och sånt lite grundligare framöver innan jag ställer dumma frågor.
/Klas
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Fint !

Jag skall lägga fram databladet för 688'an, så att jag är beredd... :-)

Vad jag tyckte var lite konstigt var att 16F688 nämns på själva websidan för PICkit 1, men ingenstans i manualen! Jag hade förväntat mig ett avsnitt med lite specifik info för *varje* supportad processor modell även i manualen.

Hur som helst, det som jag har sett som man inte får glömma, är att programmera 688'an för intern osc, eftersom PICkit 1 enbart kan köra så.
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Lägger det i minnet tills på måndag sodjan. Ska försöka hinna läsa lite mer nu under helgen också så man kan komma på måndag morgon redo att börja.
/Klas
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Nu har jag setat och läst igenom en massa datablad och skrivit om allting. Men jag får inte skiten att funka. Ingenting kommer ut på tx.

Om vi antar att jag har gjort rätt med att ställa in baud-rate, 8bit, assynkron, en stopbit, ettställt tx och sånt.

...så för att skicka data till tx, räcker det tx med att skriva t ex. så här:
movfw storetx //temporärlagring av data som ska skickas..
banksel txreg
movwf txreg
Det borde väl funka?
Och allt som kommer till txreg kommer väl ut på tx?

En liten kodsnutt som skickar ut data på tx mottages gärna om jag har skrivit helt galet.
/Klas

EDIT: Jag har skitit i alla rc- och interruptgrejer. Bara så ni vet.
Skriv svar