Перейти к содержанию

Помогите! Atmega16 И Lcd !


Рекомендуемые сообщения

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

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

за материальный, либо моральный ущерб причиненный данным сообщением напрямую или косвенно.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов 100
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Вы уж извините, но давайте хотя бы ставить знаки препинания, если уж лень начать предложение с большой буквы и написать его начало...

Если это вопрос, то имеете ввиду после 71 поста моего?

После того я вообще всё забросил, т.е. началась сессия, а потом каникул... то да сё, и вобшем сейчас все делаю с нуля...

Предложили такой вариант: я вывожу "пустые" символы, т.е. пробелы, но это отпало после того, как я сделал что бы МК выводил 5 символов подряд с разным кодом. Всё тоже...

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выложите текст программы, а то гадать можно до второго пришествия.

P.S. Такая формулировка Вам больше нравиться?

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

за материальный, либо моральный ущерб причиненный данным сообщением напрямую или косвенно.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Да, благодарю за понимание, так мого лучше =)

Вот текст, сильно не пинать :unsure: , это черновик, что бы освоить включение дисплея.

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


  int main(void)
  {
DDRA = 0xff;	//порт А - ВЫХОД, данные 0-7
PORTA = 0xff;	//на всех выводах единицы
DDRB = 0xff;	//порт В - ВЫХОД, управление. Е-0,R/W-1, Aо-2.
PORTB = 0x00;	//на всех выводах нули
DDRD = 0x00;	//порт Д - ВХОД
PORTD = 0xff;	//на порте Д единички

_delay_ms (50);			//задержка при включении дисплея

PORTA = 0b00110000;		//готовим данные на выход. инициализация.

PORTB = 0b00000001;		//отправляем. импульс на E
_delay_ms (50);			//задержка на обработку дисплея
PORTB = 0b00000000;		//убираем импульс с E
_delay_ms (50);			//ждем 50мс.

PORTB = 0b00000001;		//отправляем. импульс на E
_delay_ms (50);			//задержка на обработку дисплея
PORTB = 0b00000000;		//убираем импульс с E
_delay_ms (50);			//ждем 50мс.

PORTB = 0b00000001;		//отправляем. импульс на E
_delay_ms (50);			//задержка на обработку дисплея
PORTB = 0b00000000;		//убираем импульс с E
_delay_ms (50);			//ждем 50мс.

PORTA = 0b00111000;		//установка параметров, 8 бит, 0 страница знакогенератора
PORTB = 0b00000001;		//отправляем. импульс на E
_delay_ms (50);			//задержка на обработку дисплея
PORTB = 0b00000000;		//убираем импульс с E
_delay_ms (50);			//задержка на обработку дисплея

PORTA = 0b00001000;		//выкл. дисплей
PORTB = 0b00000001;		//отправляем. импульс на E
_delay_ms (50);			//задержка на обработку дисплея
PORTB = 0b00000000;		//убираем импульс с E
_delay_ms (50);			//задержка на обработку дисплея

PORTA = 0b00000001;		//очистка дисплея
PORTB = 0b00000001;		//отправляем. импульс на E
_delay_ms (50);			//задержка на обработку дисплея
PORTB = 0b00000000;		//убираем импульс с E
_delay_ms (50);			//задержка на обработку дисплея

PORTA = 0b00000110;		//установка режима ввода данных
PORTB = 0b00000001;		//отправляем. импульс на E
_delay_ms (50);			//задержка на обработку дисплея
PORTB = 0b00000000;		//убираем импульс с E
_delay_ms (500);		//задержка на обработку дисплея


PORTA = 0b00001110;		//включаем дисплей, курсор подчёркивание
PORTB = 0b00000001;		//отправляем. импульс на E
_delay_ms (50);			//задержка на обработку дисплея
PORTB = 0b00000000;		//убираем импульс с E
_delay_ms (50);			//задержка на обработку дисплея


PORTA = 0b00010100;		//курсор вправо
PORTB = 0b00000101;		//отправляем. импульс на E
_delay_ms (50);			//задержка на обработку дисплея
PORTB = 0b00000000;		//убираем импульс с E
_delay_ms (50);			//задержка на обработку дисплея

PORTA = 0x00;





       while (1) {              // Бесконечный цикл

		if ((PIND & (1<< PD7)) == 0)
		{

			PORTA = 0b00000011;		//курсор на исходную
			PORTB = 0b00000001;		//отправляем. импульс на E 
			_delay_ms (50);			//задержка на обработку дисплея
			PORTB = 0b00000000;		//убираем импульс с E и A0
			_delay_ms (500);		//задержка на обработку дисплея 
			PORTA = 0x00;

		}

		if ((PIND & (1<< PD6)) == 0)
		{

		PORTA = 0b00110101;		//пишем =
		PORTB = 0b00000100;		//Ao
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000101;		//Ао и Е
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000000;		//убираем импульс с E
		_delay_ms (500);

		PORTA = 0b00011111;		//пишем =
		PORTB = 0b00000100;		//Ao
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000101;		//Ао и Е
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000000;		//убираем импульс с E
		_delay_ms (500);

		PORTA = 0b00011101;		//пишем =
		PORTB = 0b00000100;		//Ao
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000101;		//Ао и Е
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000000;		//убираем импульс с E
		_delay_ms (500);

		PORTA = 0b01011101;		//пишем =
		PORTB = 0b00000100;		//Ao
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000101;		//Ао и Е
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000000;		//убираем импульс с E
		_delay_ms (500);

		PORTA = 0b01010111;		//пишем =
		PORTB = 0b00000100;		//Ao
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000101;		//Ао и Е
		_delay_ms (50);			//задержка на обработку дисплея
		PORTB = 0b00000000;		//убираем импульс с E
		_delay_ms (500);

		}

		if ((PIND & (1<< PD5)) == 0)
		{

			PORTA = 0b00010111;		//сдвиг курсора вправо
			PORTB = 0b00000001;		//отправляем. импульс на E 
			_delay_ms (50);			//задержка на обработку дисплея
			PORTB = 0b00000000;		//убираем импульс с E 
			_delay_ms (500);		//задержка на обработку дисплея 
			PORTA = 0x00;

		}

	} 

  }

