-
1. Data: 2012-03-31 10:08:10
Temat: pierwsze początki z winavr
Od: "janek" <t...@w...pl>
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 ;)
#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;
}
-
2. Data: 2012-03-31 10:35:02
Temat: Re: pierwsze początki z winavr
Od: "Piotrek_P" <p...@o...pl>
Użytkownik "janek" <t...@w...pl> napisał w wiadomości
news:jl6e18$301$1@news.icm.edu.pl...
> 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
-
3. Data: 2012-03-31 12:55:27
Temat: Re: pierwsze pocztki z winavr
Od: "Grzegorz Niemirowski" <g...@p...onet.pl>
Piotrek_P <p...@o...pl> napisał(a):
> [...]
> 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
-
4. Data: 2012-03-31 15:16:31
Temat: Re: pierwsze początki z winavr
Od: Mario <m...@...pl>
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
);
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
-
5. Data: 2012-03-31 15:30:28
Temat: Re: pierwsze początki z winavr
Od: Waldemar Krzok <w...@z...fu-berlin.de>
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);
??
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ý.
-
6. Data: 2012-03-31 15:36:12
Temat: Re: pierwsze początki z winavr
Od: "Piotrek_P" <p...@o...pl>
Użytkownik "Mario" <m...@...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(...).
PP
-
7. Data: 2012-03-31 16:37:21
Temat: Re: pierwsze początki z winavr
Od: Mario <m...@...pl>
W dniu 2012-03-31 15:36, Piotrek_P pisze:
> Użytkownik "Mario"<m...@...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
-
8. Data: 2012-03-31 16:40:07
Temat: Re: pierwsze początki z winavr
Od: Mario <m...@...pl>
W dniu 2012-03-31 15:30, Waldemar Krzok pisze:
> 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 :) Inaczej jakoś mi nie
wychodziło, a to były moje początki z ARM. No i tak już zostało.
--
pozdrawiam
MD
-
9. Data: 2012-03-31 16:43:31
Temat: Re: pierwsze początki z winavr
Od: Mario <m...@...pl>
W dniu 2012-03-31 15:36, Piotrek_P pisze:
> Użytkownik "Mario"<m...@...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
-
10. Data: 2012-03-31 17:09:45
Temat: Re: pierwsze początki z winavr
Od: Waldemar Krzok <w...@z...fu-berlin.de>
Mario wrote:
> W dniu 2012-03-31 15:36, Piotrek_P pisze:
>> Użytkownik "Mario"<m...@...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ý.