variabele op hd44780 display

trix

Golden Member

hallo,

ik heb ergens in een topic van mij, zijdelings deze vraag ook gesteld, waar beperkte reacties op kwamen.
dus vandaar een nieuw topic.

ik wil op mijn display (4x20) met hd44780, variabele (int & long) laten zien, eigenlijk alleen voor in de test fase. probleem is dat je naar het display alleen "harde" karakters kan sturen.
hoe doe je dit het best/eenvoudigst in C ?
is daar b.v. een aangewezen methode voor ?

tnx.

eigenwijs = ook wijs
buckfast_beekeeper

Golden Member

Wat bedoel je met 'harde' karakters?

Welke librarie gebruik je?

Van Lambiek wordt goede geuze gemaakt.

voor int : itoa()
voor long : ltoa()

Als in:

code:


   char Buffer[20];

   int x = 5;
   itoa(x, Buffer, 10);

   long y = 1000;
   ltoa(y, Buffer, 10);

Dat levert een ASCII string in Buffer die je naar je display kunt sturen.

buckfast_beekeeper

Golden Member

Een goed librarie heeft iets in de richting van putInt en putLng.

Als je wat info zoekt over itoa en ltoa dan kom je vaak dit tegen.

This is a non-standard function. Even though the prototype given is commonly used by compilers on other platforms, there is no guarantee that this function will behave the same on all platforms, in all cases. You can use this function to help port applications from other platforms, but you should avoid using it when writing new applications, in order to ensure maximum portability.

Van Lambiek wordt goede geuze gemaakt.
trix

Golden Member

Op 29 juni 2020 17:50:35 schreef buckfast_beekeeper:
Wat bedoel je met 'harde' karakters?

Welke librarie gebruik je?

harde karakters, tsja,...ik bedoelde eigenlijk dat je alleen letters & cijfers kunt sturen naar het display,.....het is slecht verwoord door mij

ik gebruik een libary gedownload van electrosome.com, moet even zoeken.

komt van deze pagina:
https://electrosome.com/lcd-pic-mplab-xc8/

eigenwijs = ook wijs

harde karakters, tsja,...ik bedoelde eigenlijk dat je alleen letters & cijfers kunt sturen naar het display,.....het is slecht verwoord door mij

Dat is niet waar: je kunt ook custom characters aanmaken...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
trix

Golden Member

klopt, dat wist ik wel :) ....slecht verwoord.

eigenwijs = ook wijs
buckfast_beekeeper

Golden Member

@trix: lees de door je geposte pagina een keer goed. Ik denk dat het antwoord gewoon op de website staat.

sprintf() to Format Outputs

sprintf() can be used to write formatted string to a variable. It can be used with this LCD library to format displayed texts. This enables us to display integers and floating point numbers on the LCD very easily. You should include the header file stdio.h for using sprintf().

Alles rond het gebruik van sprintf kan je hier lezen.

Als je de datasheet van je display er op na slaat, dan staat daar meer dan waarschijnlijk ook de ganse karakter lijst in. Door de juiste waarde naar je display te sturen kan je die ook tevoorschijn toveren.

En zoals Arco ook al zegt, je kan 8 eigen karakters aanmaken. Die kan je opslaan van adres 0 tot 7. Let wel dit is RAM en geen ROM. Elk karakter dien je dan zelf te definiëren. Maar ook daarvan staat een voorbeeld in de datasheet.

Van Lambiek wordt goede geuze gemaakt.

Die display leeft inderdaad alleen een ASCII interface.
En dan kun je sprintf() gebruiken om de strings aan te maken:

code:



   char Buffer[20];

   int a = 12;
   sprintf(Buffer, "Integer = %d", a);
   Lcd_Set_Cursor(2,1);
   Lcd_Write_String(Buffer);

Maar dat is nogal in-efficient want dan komt de string ook in SRam.
Die kun je beter in flash plaatsen met sprintf_P():

code:



   char Buffer[20];

   int a = 12;
   sprintf_P(Buffer, PSTR("Integer = %d"), a);
   Lcd_Set_Cursor(2,1);
   Lcd_Write_String(Buffer);

Zoals gedefinieerd in:

code:


   #include <stdio.h>
   #include <avr/pgmspace.h>

Alles rond het gebruik van sprintf kan je hier lezen.

Nou, alles? Voor Avr-gcc zijn er nog wel een paar extra puntjes van belang die daar niet vermeld staan.

Zie avr-libc-user-manual.pdf
Die komt mee met elke install. Ook met atmet studio, al zit hij wel diep verstopt in de toolchain directory:

"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\doc"

trix

Golden Member

even op me in laten werken en inderdaad nog eens goed lezen.

eigenwijs = ook wijs

Ik gebruik de custom characters altijd voor batterij symbooltjes... ;)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
mel

Golden Member

Ik heb eens een treintje over het display laten rijden :)

u=ir betekent niet :U bent ingenieur..

Als je een print-teken functie hebt, die een enkel teken op je display zet (en ervoor zorgt dat het volgende teken erachter komt) dan kun je vrij eenvoudig printf() gebruiken:

c code:


void print_char(char c)
{
  // do display stuff
}
FILE display_stream = FDEV_SETUP_STREAM(printchar, NULL, _FDEV_SETUP_WRITE);
stdout = &display_stream;

En dan kun je overal printf() gebruiken.