ik zit met een stukje programmeercode waar ik niet uitkomt in .Jal
Het gaat om Lcd_high_low_line_pos(hbyte,lbyte,regel,positie) uit het boek van Bert van Dam 50 microcontroller projecten.
http://www.uploadarchief.net/files/download/50.jpeg
Ik probeer erachter te komen hoe hbyte en lbyte werkt bij deze regel
Als ik een teller wil maken die moet doortellen naar 65535 dan teld hij netjes tot 255 en dan gaat hij met stappen van volgens mij van 8 bit verder tellen
Bv. 256 512 1024 en niet 255 256 257 enz tot 65535.
Hoe moet ik dit oplossen en wat moet ik invullen bij hbyte en lbyte.

Code wat ik bv gebruik:

Include 16f877_bert
Include lcd_44780

Var word teller
Teller = Adc_read(2)

Lcd init

Fover loop

Lcd_high_low_line_pos(0,teller,0,3)
Delay_1ms(500)

End loop

ik hoop dat iemand mij een stukje op weg kan helpen.
Uiteindelijk wil ik bv een pt100 de weerstandwaarde weergeven op display

[Bericht gewijzigd door Henry S. op (1%)]

Dubbeltopics worden hier niet op prijs gesteld.
http://www.circuitsonline.net/forum/view/102711

Verder zitten hier weinig JAL experten (zover ik weet)

ik wist niet hoe ik de andere moest verwijderen.
sorry daarvoor

Topics kunnen uiteraard nooit meer verwijderd worden. Anders kun je ze niet meer terugvinden he...

Ik weet niets van Jal, maar hbyte en lbyte klinkt als een functie waarmee je het hoge en lage byte van een 16 bits waarde kunt bepalen. Als je bv een teller hebt van 16 bits dan loopt het lbyte eerst van 0..255. Bij 1 stapje extra rolt het lbyte over van 255 naar 0 en tegelijkertijd verhoogt het hbyte met 1. Dat gebeurt telkens bij een roll-over van het lbyte.
Ik weet niet of dit helemaal relateerd met je vraag, maar misschien heb je er iets aan.

je helpt me wel op weg maar weet nog niet hoe ik het op de lcd goed moet krijgen en wat ik moet doen om hbyte en lbyte in te stellen

Verder zitten hier weinig JAL experten (zover ik weet)

De gene die JAL heeft ontwikkeld zit op dit forum, maar Er zijn nu al andere versies op internet te downloaden. :)

Ik zie niet in jouw code dat je een tellertje optelt. Tevens laat de code zien d.m.v copy/paste.

De lcd opdracht laat je een getal van 0 tot 65535 printen op een bepaalde regel op een bepaalde positie van je LCD.
Als je dat wilt doen dan tel in je low variable van 0 tot 255, wil je er een bij optellen dan verhoog je je high variabele met 1 en zet je je low variabele weer op nul. Je hebt dan 256. Dan ga je je low variabele weer verhogen, 1,2,3..254 en als je weer bij 255 kom, verhoog je je high variabele weer met 1 en je lw variabele weer op nul. Je bent dan bij 512, en zo ga je verder.

Zoiets als dit,



HighVar = 0
LowVar = 0

Forever loop
Lcd_high_low_line_pos ( highVar, lowVar, 0, 5)

If lowVar < 255 then
  LowVar = lowVar + 1
else
  lowVar = 0
  If highVar < 255 then
     HighVar = highvar + 1
  else
     HighVar = 0
  Endif
endif
End loop

Ik heb een ander boek gehad, maar volgens mij staan er toch voorbeelden in dit boek over het gebruik van deze lcd-bibliotheek

In de documentatie van Jal moet toch een beschrijving van hbyte en lbyte staan? Of is het geen instructie/functie maar een variabele die in het boek als voorbeeld wordt genomen. In jouw (TS) code staat helemaal niets met hbyte...

het is een var benaming in een functie decl.

en om je teller om te zetten naar je low en high variabele gebruik je 'at'
zoals
var myByte[2] at teller

de 'myByte' byte var bezit d.m.v verwijzing de desbetreffende deel van je 'word' i.d.g teller.

dus als je je 'adc in' wilt gebruiken om iets op je scherm te krijgen zal je zoiets als dit moeten doen.

EDIT: even wat betere benaming gegeven voor de vars



