RTV forum PL | NewsGroups PL

Jak wyświetlić zmienną na LCD przy użyciu WinAVR i AVR Studio 4?

pierwsze początki z winavr

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wyświetlić zmienną na LCD przy użyciu WinAVR i AVR Studio 4?

janek
Guest

Sat Mar 31, 2012 8:08 am   



Witam,
zaczynam zabawę z avrstudio4 , znalazlem na elektrodzie program obsługi lcd
i mam kłopot.
Potrafię wyświetlić tekst, ale jak wyświetlić zmienną a ?
Listing poniżej:
-------------------------------------------------------------------------------------
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>

//Tu należy zdefiniować piny , używane do sterowania wyśw. LCD
//Sygnał R/W podpięty na stałe do GND
#define RSPIN PC1 //numer bitu dla linii RS
#define EPIN PC0
#define D4PIN PB0
#define D5PIN PD7
#define D6PIN PD6
#define D7PIN PD5

#define RSPORT PORTC //port do którego podłączono linię RS
#define EPORT PORTC
#define D4PORT PORTB
#define D5PORT PORTD
#define D6PORT PORTD
#define D7PORT PORTD

#define RSDDR DDRC //port konfiguracyjny linii RS
#define EDDR DDRC
#define D4DDR DDRB
#define D5DDR DDRD
#define D6DDR DDRD
#define D7DDR DDRD
//koniec definicji pinów LCD

//Takie sobie uproszczenia Wink
#define SET_D4 D4PORT|=(1<<D4PIN)
#define SET_D5 D5PORT|=(1<<D5PIN)
#define SET_D6 D6PORT|=(1<<D6PIN)
#define SET_D7 D7PORT|=(1<<D7PIN)

#define CLR_D4 D4PORT&=~(1<<D4PIN)
#define CLR_D5 D5PORT&=~(1<<D5PIN)
#define CLR_D6 D6PORT&=~(1<<D6PIN)
#define CLR_D7 D7PORT&=~(1<<D7PIN)

#define SET_E EPORT|=(1<<EPIN)
#define CLR_E EPORT&=~(1<<EPIN)
#define SET_RS RSPORT|=(1<<RSPIN)
#define CLR_RS RSPORT&=~(1<<RSPIN)
#define CLRDISP 0x01
#define HOMEDISP 0x02
//koniec uproszczeń

void LCDresetdata(void) //wyzeruj szynę danych LCD
{
CLR_D4;
CLR_D5;
CLR_D6;
CLR_D7;
}
void LCDwrite(char d) //zapis bajtu do LCD
{
LCDresetdata();
if(d & 0x10){SET_D4;}
if(d & 0x20){SET_D5;}
if(d & 0x40){SET_D6;}
if(d & 0x80){SET_D7;}
SET_E;CLR_E;
LCDresetdata();
if(d & 0x01){SET_D4;}
if(d & 0x02){SET_D5;}
if(d & 0x04){SET_D6;}
if(d & 0x08){SET_D7;}
SET_E;CLR_E;
_delay_ms(2);
}
void LCDconfigIO(void) //wszystkie piny do których podłączony jest LCD jako
wyjście
{
RSDDR|=(1<<RSPIN);EDDR|=(1<<EPIN);D4DDR|=(1<<D4PIN);
D5DDR|=(1<<D5PIN);D6DDR|=(1<<D6PIN);D7DDR|=(1<<D7PIN);
}
void LCDcmd(char d) //Wyślij komendę do LCD
{
CLR_RS;
LCDwrite(d);
}
void LCDchr(char d) //Wyślij 1 znak do LCD
{
SET_RS;
LCDwrite(d);
}
void LCDinit(void) //inicjalizacja LCD
{
LCDconfigIO();
CLR_RS;
CLR_E;
_delay_ms(20);
CLR_D7;
CLR_D6;
SET_D4;
SET_D5;
unsigned char i;
for(i=0;i<3;i++) {SET_E;CLR_E;_delay_ms(5);}
CLR_D4;
SET_E;
CLR_E;
_delay_ms(5);
LCDcmd(0x28); //function set - interface=4 bit,line=2,font=5x7
LCDcmd(0x0c); //display ctrl - display on
LCDcmd(0x06); //entry mode set - increment
LCDcmd(0x01); //clear display

}
//wyczyść wyśw.
void LCDcls(void) {LCDcmd(CLRDISP);}
//ustaw kursor na pozycji 0,0
void LCDhome(void) {LCDcmd(HOMEDISP);}
//wyślij tekst z RAM na wyśw.
void LCDtext(char *txt) {while(*txt) {LCDchr(*txt++);}}
//umieść kursor na pozycji x,y - brak kontroli dla x i y
void LCDxy(char x,char y)
{
unsigned char com=0x80;
com|=(x|(y<<6));
LCDcmd(com);
}


// program główny
int main(void)
{

LCDinit();
while(1)
{
unsigned char a=4;
_delay_ms(300);
LCDxy(0,0);
LCDtext("ff");
_delay_ms(300);
LCDcls();
}
return 0;
}

