Технический форум
Вернуться   Технический форум > Программирование > Форум программистов


Ответ
 
Опции темы Опции просмотра
Старый 20.03.2012, 12:06   #1 (permalink)
WOLF007
Member
 
Аватар для WOLF007
 
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
По умолчанию ATmega8 и LCD

Решил попробовать разобраться как сей девайс работает источник тут
код
Код:
/****Тестовая программа для LCD****/
 
#include <io.h>
#include <delay.h>   //используем стандартную процедуру задержки
 
#define RS PC0          //RS подключаем к PC0 микроконтроллера
#define EN PC2          //EN подключаем к PC2 микроконтроллера
 
/***Функция записи команды в LCD***/
 
void lcd_com(unsigned char p) //'p' байт команды
{
PORTC &= ~(1<<RS);   // RS = 0
PORTC |= (1<<EN);    // EN = 1 (начало записи команды в LCD)
PORTD = p;             // вывод команды на шину DB0-7 LCD
delay_us(100);        // длительность сигнала EN
PORTC &= ~(1 << EN);   // EN = 0 (конец записи команды в LCD)
delay_us(100);        // пауза для выполнения команды
}
 
/***Функция записи данных в LCD***/
 
void lcd_dat(unsigned char p)  //'p' байт команды
{
PORTC |= (1 << RS)|(1 << EN);  //RS = 1, EN = 1 (начало записи команды в LCD)
PORTD = p;                     //вывод команды на шину DB0-7 LCD
delay_us(100);                // длительность сигнала EN
PORTC &= ~(1 << EN);           // EN = 0 (конец записи команды в LCD)
delay_us(100);                // пауза для выполнения команды
}
 
/***Функция инициализации LCD***/
 
void lcd_init(void)
{
lcd_com(0x08);          // полное выключение дисплея
lcd_com(0x38);           // 8 бит 2 строки
delay_us(100);
lcd_com(0x38);           // 8 бит 2 строки
delay_us(100);
lcd_com(0x38);           // 8 бит 2 строки
lcd_com(0x38);
lcd_com(0x01);           // очистка дисплея
delay_us(100);
lcd_com(0x06);           // сдвиг курсора вправо
lcd_com(0x0D);           // включение дисплея, мигающий курсор
}
 
/***Основная программа***/
 
int main (void)
{
DDRC |= (1 << PC2)|(1 << PC1)|(1 << PC0); // PC0-3 выходы
PORTC = 0x00;                      // лог. 0 на выходе
DDRD = 0xff;                       // PD0-7 выходы
PORTB = 0x00;
 
lcd_init();      // инициализация дисплея
lcd_dat('H');    // выводим символы на экран
lcd_dat('e');
lcd_dat('l');
lcd_dat('l');
lcd_dat('o');
lcd_dat(' ');
lcd_dat('w');
lcd_dat('o');
lcd_dat('r');
lcd_dat('l');
lcd_dat('d');
lcd_dat('!');
}
при компиляции в CodeVisionAvr ругается
Error: C:\Users\dog\Desktop\test\test_cld.c(13): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(14): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(15): undefined symbol 'PORTD'
Error: C:\Users\dog\Desktop\test\test_cld.c(17): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(25): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(26): undefined symbol 'PORTD'
Error: C:\Users\dog\Desktop\test\test_cld.c(28): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(51): the 'main' function must return 'void' type
Error: C:\Users\dog\Desktop\test\test_cld.c(54): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(55): undefined symbol 'DDRD'
WOLF007 вне форума   Ответить с цитированием

Старый 20.03.2012, 12:06
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Эти топики создавались ранее и они могут вам помочь

Часы с термометром на ATmega8
Вариант платы для часов на ATmega8
Проблемы с запуском часов на ATmega8

Старый 10.04.2012, 22:40   #2 (permalink)
boogyman
Новичок
 
Регистрация: 10.04.2012
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ну что, разобрался?
boogyman вне форума   Ответить с цитированием
Старый 19.04.2012, 09:57   #3 (permalink)
WOLF007
Member
 
Аватар для WOLF007
 
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
По умолчанию

разобрался. Больше читать маны надо=)
WOLF007 вне форума   Ответить с цитированием
Старый 20.04.2012, 19:31   #4 (permalink)
Bydlokoder
Member
 
Регистрация: 06.05.2011
Сообщений: 3,305
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 11775
По умолчанию

В чем был косяк?
Bydlokoder вне форума   Ответить с цитированием
Старый 20.04.2012, 21:58   #5 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

Ну один из косяков это то, что функция main объявлена как int но ничего не вернула. т.е. в конец функции ндо было вставить
Код:
return 0;
к примеру
kreol вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 22.04.2012, 13:54   #6 (permalink)
Bydlokoder
Member
 
Регистрация: 06.05.2011
Сообщений: 3,305
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 11775
По умолчанию

А почему компилятор на порт C ругается?
Bydlokoder вне форума   Ответить с цитированием
Старый 24.04.2012, 13:15   #7 (permalink)
WOLF007
Member
 
Аватар для WOLF007
 
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
По умолчанию

Немножко апнем темку
подключение
Микросхема | Дисплей
PB0 -> RS
PB1 -> RW
PB2 -> E
PB4 -> D4
PB5 -> D5
PB6 -> D6
PB7 -> D7
Код:
#include <mega8.h>
#include <delay.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
////////////////////////////////////////////////////////////////////////////////////
short int i;

void main(void)
{
PORTB=0x00;
DDRB=0xFF; 


lcd_init(16);  //initialization
// Global enable interrupts
#asm("cli") //delay   
	
	lcd_gotoxy(0,0); //тут мы шагаем на первую строку к первому символу
  	lcd_putsf("Технический");
  	lcd_putsf("        OTDEL"); 
}

Последний раз редактировалось WOLF007; 24.04.2012 в 13:23
WOLF007 вне форума   Ответить с цитированием
Старый 24.04.2012, 13:28   #8 (permalink)
WOLF007
Member
 
Аватар для WOLF007
 
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
По умолчанию

Добавлю адреса портов
/********
По поводу портов описаны они в даташите к atmega8
укажу здесь список портов и их 16-тиричный адрес
PORTB = 0x18;
PORTC = 0x15;
PORTD = 0x12;
WOLF007 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 04:20.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.