Hallo,
Ik probeer een 2x16 display met de welbekende HD44780 controller aan te sluiten op een PIC16F687, echter krijg ik niet de gewenste tekst. Op de bovenste regel knipperd alleen het eerste blokje. De code is geschreven in het programma Proton IDE.
Ik gebruik de onderstaande code:
Device 16F687
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF
Declare LCD_ENPIN PORTC.6
Declare LCD_RSPIN PORTC.7
Declare LCD_DTPIN PORTC.0
Cls
While 1=1
Print At 1,1,"Test"
WendHet display zelf werkt in ieder geval, want op mijn pic16F628a werkt het wel.
Het display is alsvolgt aangesloten
C6-En
C7-Rs
C0-DB4
C1-DB5
C2-DB6
C3-DB7
Wat doe ik fout?
Adhy
Probeer niet jezelf te zijn, je bent ut al...
ik zie geen init, raar..
Verder denk ik dat hij zo snel door die loop heen raast dat je niet ziet dat hij de tekst schrijft. Doet ie het zonder loop ook niet?
Een init is in picbasic niet nodig.
Code is idd wat raar. Wat beter zou zijn is:
print at 1,1, "Test"
while 1=1
knipperledje
Wend
Dan wordt er maar 1x naar het display geschreven een paar duizend keer per seconde.
Wat je zou kunnen proberen:
Kleine wachttijd (50ms) voordat je naar het display schrijft.
Even duidelijk aangeven dat je 4 data lijnen gebruikt (declare...)
2K weerstandje in de RS en de EN lijnen.
Kijken of alles wel goed aangesloten is.
Op 4 februari 2009 16:43:22 schreef Adhy:
ik zie geen init, raar..Verder denk ik dat hij zo snel door die loop heen raast dat je niet ziet dat hij de tekst schrijft. Doet ie het zonder loop ook niet?
Dit programma werkt in ieder geval op de pic16f628a. Alleen zijn dan natuurlijk de poort nummers aangepast voor de pic16f628a. Dus de snelheid van de loop zal niet het probleem zijn. Het zou inderdaad mooier zijn om er een delay voor te zetten ter stabilisatie van het display.
Op 4 februari 2009 16:49:53 schreef Bas Smit:
Een init is in picbasic niet nodig.Code is idd wat raar. Wat beter zou zijn is:
print at 1,1, "Test"
while 1=1
knipperledje
WendDan wordt er maar 1x naar het display geschreven een paar duizend keer per seconde.
Wat je zou kunnen proberen:
Kleine wachttijd (50ms) voordat je naar het display schrijft.
Even duidelijk aangeven dat je 4 data lijnen gebruikt (declare...)
2K weerstandje in de RS en de EN lijnen.
Kijken of alles wel goed aangesloten is.
Ik heb er de volgende code van gemaakt:
Device 16F687
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF
Declare LCD_TYPE ALPHA
Declare LCD_INTERFACE 4
Declare LCD_ENPIN PORTC.6
Declare LCD_RSPIN PORTC.7
Declare LCD_DTPIN PORTC.0
DelayMS 50
Cls
Print At 1,1,"Test"
While 1=1
High PORTA.0
DelayMS 100
Low PORTA.0
DelayMS 100
Wend[Bericht gewijzigd door Henry S. op (47%)]
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Waarom zitten die 2k weerstanden daar? (Of zitten deze op de print van het display?)
Dingen uitsluiten:
Bijvoorbeeld init tijd verhogen van 50mSec naar 500mSec, je kunt later als het werkt altijd weer terug naar 50mSec.
Knippert het LEDje op PORTA.0?
De 2k weerstanden zitten er op advies van Bas Smit. Het ledje op PORTA.0 knippert, dus het programmeren lijkt ok.
[Bericht gewijzigd door Henry S. op (62%)]
Ik had een keer een brak lcdtje die alleen werkt met een 2K weerstandje in de RS en in de EN lijn. En ik heb het wel eens vaker gelezen hier.
benleentje
Golden Member
De 4 databits moeten altijd de 4 MSB bits zijn. Dus kan alleen op B4-7, C4-7, D4-7. Zo heb ik het begrepen in de proton handleiding.
En de dalay moet iets van 500mS zijn om het display genoeg tijd te geven om zelf ook zijn eigen opstart procedure te doorlopen.
[Bericht gewijzigd door benleentje op (33%)]
Op 4 februari 2009 20:29:40 schreef Bas Smit:
Ik had een keer een brak lcdtje die alleen werkt met een 2K weerstandje in de RS en in de EN lijn. En ik heb het wel eens vaker gelezen hier.
Zou het alleen gebruiken als het anders niet wil.
Ik zie voor de TS meer heil in een delay van 500ms.
@stepic: Heb je bij de 16F628A hetzelfde display gebruikt?
[Bericht gewijzigd door Henry S. op (43%)]
Ja, hetzelfde display
Op 4 februari 2009 20:41:24 schreef benleentje:
De 4 databits moeten altijd de 4 MSB bits zijn. Dus kan alleen op B4-7, C4-7, D4-7. Zo heb ik het begrepen in de proton handleiding.En de dalay moet iets van 500mS zijn om het display genoeg tijd te geven om zelf ook zijn eigen opstart procedure te doorlopen.
Ok...dit zal ik proberen. Maakt het ook nog uit waar de En en Rs op aangesloten worden?
[Bericht gewijzigd door Henry S. op (92%)]
Conclusie: Display werkt, ook zonder weerstanden.
Blijft over de Config van de 16F687, heb je die opgezocht of gewoon overgenomen van de 16F628A?
Wil je http://www.circuitsonline.net/forum/faq#replys en http://www.circuitsonline.net/forum/faq#topickicks even lezen (de rest mag ook) want ik blijf liever niet corrigeren.
Op 4 februari 2009 20:41:24 schreef benleentje:
De 4 databits moeten altijd de 4 MSB bits zijn. Dus kan alleen op B4-7, C4-7, D4-7. Zo heb ik het begrepen in de proton handleiding.
Net even nagelezen, je mag zelf kiezen tussen 0-3 en 4-7 als je het maar met Declare LCD_DTPIN aangeeft.
DECLARE LCD_DTPIN PORT . PIN
Assigns the Port and Pins that the LCD's DT (data) lines will attach to.The LCD may be connected to the PICmicro using either a 4-bit bus or an 8-bit bus. If an 8-bit bus is used, all 8 bits must be on one port. If a 4-bit bus is used, it must be connected to either the bottom 4 or top 4 bits of one port.
Als je het niet aangeeft dan geldt 4-7.
De config instellingen heb ik overgenomen van de PIC16F628a. Ik heb geen idee hoe ik deze "juist" kan instellen.
Edit: Waar kan ik deze config instellingen vinden?
[Bericht gewijzigd door stepic op (19%)]
Ah daar komt de aap al uit de mouw.
Daar is dus de datasheet oa voor bedoeld, samen met de Fuse Configurator plugin is het met een beetje inzicht zo gefixt.
Alle namen van de config bits staan ook in de P16F687.lpb file.
benleentje
Golden Member
Oops weer een foutje van mijn kant. Wie houd de score bij. Als de config niet goed is zou de compiler toch al meteen een error geven.
De namen van de config bits heb ik opgezocht in file. Dank daarvoor!
Mijn probleem is alleen dat ik niet weet welke bitjes ik in het register hoog of laag moet zetten. De datasheet heb ik bekeken en ook de juiste pagina hiervoor gevonden, echter kom ik niet echt verder...
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Het zal waarschijnlijk al een stuk schelen als je port C eerst eens als digitale I/O configureert... 
Op 5 februari 2009 08:47:14 schreef Arco:
Het zal waarschijnlijk al een stuk schelen als je port C eerst eens als digitale I/O configureert...
Dat doe je al met DECLARE LCD_DTPIN PORT . PIN
Toch maar een correcte config.
Op 4 februari 2009 23:35:05 schreef stepic:
De namen van de config bits heb ik opgezocht in file. Dank daarvoor!
Mijn probleem is alleen dat ik niet weet welke bitjes ik in het register hoog of laag moet zetten. De datasheet heb ik bekeken en ook de juiste pagina hiervoor gevonden, echter kom ik niet echt verder...
Handig om te vertellen wat je er niet van snapt.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Dat doe je al met DECLARE LCD_DTPIN PORT . PIN
Schijnbaar niet. Want nu werkt het wel. ANSEL registers staan default op analoog.
Vreemd, dat hoort Proton+ allemaal voor je te regelen met de LCD commando's.
En als de LCD op de default poorten wordt aangesloten zonder enige Declare.
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Ik heb het (nog) niet onderzocht, maar DECLARE LCD_DTPIN informeert hoogstwaarschijnlijk de compiler alleen maar waar het display op aangesloten zit, maar stelt de poort niet om van analoog naar digitaal (wel van ingang naar uitgang).
Het plaatsen van ALL_DIGITAL = TRUE schakelt de analoge delen uit, zoals in de hele cursus bovenaan alle voorbeelden is geplaatst (tenzij met reden weggelaten).
Maar PRINT kan je zonder ALL_DIGITAL = TRUE gebruiken. DECLARE LCD_DTPIN is idd niet meer dan een setting.