Изменено пользователем wowa
Ссылка на комментарий
Поделиться на другие сайты

Вариант первый.

Предположим у Вас Tiny2313

Вы уверены, что порты PB0 и PB1 правильно у Вас работают. Я нет. Дело в том, что по умолчанию в AVR эти порты подключены к компаратору, а я не вижу у Вас команды отключить компаратор. Посмотрите как это делается(регистр ACSR)

Пробуем, пишем что получилось.

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

за материальный, либо моральный ущерб причиненный данным сообщением напрямую или косвенно.

Ссылка на комментарий
Поделиться на другие сайты

Нет, собираю на Меге16.

До того как подключить на порт В дисплея я туда весил светодиодный индикатор, который вполне успешно работал, так что думаю ничего не мешает.

Помимо этого на эти выходы напаяны светодиодики, так что я могу видеть когда сигнал туда идёт.

Выявилась ещё одна странность: после очистки индикатора он перестаёт двигать курсором вообще когда посылаешь на выход данные, пока командой не сдвинешь курсор вправо... :blink:

Схожу, пожалуй, завтра в магазин, куплю какой нибудь другой...

Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

Здравствуйте! конструирую в протеусе один проект с использованием жк дисплея lm4229 , который на контроллере t6963.

первым делом пытаюсь вывести на экран простой ряд из 8 точек, но они всё никак не выводятся. буду благодарен, если ткнёте меня в ошибку. ппрога написанна на ассемблере в avrstudio

.include <m16def.inc>

.def temp=r16

.def splin=r17

.def count=r18

.def data=r19

.equ halt_d=0

.equ rst_d=3

.equ ce_d=1

.equ wr_b=0

.equ rd_b=1

.equ cd_b=2

.org $000

rjmp reset

reset:

;установка стека

ldi temp,1

out sph,temp

;сброс дисплея

sbi ddrd,rst_d

cbi portd,rst_d

nop

nop

nop

nop

nop

nop

sbi portd,rst_d

;читаем статус

sbi ddrd,halt_d

sbi portd,halt_d

rcall status

;вводим 11111111 в память

ldi data,0b11111111

out ddrc,data

out portc,data

sbi portb,rd_b

cbi portb,wr_b

cbi portb,cd_b

cbi portd,ce_d

rcall delay

sbi portd,ce_d

sbi portb,wr_b

;вводим команду записи в память

ldi data,0b11000100

out portc,data

sbi portb,rd_b

cbi portb,wr_b

sbi portb,cd_b

cbi portd,ce_d

rcall delay

sbi portd,ce_d

sbi portb,wr_b

main:

rjmp main

;___задержка

delay:

ldi count,10

oo11:

subi count,1

brne oo11

ret

;__читаем статус

status:

sbi ddrb,rd_b

cbi portb,rd_b

sbi ddrb,wr_b

sbi portb,wr_b

sbi ddrb,cd_b

sbi portb,cd_b

sbi ddrd,ce_d

cbi portd,ce_d

ldi temp,0x00

out ddrc,temp

out portc,temp

r01:

in data,pinc

sbrs data,0

rjmp r01

sbrs data,1

rjmp r01

reti

Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...

Господа немного вклинюсь в тему, нужна маленькая помощь!

сообственно по бегущей строке! есть текст который выводится в режиме бегущей строки,