Piotrek_P
Guest

Sat Mar 31, 2012 8:35 am   



Użytkownik "janek" <to_nie_tu@wp.pl> napisał w wiadomości
news:jl6e18$301$1@news.icm.edu.pl...
Quote:
Witam,
zaczynam zabawę z avrstudio4 , znalazlem na elektrodzie program obsługi
lcd i mam kłopot.
Potrafię wyświetlić tekst, ale jak wyświetlić zmienną a ?
[...]

Poczytaj o instrukcji itoa{...).
A tak wogóle to zacznij od jakiegoś kursu C dla AVR albo kup dobrąą książkę.

PP

Grzegorz Niemirowski
Guest

Sat Mar 31, 2012 10:55 am   



Piotrek_P <pilik@op.pl> napisał(a):
Quote:
[...]
Poczytaj o instrukcji itoa{...).
A tak wogle to zacznij od jakiego kursu C dla AVR albo kup dobr ksik.
PP

Dokładnie, bo problem nie jest związany ani z AVR Studio ani z LCD. Tak na
szybko, jeśli zmienna ma wartość od 0 do 9, to można zrezygnować z itoa i do
zmiennej dodać '0'.

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 16 days, 10 hours, 56 minutes and 9 seconds

Mario
Guest

Sat Mar 31, 2012 1:16 pm   



W dniu 2012-03-31 10:08, janek pisze:
Quote:
Witam,
zaczynam zabawę z avrstudio4 , znalazlem na elektrodzie program obsługi
lcd i mam kłopot.
Potrafię wyświetlić tekst, ale jak wyświetlić zmienną a> Listing poniżej:

Nie pamiętam już avrgcc ale w gcc dla arma używam sprintf aby zapisać
zmienną do łańcucha tekstowego:

sprintf(cOutBuff,"%u",usHighVoltSignal );

gdzie
char cOutBuff[40];
unsigned short usHighVoltSignal;

Można tę wartość poprzedzić od razu tekstem:

sprintf(cOutBuff,"%s","HI=");sprintf(cOutBuff+strlen(cOutBuff),"%u",usHighVoltSignal
);

W cOutBuff będzie teraz przykładowo tekst: Hi=1234
Tak jak pisałem avrgcc nie pamiętam ale chyba powinno dać radę użyć
LCDtext(cOutBuff) aby wysłać tekst do LCD. cOutBuff powinny być
zinterpretowane jako wskaźnik do początku łańcucha a OIDP dopuszcza się
użycie LCDtext(*text).

--
pozdrawiam
MD

Waldemar Krzok
Guest

Sat Mar 31, 2012 1:30 pm   



Mario wrote:

Quote:
W dniu 2012-03-31 10:08, janek pisze:
Witam,
zaczynam zabawę z avrstudio4 , znalazlem na elektrodzie program obsługi
lcd i mam kłopot.
Potrafię wyświetlić tekst, ale jak wyświetlić zmienną a> Listing poniżej:

Nie pamiętam już avrgcc ale w gcc dla arma używam sprintf aby zapisać
zmienną do łańcucha tekstowego:

sprintf(cOutBuff,"%u",usHighVoltSignal );

gdzie
char cOutBuff[40];
unsigned short usHighVoltSignal;

Można tę wartość poprzedzić od razu tekstem:


sprintf(cOutBuff,"%s","HI=");sprintf(cOutBuff+strlen(cOutBuff),"%u",usHighVoltSignal
);

Nie znam avrgcc, ale nie wystarczy

sprintf(cOutBuff,"HI=%u",usHighVoltSignal);

??

Oprócz tego trzeba uważać, bo coponiektóre kompilatory ładują kompletne
biblioteki (też float), jak się używa *printf i z programiku 500 bytów robi
się krowa z 20k i więcej. Wtedy czasem warto zrobić własną konwersję lub
korzystać z itoa lub podobnych funkcji.

Waldek
--
My jsme Borgové. Sklopte štíty a vzdejte se. Odpor je marný.

Piotrek_P
Guest

Sat Mar 31, 2012 1:36 pm   



Użytkownik "Mario" <mariuszd@w.pl> napisał w wiadomości
news:jl7061$215$1@mx1.internetia.pl...
Quote:
Nie pamiętam już avrgcc ale w gcc dla arma używam sprintf aby zapisać
zmienną do łańcucha tekstowego:

sprintf(cOutBuff,"%u",usHighVoltSignal );

Kolega janek prosił o pomoc w sprawie AVR. ARMy to inna bajka. Używanie

instrukcji sprintf(...) w przypadku AVR jest marnowaniem zasobów procesora.
Na ARMie można sobie lekką ręką korzystać z sprinf(...).

PP

Mario
Guest

Sat Mar 31, 2012 2:37 pm   



W dniu 2012-03-31 15:36, Piotrek_P pisze:
Quote:
Użytkownik "Mario"<mariuszd@w.pl> napisał w wiadomości
news:jl7061$215$1@mx1.internetia.pl...
Nie pamiętam już avrgcc ale w gcc dla arma używam sprintf aby zapisać
zmienną do łańcucha tekstowego:

