<?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=8&amp;t=7072&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-05-16T06:42:43+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=7072&amp;mode</id>
<entry>
<author><name><![CDATA[DamCos]]></name></author>
<updated>2014-05-16T06:42:43+01:00</updated>
<published>2014-05-16T06:42:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81260#p81260</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81260#p81260"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81260#p81260"><![CDATA[
A no widzisz - drobny błąd a ile znaczy. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Ja to jak podpinam wyświetlacz to analizuję każdy pin po kolei <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3947">DamCos</a> — 16 maja 2014, o 06:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafal.J.645]]></name></author>
<updated>2014-05-15T15:26:13+01:00</updated>
<published>2014-05-15T15:26:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81205#p81205</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81205#p81205"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81205#p81205"><![CDATA[
<div class="quotetitle">DamCos napisał(a):</div><div class="quotecontent"><br />1. Sprawdź, czy JTAG jest włączony, jak jest to wyłącz jakimś programem, nawet chyba darmowy mkAVRCalculator obsługuje ATmega128. U mnie były problemy z włączonym JTAG.<br /></div><br />JTAG oczywiście wyłączony. <br /><br /><div class="quotetitle">DamCos napisał(a):</div><div class="quotecontent"><br />2. Tak jak ktoś wyżej pisał - podłącz wszystko pod jeden port, niech będzie ten A. A w swoim pliku main.c daj na początku:<br /></div><br /><br />Niestety ale nie mam takiej możliwości, bo płytkę mam gotową <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />.  Ale próbowałem zrobić tak:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;HD44780.h&quot;<br /><br />#define LCD_LED (1&lt;&lt;PF7)<br /><br /><br /><br />int main(void)<br />{<br />DDRF |=(LCD_LED);<br />PORTF|=(LCD_LED);<br /><br />DDRA = 11111111;<br />DDRF = 11111111;<br /><br /> LCD_Initalize();<br /> <br /><br />    while(1)<br />    {<br />LCD_WriteText(&quot;TEST&quot;);<br />_delay_ms(300);<br />LCD_Clear();<br /> }<br />}[/syntax]<br /><br />Niestety dalej nic <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Pozdrawiam, <br />Rafal J.<br /><br /><br />Edit. !!!<br /><br />No więc się udało!<br />Nie wiem dla czego nie działało ale już jest ok.  Na początku testowałem na takim podłączeniu i kodzie jak na początku tematu podałem. - Nie działało.<br />Później wiele różnych prób, w tym praca na bibliotece z obsługą R/W. Później kolejne próby bez obsługi R/W i się okazało, że nie podpiąłem R/W do masy. <br />Podłączyłem wszystko jeszcze raz tak jak było na początku, i.... działa!<br />Najbardziej boli mnie to, że działa, a nie wiem czemu nie działało <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />.<br /> <br />Dzięki za zainteresowanie tematem !!  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pozdrawiam,<br />Rafal J.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4219">Rafal.J.645</a> — 15 maja 2014, o 15:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DamCos]]></name></author>
<updated>2014-05-15T14:43:43+01:00</updated>
<published>2014-05-15T14:43:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81204#p81204</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81204#p81204"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81204#p81204"><![CDATA[
<div class="quotetitle">Rafal.J.645 napisał(a):</div><div class="quotecontent"><br />Niestety to też nie to <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> F_CPU w AVR Studio też można ustawić we właściwościach projektu, i tak mam zrobione. Jak podłączyłem migającą diode to ustawiłem czasy 0,5s świecenia, 0,5s przerwy, <br />i tak na oko by się zgadzało. Nazwy plików są ok, przed chwilą się upewniłem i na pewno jest ok. Kompilator nie wyrzuca żadnych błędów ani ostrzeżeń. Przed chwilą jeszcze przeczytałem, <br />że ATmega128 w niektórych portach ma takie ograniczenie, że można zapisać/zczytać tylko cały port na raz, nie można poszczególnych pinów. Nie wiem, czy to prawda, ale jeśli tak, to może akurat wybrałem takie porty? Zbytnio nie potrafię czytać dokumentacji, ale próbowałem znaleźć coś na ten temat i nic nie znalazłem.  A z drugiej strony jak podłączałem LED'a to bez problemu mogłem <br />każdym pinem z osobna sterować.<br /><br />Pozdrawiam,<br />Rafal J.<br /></div><br /><br /><br />Polecam dla kolegi wykonać kilka kroków:<br /><br />1. Sprawdź, czy JTAG jest włączony, jak jest to wyłącz jakimś programem, nawet chyba darmowy mkAVRCalculator obsługuje      ATmega128. U mnie były problemy z włączonym JTAG.<br /><br />2. Tak jak ktoś wyżej pisał - podłącz wszystko pod jeden port, niech będzie ten A. A w swoim pliku main.c daj na początku:<br /><br />[syntax=c]DDRA |= 0xFF<br />//tak na wszelki wypadek :D[/syntax]<br /><br />oczywiście jeśli nie używasz odczytu z LCD.<br /><br />Może to jest jakaś mała zmiana, ale u mnie był problem z portami, dopiero po zastosowaniu DDRx |= 0xFF pomogło.<br />Nie wiem jak to u ciebie się sprawdzi, ale spróbować nie zaszkodzi <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3947">DamCos</a> — 15 maja 2014, o 14:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-05-15T13:48:38+01:00</updated>
<published>2014-05-15T13:48:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81199#p81199</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81199#p81199"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81199#p81199"><![CDATA[
<div class="quotetitle">Rafal.J.645 napisał(a):</div><div class="quotecontent"><br />Zbytnio nie potrafię czytać dokumentacji, ale próbowałem znaleźć coś na ten temat i nic nie znalazłem<br /></div><br /><br />dlatego z pełną odpowiedzialnością mogę śmiało polecić to:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />wtedy poznasz to od środka .... i zresztą nie tylko to... wiele innych przydatnych rzeczy<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 maja 2014, o 13:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafal.J.645]]></name></author>
<updated>2014-05-15T13:46:15+01:00</updated>
<published>2014-05-15T13:46:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81198#p81198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81198#p81198"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81198#p81198"><![CDATA[
Niestety to też nie to <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> F_CPU w AVR Studio też można ustawić we właściwościach projektu, i tak mam zrobione. Jak podłączyłem migającą diode to ustawiłem czasy 0,5s świecenia, 0,5s przerwy, <br />i tak na oko by się zgadzało. Nazwy plików są ok, przed chwilą się upewniłem i na pewno jest ok. Kompilator nie wyrzuca żadnych błędów ani ostrzeżeń. Przed chwilą jeszcze przeczytałem, <br />że ATmega128 w niektórych portach ma takie ograniczenie, że można zapisać/zczytać tylko cały port na raz, nie można poszczególnych pinów. Nie wiem, czy to prawda, ale jeśli tak, to może akurat wybrałem takie porty? Zbytnio nie potrafię czytać dokumentacji, ale próbowałem znaleźć coś na ten temat i nic nie znalazłem.  A z drugiej strony jak podłączałem LED'a to bez problemu mogłem <br />każdym pinem z osobna sterować.<br /><br />Pozdrawiam,<br />Rafal J.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4219">Rafal.J.645</a> — 15 maja 2014, o 13:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-05-15T13:13:42+01:00</updated>
<published>2014-05-15T13:13:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81192#p81192</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81192#p81192"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81192#p81192"><![CDATA[
Jeżeli używasz AtmelStudio to z tego co pamiętam tam trzeba ustawić FCPU<br /><br />spróbuj z takim mainem:<br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />    #F_CPU &#91;color=#0000FF&#93;wartość_kwarca&#91;/color&#93;<br /><br />    #include &lt;util/delay.h&gt;<br />    #include &quot;HD44780.h&quot;<br /><br /><br />     <br />    #define LCD_LED (1&lt;&lt;PF7)<br />     <br />    int main(void)<br />    {<br />            DDRF |=(LCD_LED);<br />            PORTF|=(LCD_LED);<br />           <br />            LCD_Initalize();<br />           <br />            LCD_WriteText(&quot;TEST&quot;);<br />           <br />     <br />        while(1)<br />        {<br />        }<br />    }[/syntax]<br /><br /><br />Głowy nie dam sobie obciąć że to pomoże ale z tego co mi się kojarzy to w AS trzeba zdefiniować prędkość taktowania w ECLIPSE ustawiasz to w projekcie a w AS definiujesz w programie.<br />Nie używam AS więc mi się tylko kojarzy cosik takiego<br /><br />sprawdź też czy ścieżka do HD44780.h jest prawidłowa i czy plik ma duże HD może nie czyta ci biblioteki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 15 maja 2014, o 13:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafal.J.645]]></name></author>
<updated>2014-05-15T11:55:09+01:00</updated>
<published>2014-05-15T11:55:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81189#p81189</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81189#p81189"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81189#p81189"><![CDATA[
Korzystam z AVR Studio. Jak wcześniej pisałem, uruchamiałem już na tej ATmedze proste programy do migania diodą, więc raczej po stronie ustawień procesora  w IDE jest wszystko ok. <br />Nie używam stykówki, mam gotową płytkę zrobioną pod konkretny projekt. Fakt, że zrobiłem kilka głupich błędów w czasie jej projektowania i musiałem pozamieniać piny wyświetlacza <br />przy pomocy krótkich przewodów. Ale wszystkie piny wyświetlacza są odpowiednio połączone; testowałem przy pomocy diody LED. <br /><br />Pozdrawiam,<br />Rafal J.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4219">Rafal.J.645</a> — 15 maja 2014, o 11:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-05-15T11:47:39+01:00</updated>
<published>2014-05-15T11:47:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81188#p81188</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81188#p81188"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81188#p81188"><![CDATA[
<div class="quotetitle">Rafal.J.645 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">majster napisał(a):</div><div class="quotecontent">A czy w projekcie przestawiles procka ze 128 na 16 i zrobiles clean ?<br /></div><br /><br />Oczywiście przestawiłem. Clean? Co masz na myśli?  <br /><br />Pozdrawiam, <br />Rafal J.</div><br /><br /><br />Jeżeli używasz ECLIPSE to po zmianie procesora w projekcie kliknij prawym klawiszem myszki na projekt i zrób CLEAN a następnie BUILD jeżeli działało na atmega 16 a nie używasz timerów to może to być przyczyną że na Atmega 128 nie chce działać to samo co działało na 16.<br /><br />Korzystasz ze stykówki ? gotowej płytki ? czy płytki testowej ?<br /><br />jak ze stykówki oglądnij jeszcze raz połączenia może coś źle podłączyłeś ale ja bym obstawiał na to że nie czyściłeś projektu po zmianie procesora w projekcie.<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 15 maja 2014, o 11:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2014-05-15T07:04:55+01:00</updated>
<published>2014-05-15T07:04:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81180#p81180</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81180#p81180"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81180#p81180"><![CDATA[
Nie znam tej biblioteki ale co mogę zaproponować tak na szybko, to spróbuj może odpalić to na jednym porcie i piny danych daj poklei najlepiej od 0,1,2,3.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 15 maja 2014, o 07:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafal.J.645]]></name></author>
<updated>2014-05-15T06:56:43+01:00</updated>
<published>2014-05-15T06:56:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81179#p81179</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81179#p81179"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81179#p81179"><![CDATA[
<div class="quotetitle">majster napisał(a):</div><div class="quotecontent"><br />A czy AT128 i AT16 maja takie same timer? Porownywales DSy tych ATMEG?<br /></div><br />Nie korzystam z żadnych timerów. Nie nie porównywałem, ale sam wyświetlacz powinien chodzić i na jednym i na drugim, to uniwersalna biblioteka. <br /><br />HD44780.h<br /><br />[syntax=c]//-------------------------------------------------------------------------------------------------<br />// Wyświetlacz alfanumeryczny ze sterownikiem HD44780<br />// Sterowanie w trybie 4-bitowym bez odczytu flagi zajętości<br />// z dowolnym przypisaniem sygnałów sterujących<br />// Plik : HD44780.h<br />// Mikrokontroler : Atmel AVR<br />// Kompilator : avr-gcc<br />// Autor : Radosław Kwiecień<br />// Źródło : http://radzio.dxp.pl/hd44780/<br />// Data : 24.03.2007<br />//-------------------------------------------------------------------------------------------------<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Konfiguracja sygnałów sterujących wyświetlaczem.<br />// Można zmienić stosownie do potrzeb.<br />//<br />//-------------------------------------------------------------------------------------------------<br />#define LCD_RS_DIRDDRA<br />#define LCD_RS_PORT PORTA<br />#define LCD_RS(1 &lt;&lt; PA7)<br /><br />#define LCD_E_DIRDDRA<br />#define LCD_E_PORTPORTA<br />#define LCD_E(1 &lt;&lt; PA5)<br /><br />#define LCD_DB4_DIRDDRF<br />#define LCD_DB4_PORTPORTF<br />#define LCD_DB4(1 &lt;&lt; PF3)<br /><br />#define LCD_DB5_DIRDDRF<br />#define LCD_DB5_PORTPORTF<br />#define LCD_DB5(1 &lt;&lt; PF4)<br /><br />#define LCD_DB6_DIRDDRF<br />#define LCD_DB6_PORTPORTF<br />#define LCD_DB6(1 &lt;&lt; PF5)<br /><br />#define LCD_DB7_DIRDDRF<br />#define LCD_DB7_PORTPORTF<br />#define LCD_DB7(1 &lt;&lt; PF6)<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Instrukcje kontrolera Hitachi HD44780<br />//<br />//-------------------------------------------------------------------------------------------------<br /><br /><br />//#define LCD_4x20 <br />#define LCD_4x16 <br /><br />#ifdef LCD_4x16 <br />#define LCD_WIDTH 16 <br />#define LCD_LINE2   0x10 <br />#define LCD_LINE3   0x50 <br />#endif <br /><br />#ifdef LCD_4x20 <br />#define LCD_WIDTH 20 <br />#define LCD_LINE2   0x14 <br />#define LCD_LINE3   0x54 <br />#endif <br /><br /><br />#define HD44780_CLEAR0x01<br /><br />#define HD44780_HOME0x02<br /><br />#define HD44780_ENTRY_MODE0x04<br />#define HD44780_EM_SHIFT_CURSOR0<br />#define HD44780_EM_SHIFT_DISPLAY1<br />#define HD44780_EM_DECREMENT0<br />#define HD44780_EM_INCREMENT2<br /><br />#define HD44780_DISPLAY_ONOFF0x08<br />#define HD44780_DISPLAY_OFF0<br />#define HD44780_DISPLAY_ON4<br />#define HD44780_CURSOR_OFF0<br />#define HD44780_CURSOR_ON2<br />#define HD44780_CURSOR_NOBLINK0<br />#define HD44780_CURSOR_BLINK1<br /><br />#define HD44780_DISPLAY_CURSOR_SHIFT0x10<br />#define HD44780_SHIFT_CURSOR0<br />#define HD44780_SHIFT_DISPLAY8<br />#define HD44780_SHIFT_LEFT0<br />#define HD44780_SHIFT_RIGHT4<br /><br />#define HD44780_FUNCTION_SET0x20<br />#define HD44780_FONT5x70<br />#define HD44780_FONT5x104<br />#define HD44780_ONE_LINE0<br />#define HD44780_TWO_LINE8<br />#define HD44780_4_BIT0<br />#define HD44780_8_BIT16<br /><br />#define HD44780_CGRAM_SET0x40<br /><br />#define HD44780_DDRAM_SET0x80<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Deklaracje funkcji<br />//<br />//-------------------------------------------------------------------------------------------------<br /><br />void LCD_WriteCommand(unsigned char);<br />void LCD_WriteData(unsigned char);<br />void LCD_WriteText(char *);<br />void LCD_GoTo(unsigned char, unsigned char);<br />void LCD_Clear(void);<br />void LCD_Home(void);<br />void LCD_Initalize(void);<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Koniec pliku HD44780.h<br />//<br />//-------------------------------------------------------------------------------------------------[/syntax]<br /><br /><br /><br />HD44780.c<br /><br />[syntax=c]//-------------------------------------------------------------------------------------------------<br />// Wyświetlacz alfanumeryczny ze sterownikiem HD44780<br />// Sterowanie w trybie 4-bitowym bez odczytu flagi zajętości<br />// z dowolnym przypisaniem sygnałów sterujących<br />// Plik : HD44780.c<br />// Mikrokontroler : Atmel AVR<br />// Kompilator : avr-gcc<br />// Autor : Radosław Kwiecień<br />// Źródło : http://radzio.dxp.pl/hd44780/<br />// Data : 24.03.2007<br />//-------------------------------------------------------------------------------------------------<br /><br />#include &quot;HD44780.h&quot;<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja wystawiająca półbajt na magistralę danych<br />//<br />//-------------------------------------------------------------------------------------------------<br />void _LCD_OutNibble(unsigned char nibbleToWrite)<br />{<br />if(nibbleToWrite &amp; 0x01)<br />LCD_DB4_PORT |= LCD_DB4;<br />else<br />LCD_DB4_PORT  &amp;= ~LCD_DB4;<br /><br />if(nibbleToWrite &amp; 0x02)<br />LCD_DB5_PORT |= LCD_DB5;<br />else<br />LCD_DB5_PORT  &amp;= ~LCD_DB5;<br /><br />if(nibbleToWrite &amp; 0x04)<br />LCD_DB6_PORT |= LCD_DB6;<br />else<br />LCD_DB6_PORT  &amp;= ~LCD_DB6;<br /><br />if(nibbleToWrite &amp; 0x08)<br />LCD_DB7_PORT |= LCD_DB7;<br />else<br />LCD_DB7_PORT  &amp;= ~LCD_DB7;<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja zapisu bajtu do wyświetacza (bez rozróżnienia instrukcja/dane).<br />//<br />//-------------------------------------------------------------------------------------------------<br />void _LCD_Write(unsigned char dataToWrite)<br />{<br />LCD_E_PORT |= LCD_E;<br />_LCD_OutNibble(dataToWrite &gt;&gt; 4);<br />LCD_E_PORT &amp;= ~LCD_E;<br />LCD_E_PORT |= LCD_E;<br />_LCD_OutNibble(dataToWrite);<br />LCD_E_PORT &amp;= ~LCD_E;<br />_delay_us(50);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja zapisu rozkazu do wyświetlacza<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_WriteCommand(unsigned char commandToWrite)<br />{<br />LCD_RS_PORT &amp;= ~LCD_RS;<br />_LCD_Write(commandToWrite);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja zapisu danych do pamięci wyświetlacza<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_WriteData(unsigned char dataToWrite)<br />{<br />LCD_RS_PORT |= LCD_RS;<br />_LCD_Write(dataToWrite);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja wyświetlenia napisu na wyswietlaczu.<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_WriteText(char * text)<br />{<br />while(*text)<br />  LCD_WriteData(*text++);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja ustawienia współrzędnych ekranowych<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_GoTo(unsigned char x, unsigned char y)<br />{<br />   switch( y ) <br />   { <br />      case 0: <br />         LCD_WriteCommand(HD44780_DDRAM_SET | x ); <br />         break; <br />      case 1: <br />         LCD_WriteCommand(HD44780_DDRAM_SET | (x+0x40) ); <br />         break; <br />      case 2: <br />         LCD_WriteCommand(HD44780_DDRAM_SET | (x+LCD_LINE2) ); <br />         break; <br />      case 3: <br />         LCD_WriteCommand(HD44780_DDRAM_SET | (x+LCD_LINE3) ); <br />         break; <br />   } <br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja czyszczenia ekranu wyświetlacza.<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_Clear(void)<br />{<br />LCD_WriteCommand(HD44780_CLEAR);<br />_delay_ms(2);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja przywrócenia początkowych współrzędnych wyświetlacza.<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_Home(void)<br />{<br />LCD_WriteCommand(HD44780_HOME);<br />_delay_ms(2);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Procedura inicjalizacji kontrolera HD44780.<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_Initalize(void)<br />{<br />unsigned char i;<br />LCD_DB4_DIR |= LCD_DB4; // Konfiguracja kierunku pracy wyprowadzeń<br />LCD_DB5_DIR |= LCD_DB5; //<br />LCD_DB6_DIR |= LCD_DB6; //<br />LCD_DB7_DIR |= LCD_DB7; //<br />LCD_E_DIR |= LCD_E;   //<br />LCD_RS_DIR |= LCD_RS;  //<br />_delay_ms(15); // oczekiwanie na ustalibizowanie się napiecia zasilajacego<br />LCD_RS_PORT &amp;= ~LCD_RS; // wyzerowanie linii RS<br />LCD_E_PORT &amp;= ~LCD_E;  // wyzerowanie linii E<br /><br />for(i = 0; i &lt; 3; i++) // trzykrotne powtórzenie bloku instrukcji<br />  {<br />  LCD_E_PORT |= LCD_E; //  E = 1<br />  _LCD_OutNibble(0x03); // tryb 8-bitowy<br />  LCD_E_PORT &amp;= ~LCD_E; // E = 0<br />  _delay_ms(5); // czekaj 5ms<br />  }<br /><br />LCD_E_PORT |= LCD_E; // E = 1<br />_LCD_OutNibble(0x02); // tryb 4-bitowy<br />LCD_E_PORT &amp;= ~LCD_E; // E = 0<br /><br />_delay_ms(1); // czekaj 1ms<br />LCD_WriteCommand(HD44780_FUNCTION_SET | HD44780_FONT5x7 | HD44780_TWO_LINE | HD44780_4_BIT); // interfejs 4-bity, 2-linie, znak 5x7<br />LCD_WriteCommand(HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_OFF); // wyłączenie wyswietlacza<br />LCD_WriteCommand(HD44780_CLEAR); // czyszczenie zawartosći pamieci DDRAM<br />_delay_ms(2);<br />LCD_WriteCommand(HD44780_ENTRY_MODE | HD44780_EM_SHIFT_CURSOR | HD44780_EM_INCREMENT);// inkrementaja adresu i przesuwanie kursora<br />LCD_WriteCommand(HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_ON | HD44780_CURSOR_OFF | HD44780_CURSOR_NOBLINK); // włącz LCD, bez kursora i mrugania<br />}<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Koniec pliku HD44780.c<br />//<br />//-------------------------------------------------------------------------------------------------[/syntax]<br /><br /><br />main.c<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;HD44780.h&quot;<br /><br />#define LCD_LED (1&lt;&lt;PF7)<br /><br />int main(void)<br />{<br />DDRF |=(LCD_LED);<br />PORTF|=(LCD_LED);<br /><br /> LCD_Initalize();<br /> <br /> LCD_WriteText(&quot;TEST&quot;);<br /><br /><br />    while(1)<br />    {<br />    }<br />}[/syntax]<br /><br /><br /><div class="quotetitle">majster napisał(a):</div><div class="quotecontent"><br />A czy w projekcie przestawiles procka ze 128 na 16 i zrobiles clean ?<br /></div><br /><br />Oczywiście przestawiłem. Clean? Co masz na myśli?  <br /><br />Pozdrawiam, <br />Rafal J.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4219">Rafal.J.645</a> — 15 maja 2014, o 06:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-05-14T23:21:34+01:00</updated>
<published>2014-05-14T23:21:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81169#p81169</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81169#p81169"/>
<title type="html"><![CDATA[Re: ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81169#p81169"><![CDATA[
A czy AT128 i AT16 maja takie same timer? Porownywales DSy tych ATMEG?<br /><br />Sądzę że kod jest ważny i by pomógł bo kula nic nie podpowiada.<br /><br />A czy w projekcie przestawiles procka ze 128 na 16 i zrobiles clean ?<br /><br />Wysłane z telefonu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 14 maja 2014, o 23:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafal.J.645]]></name></author>
<updated>2014-05-14T22:38:23+01:00</updated>
<published>2014-05-14T22:38:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81167#p81167</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81167#p81167"/>
<title type="html"><![CDATA[ATmega128A i LCD 4*16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7072&amp;p=81167#p81167"><![CDATA[
Witam.<br />Mam mały problem, a pomysłów na rozwiązanie brak <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />. Chodzi o to, że do miktorkontrolera ATmega128A mam podłączony LCD alfanumeryczny 4*16 (i nie tylko, ale to teraz nie jest ważne).<br />Piny wyświetlacza są podłączone do mikrokontrolera:<br /><br />RS -&gt; PA7<br />E   -&gt; PA5<br />D4 -&gt; PF3<br />D5 -&gt; PF4 <br />D6 -&gt; PF5<br />D7 -&gt; PF6<br /><br />Problem jest taki, że wyświetlacz w ogóle nie reaguje :/<br />Biblioteka na 100% działa, bo na identycznym kodzie odpalałem ten wyświetlacz na ATmega16 (zmienione tylko piny wyświetlacza, taktowanie i procesor).<br />Wcześniej odpalałem na rezonatorze 8 MHz, teraz próbowałem na wewnętrznym 1 MHz i zewnętrznym 16 MHz. JTAG i kompatybilność z ATmega103 wyłączone.<br />Połączenia elektryczne na pewno są ok, kilka razy sprawdzałem multimetrem z testerem ciągłości obwodu + do każdego pinu z osoba (w złącze do LCD) podłączałem diode LED i nią migałem. <br /><br />Kodu na razie nie wrzucam, bo jest on sprawdzony na innym mikrokontrolerze i podejrzewam, że po prostu jakiegoś fuse bitu nie przestawiłem czy coś w tym stylu.<br />Byłbym bardzo wdzięczny, jakby ktoś pomógł, a błąd pewnie jest banalny <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pozdrawiam,<br />Rafał J.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4219">Rafal.J.645</a> — 14 maja 2014, o 22:38</p><hr />
]]></content>
</entry>
</feed>