eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikapierwsze początki z winavr
Ilość wypowiedzi w tym wątku: 11

  • 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ý.

strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: