Ik heb een probleem met een programma , dit heb ik nu helemaal uitgekleed zodat aleen het display "iets" moet weergeven.
Probleem :display geeft maar 8 letters weer. terwijl dit een 1 x 16 , HD44780 compatible.
Wat zie ik over het hoofd.


Device = 16F628A   
Config XT_OSC , WDT_OFF, PWRTE_ON, LVP_OFF, BODEN_OFF, MCLRE_OFF
  
All_Digital TRUE              ;Alle ingangen digitaal  
Xtal 4
'---------------------------LCD-------------------------------- 	
Declare		LCD_DTPin = PORTB.0
Declare         LCD_RSPin = PORTB.4
Declare		LCD_ENPin = PORTA.3
Declare		LCD_Interface = 4	' 4-bit Interface
Declare		LCD_Lines = 1
Declare		LCD_Type = ALPHA
'--------------------------Poorten------------------------------
Symbol SDA = PORTA.1         'I2C op poort a1   
Symbol SCL = PORTA.0         'I2C op poort a0
Symbol LED = PORTA.2         'ledverl. op poort a2

       ' 76543210
PORTA = %00000000             ;PORTA uitgangen bij opstart een laag niveau
TRISA = %11111011             ;PORTA.2 is een uitgang voor de LED
PORTB = %00000000             ;PORTB uitgangen bij opstart een laag niveau
TRISB = %11111111             ;PORTA.2 is een uitgang voor de LED   
Clear                         ;Wis alle RAM geheugen 
DelayMS 500                   ;LCD stabilisering 
'--------------------------------------------------
bas:

Cls
High LED
Print "Display Test"
DelayMS 300
GoTo set_button

'----------------------Frequentie set -------------------------
 
set_button:

DelayMS 20
If  PORTB.5=1   Then    LCD_Led_Off
If  PORTB.7=1   Then    LCD_Led_On

GoTo set_button

LCD_Led_On:

High LED                'Achtergrond verl aan      
GoTo set_button

LCD_Led_Off:

Low LED                 'Achtergrond verl uit      
 
GoTo set_button
End

Sommige van die displays worden gezien als 2 regelig display: 1...8 op regel 1, en 9...16 op regel 2... ;)
Probeer het eens als 2 regelig display in te stellen. (en de tekst dan in twee delen versturen)

Gebruik Print At. Alleen Print verschuift de cursor zodat er al snel niets meer zichtbaar is.
Om te kijken of het aansturen van 1 regel goed gaat zou je het volgende kunnen doen:
Print at 1,1, "Regel1-1"
Print at 1,9, "Regel1-9"
Print at 2,1, "Regel2-1"
Print at 2,9, "Regel2-9"

Wat vaak ook werkt (hangt van de library af) is sturen als een string met 8 spaties erin:

 "<karakters 1...8> <8 spaties> <karakters 9...16>"

Arco heeft gelijk... dit is waarschijnlijk een display van '2x8' regels. Deze twee regels beginnen elk op een locatie in het RAM van de display. De eerste weet je (want je eerste letters komen op de goede plaats), maar de tweede 'regel' begint waarschijnlijk op een plek die anders is dan je library aanneemt. Dus:

- Datasheet van het display lezen!
- RAM locatie van de tweede regel in de library aanpassen

En dan werkt het wel...

Alternatief kun je uitzoeken waar de RAM locatie begint door een heel lang woord te sturen (dan begint het 'ergens' weer): Dan weet je de offset, en kun je daar programmatisch rekening mee houden...

Just my two cents...

Fripster

Dat was het dus


Print At 1,1, "regel 1"
Print At 2,1, "regel 2"

Overblijfsel uit het verre verleden... ;)
Doordat de displays vanaf 1x8 steeds groter werden, moest er steeds weer iets worden gedaan om de dataregisters groot genoeg te houden.

Dat resulteerde soms in wat kromme constructies zoals deze... (er zijn nog wel meer van dat soort uitzonderingen)
In het begin was ram ook duur, dus iedere byte die uitgespaard kon worden was meegenomen.

Op 9 juli 2017 12:36:00 schreef fripster:
- RAM locatie van de tweede regel in de library aanpassen

PicBasic werkt voor de standaard elementen uit de syntax niet met libraries, dus dat wordt moeilijk.

@hadv: oeh dat is lastig... Ik moest het eens in WiringPI doen, maar daar waren alle sources beschikbaar.... Gelukkig is er een andere methode gevonden.

Zo'n display aansturen is niet echt 'rocket science'... :)
In een half uurtje heb je dat wel werkend met weinig code in een zelfgeschreven routine.