var word ADC_value  -- was - var word teller 
var byte ADCBytes[2] at ADC_value -- was - var byte myByte[2] at teller
ADC_HighByte = ADCBytes[1]
ADC_LowByte = ADCBytes[0]

Lcd init
 
Forever loop
  ADC_value = Adc_read(2)

  -- Lcd_high_low_line_pos ( ADBytes[1], ADBytes[0], 0, 5)
  Lcd_high_low_line_pos ( ADC_HighByte, ADC_LowByte, 0, 5)
 
End loop
 

De volgorde in de array van High en Low byte hangt af of je MC little of big endian is. Effe google'n.

Btw, er is een ADC functie wat een highByte en een lowByte terug geeft.

HTH ook een beetje.

bedankt allemaal hier kan ik denk ik wel wat mee ik kan het nou op dit moment niet proberen maar het wordt mij steeds duidelijker ik ga deze info zeker proberen en laat het weten hoe het is gegaan

Is er niet een LCD met word functie. Voor zover ik weet kan een een word in jal op 2 manieren bekijken

  • Als 2 verschillende variabelen elk als 2 verschillende byte's met de high en low byte die samen een 16 bit getal vormen
  • Als 1 enkele variabele als een word die een 16 bit getal vormt

JE zal denk ook wel functies hebben om 2 bytes om te zetten naar een word en andersom.

PS

Ik ben toevallig ook met dat boek bezig ben pas begonnen. Het is een goed boek met duidelijke uitleg.

[Bericht gewijzigd door benleentje op (12%)]

Ik heb de code van -Lord Anubis- deze code heb ik een klein beetje aangepast maar werkt zoals ik het bedoelde super

[b]include 18f4455
include lcd_44780

var word HighVar = 0
var word LowVar = 0
lcd_init
lcd_cursor = off

Forever loop
Lcd_high_low_line_pos ( highVar, lowVar, 0, 5)

If lowVar < 255 then
  LowVar = lowVar + 1
else
  lowVar = 0
  If highVar < 255 then
     HighVar = highvar + 1
  else
     HighVar = 0
  End if
  
end if
delay_1ms(250)
End loop[/b]

bedankt allemaal voor jullie hulp.

[Bericht gewijzigd door Henry S. op (1%)]

Gebruik
Var byte highVar
i.p.v word.

Check even of je LCD_init weg mag blijven laten.
Misschien een volgende uitdaging, laat het resultaat rechts uitgelijnd zijn.

     1
   101
 65000

I.p.v

     1
     101
     65000

En laat nu eens je ADC ingelezen waarde op de lcd zichtbaar worden.

waarom moet het in een byte i.p.v word als ik vragen mag.

Een WORD zijn twee BYTES.
Dus je gebruikt hier 4 bytes, terwijl twee voldoende zijn. De chipjes hebben niet al te veel ruimte voor de code, en verkeerd gebruik van de data type grootte in een groot programma kan dus problemen opleveren.

De LCD functie gebruikt een HighBYTE en een LowBYTE. Bytes dus.

Buiten het feit dat het problemen kan opleveren in eventueel andere situaties is het ook niet de bedoeling van de maker van de Lib functie.
Als je een word gebruikt, zal de functie de onderste 8 bits gebruiken voor HighByte, en dit geld ook voor LowByte, Zou je WORD gebruiken met een waarde groter dan 255, b.v 256 en je zet deze in een functie die een byte verwacht dan krijg de functie de waarde 1 mee, i.p.v 256.

Ook b.v als je je code gaat gebruiken voor een andere type MC die een litleEndian is i.p.v bigEndian ( google ) krijg je problemen.

Gebruik een WORD waar het moet, dit geldt ook voor een BYTE, BIT of NIBBLE.
En iedere data type hier genoemd bestaan uit digits. 1bit is 1digit.

Beetje globaal genomen in dit wereldje

Bit: 1 digit
Nibble: 4 digits
Byte: 8 digits ( vaak 8bits genoemd )
Word: 16bit, 32bit, 64bit afhankelijk van je MC of processor.

Let op een int ( integer ) gebruikt in andere talen is niet per sé 8bits.
Daarom google even naar boven genoemde woorden, b.v "wiki word" of "wiki pic byte"

Later als je het onder de knie hebt kan je trucjes uitvoeren.

HTH