<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=8127&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-15T21:48:09+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8127&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-08-15T21:48:09+01:00</updated>
<published>2014-08-15T21:48:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91657#p91657</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91657#p91657"/>
<title type="html"><![CDATA[Re: Problem z odczytem i zapisem do pamięci eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91657#p91657"><![CDATA[
Witam<br />U mnie kompilacja przeszła bez problemu:<br /><a href="http://forum.atnel.pl/_obrazki/o/826/8b689e58d3c709912b00a20b82c75a2c.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/826/8b689e58d3c709912b00a20b82c75a2c.JPG" alt="Obrazek" /></a><br />To chyba bez znaczenia ale  plik &quot;lcd.h&quot; zacząłem od <br />[syntax=c]#ifndef LCD_H_<br />#define LCD_H_[/syntax]<br />a kończę:<br />[syntax=c]#endif /* LCD_H_ */[/syntax]<br /><br />...czyli troszkę inaczej niż jest u Ciebie.<br /><br />edit: coś mu jednak nie pasuje bo są kłopoty z zapisywaniem - sory, ale już idę spać.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 15 sie 2014, o 21:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirost]]></name></author>
<updated>2014-08-15T20:31:41+01:00</updated>
<published>2014-08-15T20:31:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91643#p91643</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91643#p91643"/>
<title type="html"><![CDATA[Re: Problem z odczytem i zapisem do pamięci eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91643#p91643"><![CDATA[
A czy mógłby ktoś sprawdzić czy u niego się to kompiluje?? Bo cos mi się wydaje ze to może być jakiś problem albo z linkerem, albo z  biblioteką, przynajmniej tyle udało mi się do tej pory dowiedzieć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5401">mirost</a> — 15 sie 2014, o 20:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-08-14T12:47:07+01:00</updated>
<published>2014-08-14T12:47:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91513#p91513</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91513#p91513"/>
<title type="html"><![CDATA[Re: Problem z odczytem i zapisem do pamięci eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91513#p91513"><![CDATA[
Witam<br />Przeedytuj zamieszczony tu program - &quot;SYNTAX wybierz&quot;, a następnie po rozwinięciu daj &quot;C&quot;; trochę źle się to czyta.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 14 sie 2014, o 12:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirost]]></name></author>
<updated>2014-08-14T17:08:19+01:00</updated>
<published>2014-08-14T00:58:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91466#p91466</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91466#p91466"/>
<title type="html"><![CDATA[Re: Problem z odczytem i zapisem do pamięci eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91466#p91466"><![CDATA[
Aha faktycznie makrodefinicja, to wiele wyjaśnia <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. nagłówek dodaję i w &quot;lcd.c&quot; bo są tam odwołania do tych pamięci, i w pliku &quot;main.c&quot; żeby zapisywać tam zmienne.<br /><br />Dalej nie mogę dojść do ładu z tym i nie wiem co źle robię dlatego wrzucam kod który do tej pory napisałem<br /><br />lcd.c<br /><br />[syntax=c]#include &quot;lcd.h&quot;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />//Definicja adresow DDRAM<br />#if ((LCD_Y == 4) &amp;&amp; (LCD_X == 20))<br />#define LCD_LINE1 0x00 // adres 1 znaku 1 wiersza<br />#define LCD_LINE2 0x28 // adres 1 znaku 2 wiersza<br />#define LCD_LINE3 0x14 // adres 1 znaku 3 wiersza<br />#define LCD_LINE4 0x54 // adres 1 znaku 4 wiersza<br />#else<br />#define LCD_LINE1 0x00 // adres 1 znaku 1 wiersza<br />#define LCD_LINE2 0x40 // adres 1 znaku 2 wiersza<br />#define LCD_LINE3 0x10 // adres 1 znaku 3 wiersza<br />#define LCD_LINE4 0x50 // adres 1 znaku 4 wiersza<br />#endif<br /><br />// Makra dostepu do portow<br />// PORT<br />#define PORT(X) SPORT(X)<br />#define SPORT(X) (PORT##X)<br />// PIN<br />#define PIN(X) SPIN(X)<br />#define SPIN(X) (PIN##X)<br />// DDR<br />#define DDR(X) SDDR(X)<br />#define SDDR(X) (DDR##X)<br /><br />// Makrodefinicje na sygnalach sterujacych RS, RW, E<br />#define SET_RS (PORT(LCD_RSPORT) |= (1 &lt;&lt; LCD_RS))     // stan wysoki na linii RS<br />#define CLR_RS (PORT(LCD_RSPORT) &amp;= ~(1 &lt;&lt; LCD_RS))    // stan niski na linii RS<br />#define SET_RW (PORT(LCD_RWPORT) |= (1 &lt;&lt; LCD_RW))    // stan wysoki na linii RW<br />#define CLR_RW (PORT(LCD_RWPORT) &amp;= ~(1 &lt;&lt; LCD_RW))    // stan niski na linii RW<br />#define SET_E (PORT(LCD_EPORT) |= (1 &lt;&lt; LCD_E))     // stan wysoki na linii E<br />#define CLR_E (PORT(LCD_EPORT) &amp;= ~(1 &lt;&lt; LCD_E))    // stan niski na linii E<br /><br />// definicje cmd<br />#define LCDC_CLS            0b00000001    // czyszczenie wyœwietlacza<br />#define LCDC_HOME           0b00000010    // ustawienie kursora w poz 0.0<br /><br />#define LCDC_ENTRY          0b00000100    // Okreslenie trybu pracy kursora/ okna wyswietlacza<br />#define LCDC_ENTRYR         0b00000010    // Przesuwanie kursora lub okna w prawo (inkrementacja adresu)<br />#define LCDC_ENTRYL         0b00000000    // Przesuwanie kursora lub okna w lewo (dekrementacja adresu)<br />#define LCDC_ENTRYW         0b00000001    // Przesuwa się okno, pozycja kursora na wyświetlaczu jest stała<br /><br />#define LCDC_ONOFF          0b00001000    // wl/ wyl wyswietlacza<br />#define LCDC_DISPLAYON      0b00000100    // wlaczenie wyswietlacza<br />#define LCDC_DISPLAYOFF     0b00000000    // wylaczenie wyswietlacza<br />#define LCDC_CURSORON       0b00000010    // wlacz kursor<br />#define LCDC_CURSOROFF      0b00000000    // wylacz kursor<br />#define LCDC_CURSORBLINKON  0b00000001    // wlacz migotanie kursor<br />#define LCDC_CURSORBLINKOFF 0b00000000    // wylacz migotanie kursor<br /><br />#define LCDC_SHIFT          0b00010000    // Przesuniecie<br />#define LCDC_SHIFTDATA      0b00001000    // Obrot danych na wyswietlaczu<br />#define LCDC_SHIFTCUR       0b00000000    // Przesuniecie kursora<br />#define LCDC_SHIFTR         0b00000100    // W lewo<br />#define LCDC_SHIFTL         0b00000000    // W prawo<br /><br />#define LCDC_FUNC           0b00100000    // Funkcje inicjalizacji<br />#define LCDC_FUNC8B         0b00010000    // Tryb 8-bitowy<br />#define LCDC_FUNC4B         0b00000000    // Tryb 4-bitowy<br />#define LCDC_FUNC2L         0b00001000    // Dwa, lub cztery wiersze<br />#define LCDC_FUNC1L         0b00000000    // Jeden wiersz<br />#define LCDC_FUNC5x10       0b00000100    // Wielkosci znaku 5x10<br />#define LCDC_FUNC5x7        0b00000000    // Wielkosci znaku 5x10n<br /><br />// DEKLARACJE FUNKCJI<br />uint8_t check_BF(void);<br />//<br /><br /><br />// Ustawienie pinow portu jako wyjscia<br />static inline void data_dir_out(void)<br />{<br />    DDR(LCD_D7PORT) |= (1 &lt;&lt; LCD_D7);<br />    DDR(LCD_D6PORT) |= (1 &lt;&lt; LCD_D6);<br />    DDR(LCD_D5PORT) |= (1 &lt;&lt; LCD_D5);<br />    DDR(LCD_D4PORT) |= (1 &lt;&lt; LCD_D4);<br />}<br />// Ustawienie pinow portu jako wejscia<br />static inline void data_dir_in(void)<br />{<br />    DDR(LCD_D7PORT) &amp;= ~(1 &lt;&lt; LCD_D7);<br />    DDR(LCD_D6PORT) &amp;= ~(1 &lt;&lt; LCD_D6);<br />    DDR(LCD_D5PORT) &amp;= ~(1 &lt;&lt; LCD_D5);<br />    DDR(LCD_D4PORT) &amp;= ~(1 &lt;&lt; LCD_D4);<br />}<br /><br />// Wysylanie polowy bajtu<br />static inline void lcd_sendHalf(uint8_t data)<br />{<br />    if(data&amp;(1&lt;&lt;0)) PORT(LCD_D4PORT) |= (1 &lt;&lt; LCD_D4);<br />    else PORT(LCD_D4PORT) &amp;= ~(1 &lt;&lt; LCD_D4);<br /><br />    if(data&amp;(1&lt;&lt;1)) PORT(LCD_D5PORT) |= (1 &lt;&lt; LCD_D5);<br />    else PORT(LCD_D5PORT) &amp;= ~(1 &lt;&lt; LCD_D5);<br /><br />    if(data&amp;(1&lt;&lt;2)) PORT(LCD_D6PORT) |= (1 &lt;&lt; LCD_D6);<br />    else PORT(LCD_D6PORT) &amp;= ~(1 &lt;&lt; LCD_D6);<br /><br />    if(data&amp;(1&lt;&lt;3)) PORT(LCD_D7PORT) |= (1 &lt;&lt; LCD_D7);<br />    else PORT(LCD_D7PORT) &amp;= ~(1 &lt;&lt; LCD_D7);<br />}<br /><br />// Wysylanie calego bajtu<br />void _lcd_write_byte(unsigned char _data)<br />{<br />    // Ustawienie pinow portu danych jako wyjscia<br />    data_dir_out();<br /><br />    #if USE_RW == 1<br />        CLR_RW;<br />    #endif // USE_RW<br />    SET_E;<br />    lcd_sendHalf(_data&gt;&gt;4); // wysylanie starszej czesci bajtu<br />    CLR_E;<br /><br />    SET_E;<br />    lcd_sendHalf(_data); // wysylanie mlodszej czesci bajtu<br />    CLR_E;<br /><br />    #if USE_RW == 1<br />        while( check_BF() &amp; (1 &lt;&lt; 7) );<br />    #else<br />    _delay_us(120);<br />    #endif // USE_RW<br />}<br /><br />void lcd_write_cmd(uint8_t cmd)<br />{<br />    CLR_RS;<br />    _lcd_write_byte(cmd);<br />}<br /><br />void lcd_write_data(uint8_t data)<br />{<br />    SET_RS;<br />    _lcd_write_byte(data);<br />}<br /><br />#if USE_RW == 1<br />static inline uint8_t lcd_read_Half(void)<br />{<br />    uint8_t result = 0;<br />    if(PIN(LCD_D4PORT) &amp; (1 &lt;&lt; LCD_D4)) result |= (1&lt;&lt;0);<br />    if(PIN(LCD_D5PORT) &amp; (1 &lt;&lt; LCD_D5)) result |= (1&lt;&lt;1);<br />    if(PIN(LCD_D6PORT) &amp; (1 &lt;&lt; LCD_D6)) result |= (1&lt;&lt;2);<br />    if(PIN(LCD_D7PORT) &amp; (1 &lt;&lt; LCD_D7)) result |= (1&lt;&lt;3);<br />    return result;<br />}<br />#endif // USE_RW<br /><br />#if USE_RW == 1<br />uint8_t _lcd_read_byte(void)<br />{<br />    uint8_t result = 0;<br />    data_dir_in();<br /><br />    SET_RW;<br />    SET_E;<br />    result |= (lcd_read_Half() &lt;&lt; 4);   //odczyt starszej czesci bajtu<br />    CLR_E;<br />    SET_E;<br />    result |= (lcd_read_Half());   //odczyt mlodszej czesci bajtu<br />    CLR_E;<br /><br />    return result;<br />}<br />#endif // USE_RW<br /><br />#if USE_RW == 1<br />uint8_t check_BF(void)<br />{<br />    CLR_RS;<br />    return _lcd_read_byte();<br />}<br />#endif // USE_RW<br /><br />// Inicjalizowanie pinow portow<br />void lcd_init(void)<br />{<br />    data_dir_out();<br />    DDR(LCD_RSPORT) |= (1 &lt;&lt; LCD_RS);<br />    DDR(LCD_EPORT) |= (1 &lt;&lt; LCD_E);<br />    #if USE_RW == 1<br />        DDR(LCD_RWPORT) |= (1 &lt;&lt; LCD_RW);<br />    #endif // USE_RW<br /><br />    PORT(LCD_RSPORT) |= (1 &lt;&lt; LCD_RS);<br />    PORT(LCD_EPORT) |= (1 &lt;&lt; LCD_E);<br />    #if USE_RW == 1<br />    PORT(LCD_RWPORT) |= (1 &lt;&lt; LCD_RW);<br />    #endif // USE_RW<br /><br />    _delay_ms(15);<br /><br />    PORT(LCD_EPORT) &amp;= ~(1 &lt;&lt; LCD_E);<br />    PORT(LCD_RSPORT) &amp;= ~(1 &lt;&lt; LCD_RS);<br />    #if USE_RW == 1<br />    PORT(LCD_RWPORT) &amp;= ~(1 &lt;&lt; LCD_RW);<br />    #endif // USE_RW<br />    SET_E;<br />    lcd_sendHalf(0x03);     // tryb 8-bitowy DL = 1<br />    CLR_E;<br /><br />    _delay_ms(4.1);<br /><br />    SET_E;<br />    lcd_sendHalf(0x03);     // tryb 8-bitowy DL = 1<br />    CLR_E;<br /><br />    _delay_us(100);<br /><br />    SET_E;<br />    lcd_sendHalf(0x03);     // tryb 8-bitowy DL = 1<br />    CLR_E;<br /><br />    _delay_us(100);<br /><br />    SET_E;<br />    lcd_sendHalf(0x02);     // tryb 4-bitowy DL = 0<br />    CLR_E;<br /><br />    _delay_us(100);<br /><br />    // Tryb 4-bitowy, 2 wiersze, znak 5x7<br />    lcd_write_cmd(LCDC_FUNC|LCDC_FUNC4B|LCDC_FUNC2L|LCDC_FUNC5x7);<br />    // Wylaczenie kursora wyswietlacza i migania<br />    lcd_write_cmd( LCDC_ONOFF );<br />    // Wlaczenie wyswietlacza<br />    lcd_write_cmd( LCDC_ONOFF|LCDC_DISPLAYON);<br />    //Przesuwanie kursora w prawo bez przesuwania zawartosci ekranu<br />    lcd_write_cmd( LCDC_ENTRY|LCDC_ENTRYR);<br />    lcd_cls();<br />}<br /><br />void lcd_cls(void)<br />{<br />    lcd_write_cmd( LCDC_CLS);<br />    #if USE_RW == 0<br />        _delay_ms(4.9);<br />    #endif // USE_RW<br />}<br /><br />#if USE_LCD_CURSOR_HOME == 1<br />    void lcd_home(void)<br />    {<br />        lcd_write_cmd( LCDC_CLS | LCDC_HOME );<br />        #if USE_RW == 0<br />        _delay_ms(4.9);<br />        #endif // USE_RW<br />    }<br />#endif // USE_LCD_CURSOR_HOME<br /><br />#if USE_LCD_CURSOR_ON == 1<br />    void lcd_cursor_on(void)<br />    {<br />        lcd_write_cmd(LCDC_ONOFF | LCDC_DISPLAYON | LCDC_CURSORON);<br />    }<br /><br />    void lcd_cursor_off(void)<br />    {<br />        lcd_write_cmd(LCDC_ONOFF | LCDC_DISPLAYON | LCDC_CURSOROFF);<br />    }<br />#endif // USE_LCD_CURSOR_ON<br /><br />#if USE_LCD_CURSOR_BLINK == 1<br />    void lcd_blink_on(void)<br />    {<br />        lcd_write_cmd(LCDC_ONOFF | LCDC_DISPLAYON | LCDC_CURSORON | LCDC_CURSORBLINKON);<br />    }<br /><br />    void lcd_blink_off(void)<br />    {<br />        lcd_write_cmd(LCDC_ONOFF | LCDC_DISPLAYON | LCDC_CURSORON | LCDC_CURSORBLINKOFF);<br />    }<br />#endif // USE_LCD_CURSOR_BLINK<br /><br />    void lcd_str(char *str)<br />    {<br />        register char znak;<br />        while ( (znak = *(str++)) )<br />        lcd_write_data( (znak&gt;= 0x80 &amp;&amp; znak&lt;= 0x87) ? (znak &amp; 0x07) : znak );<br />    }<br /><br />#if USE_LCD_STR_P == 1<br />    void lcd_str_P(char *str)<br />    {<br />        register char znak;<br />        while ( (znak = pgm_read_byte(str++)) )<br />        lcd_write_data( (znak&gt;= 0x80 &amp;&amp; znak&lt;= 0x87) ? (znak &amp; 0x07) : znak );<br />    }<br />#endif // USE_LCD_STR_P<br /><br />#if USE_LCD_STR_E == 1<br />    void lcd_str_E(char *str)<br />    {<br />        register char znak;<br />        while (1)<br />        {<br />            znak = eeprom_read_byte( (uint8_t *)(str++) );<br />            if( !znak || znak == 0xFF) break;<br />            else<br />            lcd_write_data( (znak&gt;= 0x80 &amp;&amp; znak&lt;= 0x87) ? (znak &amp; 0x07) : znak );<br /><br />        }<br />    }<br />#endif // USE_LCD_STR_E<br /><br />#if USE_LCD_INT == 1<br />    void lcd_int(int val)<br />    {<br />        char bufor&#91;17&#93;;<br />        lcd_str( itoa(val, bufor, 10) );<br />    }<br />#endif // USE_LCD_INT<br /><br />#if USE_LCD_HEX == 1<br />    void lcd_hex(int val)<br />    {<br />        char bufor&#91;17&#93;;<br />        lcd_str( itoa(val, bufor, 16) );<br />    }<br />#endif // USE_LCD_HEX<br /><br />#if USE_LCD_DEFCHAR == 1<br />    void lcd_defchar(uint8_t nr, uint8_t *def_znak)<br />    {<br />        register uint8_t i, c;<br />        lcd_write_cmd( 64 +((nr&amp;0x07)*8));<br />        for(i = 0; i &lt; 8; i++)<br />        {<br />            c = *(def_znak++);<br />            lcd_write_data(c);<br />        }<br />    }<br />#endif // USE_LCD_DEFCHAR<br /><br />#if USE_LCD_DEFCHAR_P == 1<br />    void lcd_defchar_P(uint8_t nr, uint8_t *def_znak)<br />    {<br />        register uint8_t i, c;<br />        lcd_write_cmd( 64 +((nr&amp;0x07)*8));<br />        for(i = 0; i &lt; 8; i++)<br />        {<br />            c = pgm_read_byte(def_znak++);<br />            lcd_write_data(c);<br />        }<br />    }<br />#endif // USE_LCD_DEFCHAR_P<br /><br />#if USE_LCD_DEFCHAR_E == 1<br />    void lcd_defchar_E(uint8_t nr, uint8_t *def_znak)<br />    {<br />        register uint8_t i, c;<br />        lcd_write_cmd( 64 +((nr&amp;0x07)*8));<br />        for(i = 0; i &lt; 8; i++)<br />        {<br />            c = eeprom_read_byte(def_znak++);<br />            lcd_write_data(c);<br />        }<br />    }<br />#endif // USE_LCD_DEFCHAR_E[/syntax]<br /><br />a to lcd.h, zalaczylem w niej biblioteke &lt;avr/io.h&gt; bo jest tam odniesienie do uint8_t<br /><br />[syntax=c]#ifndef LCD_H_INCLUDED<br />#define LCD_H_INCLUDED<br /><br />#include &lt;avr/io.h&gt;<br /><br />// Rozdzielczosc wyswietlacza LCD<br />#define LCD_Y 2                         // liczba wierszy wyswietlacza<br />#define LCD_X 16                        // liczba kolumn wyswietlacza<br /><br />// Konfiguracja portow i pinow danych<br />#define LCD_D7PORT  D<br />#define LCD_D7      3<br />#define LCD_D6PORT  D<br />#define LCD_D6      2<br />#define LCD_D5PORT  D<br />#define LCD_D5      1<br />#define LCD_D4PORT  D<br />#define LCD_D4      0<br /><br />// Konfiguracja portow i pinow sygna³ow RS, RW oraz E<br />#define LCD_RSPORT  C<br />#define LCD_RS      0<br />#define LCD_RWPORT  C<br />#define LCD_RW      1<br />#define LCD_EPORT   C<br />#define LCD_E       2<br /><br />// Obsluga pinu RW                      0    1 - jesli obsluguje,   0 - jesli podlaczony do masy<br />#define USE_RW                  1<br /><br />// Urzywane funkcje                     0    1 - jesli wlaczone,    0 - jesli wylaczone<br />#define USE_LCD_LOCATE          1<br /><br />#define USE_LCD_STR_P           1       // Wysyla string umieszczony w pamieci FLASH<br />#define USE_LCD_STR_E           1       // Wysyla string umieszczony w pamieci EEPROM<br /><br />#define USE_LCD_INT             1       // wyswietla liczbe dziesietna na LCD<br />#define USE_LCD_HEX             1       // wyswietla liczbe szesnastkowa na LCD<br /><br />#define USE_LCD_DEFCHAR         1       // Wysyla zdefiniowany znak z pamieci RAM<br />#define USE_LCD_DEFCHAR_P       1       // Wysyla zdefiniowany znak z pamieci FLASH<br />#define USE_LCD_DEFCHAR_E       1       // Wysyla zdefiniowany znak z pamieci EEPROM<br /><br />#define USE_LCD_CURSOR_HOME     1       // Ustaw kursor na pozycji poczatkowej<br />#define USE_LCD_CURSOR_ON       1       // Obsluga wl/wyl kursora<br />#define USE_LCD_CURSOR_BLINK    1       // Obsluga wl/wyl migotania kursora<br /><br /><br />// Definicje funkcji<br />void lcd_init(void);<br />void lcd_cls(void);<br />void lcd_str(char *str);<br /><br />#if USE_LCD_CURSOR_HOME == 1<br />    void lcd_home(void);<br />#endif // USE_LCD_CURSOR_HOME<br /><br />#if USE_LCD_CURSOR_ON == 1<br />    void lcd_cursor_on(void);<br />    void lcd_cursor_off(void);<br />#endif // USE_LCD_CURSOR_ON<br /><br />#if USE_LCD_CURSOR_BLINK == 1<br />    void lcd_blink_on(void);<br />    void lcd_blink_off(void);<br />#endif // USE_LCD_CURSOR_BLINK<br /><br />#if USE_LCD_STR_P == 1<br />    void lcd_str_P(char *str);<br />#endif // USE_LCD_STR_P<br /><br />#if USE_LCD_STR_E == 1<br />    void lcd_str_E(char *str);<br />#endif // USE_LCD_STR_E<br /><br />#if USE_LCD_INT == 1<br />    void lcd_int(int val);<br />#endif // USE_LCD_INT<br /><br />#if USE_LCD_HEX == 1<br />    void lcd_hex(int val);<br />#endif // USE_LCD_HEX<br /><br />#if USE_LCD_DEFCHAR == 1<br />    void lcd_defchar(uint8_t nr, uint8_t *def_znak);<br />#endif // USE_LCD_DEFCHAR<br /><br />#if USE_LCD_DEFCHAR_P == 1<br />    void lcd_defchar_P(uint8_t nr, uint8_t *def_znak);<br />#endif // USE_LCD_DEFCHAR_P<br /><br />#if USE_LCD_DEFCHAR_E == 1<br />    void lcd_defchar_E(uint8_t nr, uint8_t *def_znak);<br />#endif // USE_LCD_DEFCHAR_E<br /><br />#endif // LCD_H_INCLUDED[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5401">mirost</a> — 14 sie 2014, o 00:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-08-14T00:54:07+01:00</updated>
<published>2014-08-14T00:54:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91464#p91464</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91464#p91464"/>
<title type="html"><![CDATA[Re: Problem z odczytem i zapisem do pamięci eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91464#p91464"><![CDATA[
&quot;eeprom_read_byte&quot; to nie funkcja tylko makrodefinicja stąd brak podpowiedzi kompilatora.<br />Gdzie dodajesz plik nagłówkowy &quot;avr/eeprom.h&quot;? Powinien być w pliku &quot;lcd.c&quot; ponieważ to w nim następuje odwołanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 14 sie 2014, o 00:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirost]]></name></author>
<updated>2014-08-14T00:14:24+01:00</updated>
<published>2014-08-14T00:14:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91460#p91460</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91460#p91460"/>
<title type="html"><![CDATA[Problem z odczytem i zapisem do pamięci eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8127&amp;p=91460#p91460"><![CDATA[
Z racji tego że jest to mój pierwszy post na tym forum chciałbym się ze wszystkimi serdecznie przywitać, więc witam   <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Otóż mam problem jak w temacie. A sprawa wygląda tak. Pisałem sobie biblioteczkę do obsługi wyświetlacza LCD posługując się w tym celu książeczką pana Kardasia &quot;Mikrokontrolery AVR Język C - podstawy programowania&quot;<br />Wszystko sobie idzie jak po maśle. Inicjalizacja przeszła, LCD się odezwał i wydał swoje pierwsze tchnienie w postaci napisu &quot;HELLO WORLD&quot;. Zapisanego do pamięci ram. Wszystko było w porządku napisałem dalej zgodnie z książeczką wyświetlanie napisów z pamięci flash. Wszystko działa. A tu nagle zgrzyt  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .  Robię to samo w celu wyświetlania napisów zapisanych w pamięci eeprom, przepisałem wszystko zgodnie z książką<br /><br />[syntax]znak = eeprom_read_byte( (uint8_t *)(str++) );[/syntax]<br /><br /> i niestety wyrzuca mi błąd o następującej treści;<br /><br />||=== Build: Release in lcd (compiler: GNU GCC Compiler for AVR) ===|<br />obj\Release\lcd.o||In function `lcd_string_E':|<br />lcd.c|| undefined reference to `__eerd_byte_m8'|<br />||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|<br /><br />W oko żuciło mi sie równierz to ze mimo dołączonej biblioteki &lt;avr/eeprom.h&gt;, nie uzyskałem podpowiedzi co do uzywanej funkcji. Zawsze jak coś pisałem, pisałem pierwsze litery i samo wyrzucało podpowiedz o jaką funkcje chodzi, a ta jest jakby niewidoczna.<br />Projekt jest pisany pod mikro-kontroler atmega8, dodam ze przeszukałem troszeczkę i niestety nie znalazłem odpowiedzi rozwiązującej mój problem, projekt pisze w Codeblocks. Bardzo bym prosił o pomoc bo mecze się z tym już od pewnego czasu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5401">mirost</a> — 14 sie 2014, o 00:14</p><hr />
]]></content>
</entry>
</feed>