Seriell LCD igen. Hjälp mig...
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
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.
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:
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
"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 !
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 !
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.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.
Ladda ner http://ww1.microchip.com/downloads/en/D ... 41190c.pdf och titta på sidorna 4 och 21.
Koder och liknande till LCD:n borde isåfall stå i databladet.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.
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!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.

sodjan:
Ok ,ok! Jag klantade mig.

mvh Mats
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
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
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 ?
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 ?
"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å...
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å...
"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).

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).
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?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?
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
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
Tänkte bara meddela herrn att jag fick paketet idag

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
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å.
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å.
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.
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.