Форум по Роботика

Полезно => Практика => Темата е започната от: mihail19871987 в Януари 23, 2013, 11:14:09 am

Титла: Програмиране на LCD-dysplay
Публикувано от: mihail19871987 в Януари 23, 2013, 11:14:09 am
Здравейте
От скоро се занимавам с програмиране на МК и сега искам да си програмирам чипа да извежда данни на дисплея.
използвам:
  чип-mega8L (http://www.atmel.com/images/doc2486.pdf)
  дисплей-RC1602 (http://www.hestore.hu/files/rc1602b-ghy-csxd.pdf)
  текст-редактор-avrStudio5
написах следния код:

#include <avr/io.h>
#include <util/delay.h>

void lcd_cmd(unsigned char command){//LCD- 5-RS, 6-R/W , 7-E
PORTB = command;
PORTD = 0b10000000;//PORTD |= 1<<PIND7 | 0<<PIND6 | 0<<PIND5; //enable to write, send COMMAND
_delay_ms(2);
PORTD = 0x00;
_delay_ms(2);
}
void lcd_data(unsigned char data){
PORTB = data;
PORTD = 0b10100000;//PORTD |=1<<PIND5 | 0<<PIND6 | 1<<PIND7; //enable to write, send DATA
_delay_ms(2);
PORTD = 0b00100000;//PORTD |=1<<PIND5 | 0<<PIND6 | 0<<PIND7;
_delay_ms(2);
}
void lcd_send_string(char* string){//THIS FUNCTION WORK FOR STRING
while(*string){//Send value of pointer as data to LCD
lcd_data(*string);//Increment string pointer
string++;
}
}
int main(void){
//Settings PORTS
DDRD |= 1<<PIND5 | 1<<PIND6 | 1<<PIND7 ;//port D open to OUTPUT LCD-RS,R/W,E
DDRB = 0xff;//port B output

_delay_ms(16);

lcd_cmd(0x30);   
lcd_cmd(0x0F);   
lcd_cmd(0x01);   
lcd_cmd(0x02);   
lcd_send_string("A");
while(1){

}
return 0;
}
Предполагам ,че някъде правя грешка, но не съм сигурен.
Доста пъти разгледах даташийта на дисплея ,но...
На "proteus" направих почти същия код на примерен дисплей 16x2,работи нормално.
Титла: Програмиране на LCD-dysplay
Публикувано от: mivr в Януари 25, 2013, 04:53:03 pm
Кодът има една видима грешка, а тя е както следва: липса на дефиниране на честотата на процесора което води до грешно отчитане на времето с функцията _delay_ms().

В AtmelStudio 6 компилаторът те предупреждава ако честотата не е дефинирана, препоръчвам ти да ползваш най-новата версия на студиото, то все пак решава особенно много проблеми и спестява много нерви.:)

П.П.
Този линк може да ти се окаже полезен, макар и за друг процесор:
http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_type=project&item_id=879

Поздрави и успех,
Титла: Програмиране на LCD-dysplay
Публикувано от: mihail19871987 в Януари 26, 2013, 12:07:03 am
Мерси за инфото ще го имам на предвид.:)

Обаче проблема ми бил в дисплея , трябвало е да си настроя подсвета с трим. и така, излезе буквата А...
Обаче, ОБАЧЕ забелязвам много странен проблем, единия чип на дисплея грее толкова много че може да те опари, съответно и стабилизатора(20 на 5v. 500ma) ми ми също е като котлон и това става в периода от10-15 секунди след като се покаже буквата.
Захранването ми е от адаптер 220 на 12v 500ma.
Има ли вероятност LCD-то да е нещо калпаво...?
Титла: Програмиране на LCD-dysplay
Публикувано от: mivr в Януари 26, 2013, 01:37:53 pm
Проблемите които водят до такъв ефект са много, засега провери следните три неща:

1.Адапторът на променлив или прав ток е?
2.Ако се премахне дисплея захранването още ли прегрява?
3.Ако закачиш дисплея на друго захранване отново ли прегрява?

Тези въпроси обхващат голяма част от възможностите в зависимост от отговорите ще се опитам да разбера какъв е проблема. :)

Успех,
когато можеж пиши.
Титла: Програмиране на LCD-dysplay
Публикувано от: mihail19871987 в Януари 26, 2013, 04:11:53 pm
Така..
С адаптера зареждам един фенер и реших и да го ползвам за съответните цели.
(1)input 230-240a.c. 50hz 11w
out 9v.d.c 500ma

(2)Когато извадя кабела на 2-ри пин. VCC ,стабилизатора ми спира да грее.
Когато е закачен втори пин. VCC+5 стабилизатор започва да грее ,но чипа на дисплея не.
Когато се появи информация на дисплея и чип започва да грее и стабилизатора също.

(3)Нямам друго захранване да опитам...

Сега взех друг дисплей, като ми остане време ще го закача да го пробвам  и ще пиша.

А иначе сега когато си програмирам, го включвам за 10-15 секунди и така засега ми върши работа :-D
Титла: Програмиране на LCD-dysplay
Публикувано от: mihail19871987 в Януари 29, 2013, 08:24:31 am
Смених дисплея.
Повредата е в него, явно е бил дефектен, последно забелязах, че и половината от него изобщо не изобразяваше нищо от (x07-x0f и x48-x50) .