к примеру:

"Буря мглою небо кроет,

Вихри снежные крутя;

То, как зверь, она завоет,

То заплачет, как дитя," :)

вообщем нужно сделать что то типо остановки текста к примеру последней строчки. Т.Е.

(

"Буря мглою небо кроет,

Вихри снежные крутя;

То, как зверь, она завоет,

То заплачет,.... // вот это всё выводится в режиме бегущей строки

а при дохождении до вот этих слов:

как дитя,"

он отанавливается и остаётся выведен на LCD

)

Ну как то так :)

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Даю

#include <mega8.h>
#include <delay.h> // подключаем библиотеку задержки

// 1 Wire Bus functions
#asm
  .equ __w1_port=0x18 ;PORTB
  .equ __w1_bit=7
#endasm
#include <1wire.h>
#include <ds18b20.h>
#include <stdio.h> 
#include <string.h>

// Alphanumeric LCD Module functions
#asm
  .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>  


unsigned int liht;  //переменная подсветки 
unsigned char beg_str;   

unsigned int menu=0; // переменная меню   
unsigned int mode=0;  //переменная режима выбора  


unsigned int sek; // переменная сек.
unsigned int min; // пересенная мин.
unsigned int hour; // переменная часов     

unsigned int day=16; // переменная день.
unsigned int month=6; // пересенная месяц.
unsigned int year=2011; // переменная год  

#pragma rl+
unsigned char arr[] = "                Вас приветствуют    часы KS-1.0.  " ; 
unsigned char arr1[] = "               Датчик температуры  DS18b20   не найден.               " ; 
unsigned char arr2[] ="                Датчик температуры  DS18b20   найден.  "
#pragma rl-




// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void) // таймер выставлен на частоту 1 Гц
{
// Place your code here
 TCNT1H=0;
 TCNT1L=0;
 sek++; // инкрементируем секунду  




}  

void vivod (void)
{  
unsigned int i=0 , a=0;



lcd_gotoxy(0,0);  
//lcd_puts(arr);  



for(i=0; i < sizeof(arr)-16 ; i++)
{
       for(a=0; a<15 ; a++)
       {
               lcd_gotoxy(a,0); 
               lcd_putchar(arr[i+a]);
       }

delay_ms(170); 
}

}   


 void vivod_1(void)
{  
unsigned int i=0 , a=0;



lcd_gotoxy(0,1);  
//lcd_puts(arr);  



for(i=0; i < sizeof(arr1)-16 ; i++)
{
       for(a=0; a<15 ; a++)
       {
               lcd_gotoxy(a,1); 
               lcd_putchar(arr1[i+a]);
       }

delay_ms(170); 
}

}


void cloc (void)
{
///// Условия часов.
           if(sek==60) // если сек = 60 
          {
             min++; // добавляем 1 к переменной "минута" 
             sek=0; // зануляем переменную "секунда"
          }
           if(min==60) // если мин = 60 
           {
              hour++; // добавляем 1 к переменной "час" 
              min=0; // зануляем переменную "минута"
            } 

 lcd_gotoxy(4,0); // выводим посередине, если хотите вывести в начале дисплея тогда нужно выставить lcd_gotoxy(0,0);  
 lcd_putchar(hour/10+0x30);
 lcd_putchar(hour%10+0x30);
 lcd_putchar(':');
 lcd_putchar(min/10+0x30);
 lcd_putchar(min%10+0x30);
 lcd_putchar(':');
 lcd_putchar(sek/10+0x30);
 lcd_putchar(sek%10+0x30); 
}





void main(void) 
{ 



 PORTB.0 = 1;              
 DDRB=0xFF;

DDRB=0xFF;

PORTC=0x7F; // выставляем порт С на 4 кнопки.
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x1E;
OCR1AL=0x85;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;



// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// 1 Wire Bus initialization
w1_init();

// LCD инициализация 
lcd_init(16); 

     vivod();

     vivod_1();
     delay_ms(100);

    lcd_clear();

// Global enable interrupts
#asm("sei")


while (1)
     {

     cloc();




     };
}

Код на СИ компилятор CVAVR

нужно на самао деле организовать что бы бегущая строка выводила текст в моей задумке вот так:

при включении питаия идёт приветствие

" Вас приветствуют часы KS-1.0."

останавливается надпись

"часы KS-1.0." // к примеру по середине

во второй строке пошёл вывод

"Датчик температуры DS18b20 не найден." // если не найден

"Датчик температуры DS18b20 найден." // если найден то выводится сразу за текстом температура и тоже останавливается в самом начале 2й строки.

а первая строка после всех этих манипуляций переходит в режим времени и даты

образно

17:26:20 22-06-2011

t Дома = 28.2 С

что то типо этого

в принцепи меню самих часов уже сделал.

там установка времени, даты, измеение языка, установка будильника, даже как вы заметили есть отключение подсвети

вот хочу к своим часикам придать экслюзивности именно с бегущей строкой :P

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

он отанавливается и остаётся выведен на LCD
В исходнике не разбирался. Но примерно понятна проблема.

Попробуйте добавить пробелы в тексте. Тогда они и будут видны, а строка уедет.

Ссылка на комментарий
Поделиться на другие сайты

Alex

Вы немного не поняли меня :unsure:

Я имелл в веду не что бы он пропадал, а на оборот, при дохождения до конца текста, последняя надпись в тексте оставалась на экране

вообщем я тут поколдовал маленько с кодом, и вот что у меня вышло:

VIDEO_068.rar

Это маленькое видео моих часиков :P

Там кстати наглядно видно как при приветствии первая строка замерает, и вывод текста уже начинается на 2ой строке, при этом первая строка остаётся не изменной

Изменено пользователем Кирилл84

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

Дело в том что я хотел на конец текста первой строки (который останавливается) воткнуть именно сами часы то есть "00:00:00"

а на конец второй строки "Датчик температуры DS18b20 найден. t Дома 27С"

как бы если можно было в массив

unsigned char arr[] = " Вас приветствуют часы KS-1.0. " ;

воткнуть

cloc();

итог

unsigned char arr[] = " Вас приветствуют часы KS-1.0. cloc(); " ;

но ведь так нельзя????

Для любого процесса найдётся такой, без завершения которого невозможен данный

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

привет всем . я тоже часы делаю на мк mega16.у меня вопрос как реализовать режим стс на таймере .вообще я тему создал ))

вот она там http://forum.cxem.ne...howtopic=116831 там же и исходник

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Здравствуйте, ребята. Подскажите, пожалуйста, как выводить одновременно бегущую строку в первой строке LCD и вводить символы с матричной клавиатуры во второй строке (чтобы при этом бегущая строка не останавливалась, т.е. двигалась влево до определенного уровня, а потом вправо). Например, в верхней строке надпись "Введите пароль", а во второй отображался сам пароль введенный с клавиатуры. Заранее спасибо за помощь.

Ссылка на комментарий
Поделиться на другие сайты

Вопрос совершенно непонятен. Что значит "как выводить" ? Всё равно на дисплей данные выводятся посимвольно, один за другим, вот и выводите сначала в верхнюю строку, а затем в нижнюю. Данные то на дисплее останутся до их смены.

Ссылка на комментарий
Поделиться на другие сайты

С непосредственным выводом текста у меня проблем нет, но пока бегущая строка движется я не могу вводить текст в нижнюю строку (нужно ждать пока она остановится). А мне нужно чтобы верхняя строка двигалась до тех пор пока я полностью не введу пароль. Но вот как это сделать я не пойму.

Ссылка на комментарий
Поделиться на другие сайты

А что такое движение строки ? Это обычный вывод текста, просто каждый раз разного (сдвинутая строка). Вы же "рисуете" верхнюю строку, почему после неё сразу не "нарисовать" нижнюю ?

Не понятно, в чём проблема... И причём тут какой-то ввод пароля, тоже совершенно не понятно. У Вас, видимо, всё перемешалось и Вы просто запутались, не понимая чего хотите :)

Ссылка на комментарий
Поделиться на другие сайты

"Вы же "рисуете" верхнюю строку, почему после неё сразу не "нарисовать" нижнюю ?" мне нужно не после неё написать, а во время того как она перемещается. Т.е. верхняя строка крутится в бесконечном цикле, а мне вовремя этого нужно вводить внизу пароль. Проблема в том как это сделать одновременно.

Ссылка на комментарий
Поделиться на другие сайты

мне нужно не после неё написать, а во время того как она перемещается.
Вы троллите чтоли нас ? :) Что значит "во время её перемещения" ?

Пофиг что там куда перемещается и рисуется, просто выводите в нижнюю строку то, что хотите, сразу же после вывода верхней. Вот и всё.

нужно вводить внизу пароль
Опять же Вы перепутали мух с котлетами, и нас заодно вводите в заблуждение.

Объясните нормально, в чём у Вас проблема - с вводом данных с клавиатуры, или с выводом данных на дисплей ?

Ссылка на комментарий
Поделиться на другие сайты

Проблемы с отдельным выводом текста на дисплей с клавиатуры у меня нет и с выводом динамической строки тоже.

Проблема в том что я не могу вводить в нижней строке пароль во время того как движется текст в верхней строке т.к. либо прерывается цикл в котором происходит движение текста (если опрос клавиатуры находится в этом же цикле), либо необходимо ждать пока цикл закончится (если опрос клавиатуры стоит после цикла).

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...