sprintf(cOutBuff,"%u",usHighVoltSignal );

Kolega janek prosił o pomoc w sprawie AVR. ARMy to inna bajka. Używanie
instrukcji sprintf(...) w przypadku AVR jest marnowaniem zasobów procesora.
Na ARMie można sobie lekką ręką korzystać z sprinf(...).

Nie ma zmiłuj. Albo itoa albo sprintf. Chyba, że jakaś własna konwersja
do bcd i dodawanie 0x30.

--
pozdrawiam
MD

Mario
Guest

Sat Mar 31, 2012 2:40 pm   



W dniu 2012-03-31 15:30, Waldemar Krzok pisze:
Quote:
Mario wrote:

W dniu 2012-03-31 10:08, janek pisze:
Witam,
zaczynam zabawę z avrstudio4 , znalazlem na elektrodzie program obsługi
lcd i mam kłopot.
Potrafię wyświetlić tekst, ale jak wyświetlić zmienną a> Listing poniżej:

Nie pamiętam już avrgcc ale w gcc dla arma używam sprintf aby zapisać
zmienną do łańcucha tekstowego:

sprintf(cOutBuff,"%u",usHighVoltSignal );

gdzie
char cOutBuff[40];
unsigned short usHighVoltSignal;

Można tę wartość poprzedzić od razu tekstem:


sprintf(cOutBuff,"%s","HI=");sprintf(cOutBuff+strlen(cOutBuff),"%u",usHighVoltSignal
);

Nie znam avrgcc, ale nie wystarczy

sprintf(cOutBuff,"HI=%u",usHighVoltSignal);

??

W sumie to już nie pamiętam czemu tak napisałem Smile Inaczej jakoś mi nie
wychodziło, a to były moje początki z ARM. No i tak już zostało.


--
pozdrawiam
MD

Mario
Guest

Sat Mar 31, 2012 2:43 pm   



W dniu 2012-03-31 15:36, Piotrek_P pisze:
Quote:
Użytkownik "Mario"<mariuszd@w.pl> napisał w wiadomości
news:jl7061$215$1@mx1.internetia.pl...
Nie pamiętam już avrgcc ale w gcc dla arma używam sprintf aby zapisać
zmienną do łańcucha tekstowego:

sprintf(cOutBuff,"%u",usHighVoltSignal );

Kolega janek prosił o pomoc w sprawie AVR. ARMy to inna bajka. Używanie
instrukcji sprintf(...) w przypadku AVR jest marnowaniem zasobów procesora.
Na ARMie można sobie lekką ręką korzystać z sprinf(...).

Funkcja jest w bibliotece. Nie wiadomo na ile ten procesor jest zajęty,
że nie można go obciążać. Nie ma zmiłuj. Albo itoa albo sprintf. Chyba,
że jakaś własna konwersja do bcd i dodawanie 0x30 do każdej cyfry.


--
pozdrawiam
MD

Waldemar Krzok
Guest

Sat Mar 31, 2012 3:09 pm   



Mario wrote:

Quote:
W dniu 2012-03-31 15:36, Piotrek_P pisze:
Użytkownik "Mario"<mariuszd@w.pl> napisał w wiadomości
news:jl7061$215$1@mx1.internetia.pl...
Nie pamiętam już avrgcc ale w gcc dla arma używam sprintf aby zapisać
zmienną do łańcucha tekstowego:

sprintf(cOutBuff,"%u",usHighVoltSignal );

Kolega janek prosił o pomoc w sprawie AVR. ARMy to inna bajka. Używanie
instrukcji sprintf(...) w przypadku AVR jest marnowaniem zasobów
procesora. Na ARMie można sobie lekką ręką korzystać z sprinf(...).

Funkcja jest w bibliotece. Nie wiadomo na ile ten procesor jest zajęty,
że nie można go obciążać. Nie ma zmiłuj. Albo itoa albo sprintf. Chyba,
że jakaś własna konwersja do bcd i dodawanie 0x30 do każdej cyfry.

Czasem jest właśnie to lepsze. Jak już pisałem, miałem do czynienia z jakimś
poj... kompilatorem, który na dzień dobry dołączał kompletną (!) bibliotekę
zmiennoprzecinkową, jak tylko miało się sprintf, choćby z samym integerem.
Chyba nawet nie użyłem itoa tylko zrobiłem konwersję piechty (% 10 i / 10) i
wpisywałem od razu na odpowiednie pozycje w stringu.

Waldek

--
My jsme Borgové. Sklopte štíty a vzdejte se. Odpor je marný.

Adam Wysocki
Guest

Tue Apr 03, 2012 10:14 am   



Mario <mariuszd@w.pl> wrote:

Quote:
Nie pamiętam już avrgcc ale w gcc dla arma używam sprintf aby zapisać
zmienną do łańcucha tekstowego:

sprintf to zły nawyk, używaj snprintf.

--
Gof

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wyświetlić zmienną na LCD przy użyciu WinAVR i AVR Studio 4?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map