роботы робототехника микроконтроллеры


 Страниц (1): [1]   

> Описание: не понимаю как вывести на LCD экран
pyls Post Id


Рядовой


Сообщений всего: 2
Дата рег-ции: Апр. 2012  



Всем здравствуйте и доброго времени суток. У меня есть задание - передать по USART данные с датчика ds18b20 и вывести их на экран, готовая функция на датчик есть, на прием и передачу USART написал сам, вроде все правильно, но что бы проверить в Протеусе нужно написать функцию вывода на LCD, я прочитал как с ним работать на многих ресурсах, но у меня не вышло. Я не понимаю как вывести, с инициализацией проблем нет, там несколько строчек.
Я хотел сначала просто попробовать передать число 0хFF и вывести его на экран на приемной стороне...но увы, что не так.
Помогите пожалуйста разобраться с этим вопросомУлыбка
вот код на передачу по USART
CODE:

#include <tiny2313.h>
#include <stdio.h>
#define speed XTAL/(16ul*baudrate)-1
#define XTAL 8000000ul // тактова частота
#define baudrate 9600ul //скорость в бодах
#define SET_B(x) |= (1<<x) // Установить бит
#define CLR_B(x) &=~(1<<x) // Сбросить бит
void main(void)
{
UBRRL = speed;
UBRRH = 0;
UCSRB SET_B(TXEN); // разрешаем передачу - установка бита TXEN в 1
UCSRC SET_B(USBS); // один стоповый бит
UCSRC = (3<<UCSZ0); // формат кадра - 8 бит
while(!(UCSRA & (1<<UDRE)) ); // ждем пока очистится буфер передачи
// как только UDRE установится
UDR = 0xFF; // начать передачу данных

}

А вот на прием
CODE:
#include <tiny2313.h>
#include <stdio.h>
#define UBR_ XTAL/(16ul*baudrate)-1
#define XTAL 8000000ul // тактова частота
#define baudrate 9600ul //скорость в бодах
#define SET_B(x) |= (1<<x) // Установить бит
#define CLR_B(x) &=~(1<<x) // Сбросить бит
#if UBR_ > 255 // если число записанное в регстр скорости больше 255
#error "USART!" // то ошибка
#endif
int temp; // глобальная переменная данных температуры
void main(void)
{
UCSRA =0;
UBRRL =(UBR_&0xFF); // скорость 9600 бод
UBRRH =0; // удвоенная скорость отключена
UCSRC = (1 << UCSZ0) | (1 << UCSZ1); // формат кадра 8 бит
UCSRB =(1<<RXEN)|(1<<RXCIE); //включить приемник
while(!(UCSRA & (1<<RXC)) ); // ждем пока очистится буфер приема
// как только UDRE установится
temp=UDR; //записать из удр в темп
}

И самое страшное для меня на LCD
CODE:
#include <tiny2313.h> //библиотека ввода\вывода
#include <delay.h> //библиотека задержки
#asm //сообщаем куда подключён экран – порт B
.equ __lcd_port=0x18
#endasm
#include <lcd.h> //библиотека для LCD
#include <stdio.h> //не знаю что за библиотека, но без неё Коллапс
char lcd_buffer[33]; //массив с данными для экрана
void main(void)
{
int temp; //переменная для хранения температуры
lcd_init(16); //инициилизация LCD, и говорим что он на 16 символов
sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1); //записываем в массив для экрана температуру и всё такое
lcd_clear(); //чистим дисплей перед выводом
lcd_puts(lcd_buffer); //выводим масив на LCD
delay_ms(500); //ждём 500мс
};
}

Прошу прощения за такой монолог Смущение
[/code]
И кому интересно, программа на сам датчик
CODE:
#include <tiny2313.h> //библиотека ввода\вывода
#asm //сообщаем куда подключен датчик
.equ __w1_port=0x12; PORTD
.equ __w1_bit=3
#endasm
#include <1wire.h> //библиотека работы с 1Wire
#include <ds18b20.h> //библиотека для работы с датчиком ds18b20
#include <stdio.h> //ненаю что за библиотека, но без неё неполучается
void main(void)
{
unsigned char devices; //переменная в которой количество присоединенных датчиков
int temp; //переменная для хранения температуры
devices=w1_init(); //ищем датчики
while(devices>0) //бесконечный цикл, если датчик подключен
{
temp=ds18b20_temperature(0); //читаем температуру
if (temp>1000){ //если датчик выдаёт больше 1000
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
};
}
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Проверить работу USART можно подключив светодиодики на порт. Пришедший байт присваивать PORTx. Порт должен быть сконфигурирован как выход.

ПМСМ, для работы с LCD стоит взять МК побольше http://chipenable.ru/index.php/p...-connection.html
 
 Top
pyls Post Id


Рядовой


Сообщений всего: 2
Дата рег-ции: Апр. 2012  



mihail пишет:
Проверить работу USART можно подключив светодиодики на порт. Пришедший байт присваивать PORTx. Порт должен быть сконфигурирован как выход.

ПМСМ, для работы с LCD стоит взять МК побольше http://chipenable.ru/index.php/p...-connection.html

а зачем микроконтроллер по больше? с этими функциями, которые я уже слегка изменил у меня на приемной стороне еще 70% памяти свободно от 2 кб Улыбка
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



частота у ЛСД больше, чем 8. (обычно)

(Отредактировано автором: 30 Апреля, 2012 - 12:30:03)

 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



я имел ввиду коианды , которые обычно не учитываются
 
 Top
Страниц (1): [1]
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru