Sodjans PIC-> HD44780 kod. Jag har kört fast!

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Sodjans PIC-> HD44780 kod. Jag har kört fast!

Inlägg av Variosboy »

Håller på att testa sodjans exempelkod för HD44780, men jag har kört fast på första rutan typ..

Har gjort ett nytt projekt i MPLAB, kopierat in koden i en tom asm-fil.
Trots att jag lagt till .inc och -lkr filerna så får jag felmdelandet:
"Symbol not previously defined..." på massor av direktiv.

Vad behöver ni veta mer för information för att hjälpa mig!? Gör jag något tokigt nybörjarfel?

Filerna jag lagt till heter:
P16F886.INC
16F886.LKR
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

INC med #include och LKR som "Linker Script", hoppas jag...

Project -> Build options -> Project -> MPASM Assembler -> Disable Case Sensitivity.

EDIT:
Case Sensitivity har jag även nämnt här : http://www.jescab.se/Info_MPLAB.html
Det finns ingen anledning att köra med det påslaget, det blir bara en
massa larviga fel...
:-)
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Inlägg av Variosboy »

Tackar! :)
Case sensitivity inställningen gjorde susen!

Nu ska jag ge mig på att ändra koden så den passar till min 628A, så förmodligen skriver jag här snart igen när min hjärna går ner på tomgång! :wink:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK.
Grovt sett:
- Ändra __CONFIG
- Byt ANSEL mot COMCON ( se datablad för rätt värde)
- Byt INC och LKR filer
- Justera lcd_text2 :-)
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Inlägg av Variosboy »

Ändringen av __config, byte av inc, lkr gick bra. Men menade du ansel mot cmcon eller?

texten ändrad också :)

MEN, :D nu när jag kör: "build all" så gnäller den på eeadrh, och enligt det jag kan läsa mig till i databladen så finns ju inte eeadrh med i 628:an..

Är inte riktigt med på hur jag ska lösa det kodmässigt, finns det något mer att läsa om flash tro.. får kika lite på microchips hemsida..
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Men menade du ansel mot cmcon eller?

Ja, det är ju ganska upenbart om du kollar PORTx delen av databladet
och kodexemplet som finns där.

Och just det ja !

628A kan inte läsa direkt från sitt eget Flash-minne, i alla fall
inte på samma sätt som en modernare 886 kan. 628A kan bara
läsa direkt från EEPROM. Så det går inte alls att göra på samma sätt
som i exemplet på hemsidan. Jag antar att man kan byta "data"
direktiven som skapar texterna mot motsvarande för EEPROM, men
det får du kolla upp i MPASM manualen...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Läs databladet, Du kommer inte undan hur Du än gör. :wink:


Regstren för hög adress/data finns inte eftersom 628 saknar denna funktionalitet. Samma sak med biten för att välja om eeprom eller programflash skall adresseras.

Kom för all del även ihåg att PA4 är open collector, den kan alltså inte driva t.ex. en LCD utan att Du monterar en extern pull-upp på denna, eller som en bättre lösning väljer en annan port/pinne.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Eller en modernare PIC... :-)
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Inlägg av Variosboy »

:D

Har suttit å läst igenom databladet för EEPROM och jag märker att jag var ute igårkväll för jag får läsa varje rad tre gånger, får nog bli en PIC-beställning istället, behöver ändå köpa på mig fler, och 886:an har ju lite andra finnesser som skulle kunna göra mitt projekt roligare framgent.

men jag ska ändå sätta mig ner i morgon och läsa på så jag förstår vad som händer i koden..

Visst, klippa och klistra är ett snabbt sätt att se resultat, men jag vill veta Exakt vad som händer i mina program..

Tack för alla hjälp hittils Sodjan!
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

En PIC16 är alltid en PIC16. De funktioner som redan finns där blir inte mycket bättre av att välja en annan modell. Det är främst om det krävs mera minne, mera enheter, mera pinnar e.dyl. som det är någon större mening att byta.

Proceduren för att läsa programminne via eeprom-funktionen är så stökig att den ger föga fördelar, om ens några, över att använda retlw för att implementera tabeller. Den övre halvan av 14-bit instruktionsordet förblir troligen outnyttjad och då kan det lika väl ligga opkoden för retlw där.

Vill Du ha nya funtioner på instruktionerna och bättre sätt att läsa från programminnet så är det PIC18 som gäller. Där finns en instruktion som enkelt läser från tabeller och utnyttjar båda halvorna av 16-bit instruktionsorden. Har även autoinkrement. Lite skillnad mot hela den sekvens för att få ut en enda avläsning som gäller för PIC16...
Användarvisningsbild
Variosboy
Inlägg: 834
Blev medlem: 5 september 2005, 17:10:03
Ort: kristinehamn

Inlägg av Variosboy »

Okey, synd priserna på dessa (p18...) bara, men å andra sidan spar man ju tid på enklare kodning. Å tid är ju som bekant pengar! :)

Tips på någon vettig 18-pic som jag ska kika in?
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

18F1230/1330 är väl det som ligger närmast. De "hårda" pinnarna sitter lika som på 628, men portpinnarna är tyvärr fördelade annorlunda. Det finns inte så många 18-pin PIC-18 att välja på. De andra är 1220/1320, men de är inte lika avancerade och saknar bl.a. 32MHz intosc.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Marta> En PIC16 är alltid en PIC16.

Jo... :-)

Men det är faktiskt en viss skillnad på olika generationer av PIC16.
628A tillhär en mellan-generation där 16F84A ligger "under" och
F88, F88x, F688 o.s.v. tillhör de senare.

En stor skillnad är t.ex den mycket mer flexibla interna oscillatorn
(INTOSC) på de senare modellerna. Och nog är det enklare att läsa
"strängar" i Flash via EE-registren än via RETLW...

Men visst, PIC18 tillför ett antal olika smidiga finesser, och för
hemmapularn där ett par tior hit eller dit inte spelar någon roll,
så fungerar de naturligtsivs utmärkt.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Visst är där mycket användbart i de nyare, helt rätt att oscillatorblocket är betydligt kraftfullare med många nya både snabbare och långsammare/strömsnålare val.

När det gäller läsa strängar så är det väl lite tveksamt vad som är lättast.

subrutin för att läsa:
hämta pekare
inkrementera pekare
stoppa pekare i pcl

Med >2K flash kan det bli lite stökigarre om pclath behöver hanteras

alternativt

subrutin för att läsa:
skifta minnesbank
sätt läsning till flashminne
sätt läsflaggan
nop
nop
inkrementera adressen
skifta minnesbank
läs data
skifta minnesbank
return

Visst kan man använda minnet lite effektivare, men då med ännu mera stök, för att t.ex.lägga två 7-bit tecken i varje programrad. Får ju medges att det kan spara en hel del minne om det är mycket text som skall visas och kanske vara tungan på vågen för att en viss storlek på flash skall räcka. Men det är knappast enklare.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Med >2K flash kan det bli lite stökigarre om pclath behöver hanteras

Ja, med den äldre RETLW metoden.
Med EEADRL/EEADRH har man inte det problemet, de läser
direkt hela Flash utan PCLATH eller page-ning.
Skriv svar