Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 18.01.2010, 18:50  
FlashAck
Частый гость
 
Регистрация: 09.04.2009
Сообщений: 23
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
FlashAck на пути к лучшему
По умолчанию AVR и LCD

Написал схемку подсоединения LCD к AT90S2313 через два сдвиговых регистра. Делал с одним на тиньку2313 все работает в протеусе отлично. А тут не в какую. Я бы предположил что ошибка в самой схеме, но преподаватель друга(которому делал работу) сказал что не хватает какого то куска кода в программе для работы второго регистра. И чего то это меня завело в тупик. Подскажите пожалуйста в чем глюк.

Код:
#include ‹90s2313.h›
#define C PORTB.0
LCD_Write_byte (char byte, char RS)
{
int j;

PORTB.1=1;
C=1;
C=0;
PORTB.1=0;
C=1;
C=0;
PORTB.1=0;
C=1;
C=0;
PORTB.1=RS;
C=1;
C=0;


for (j=7;j›=0;j--)
{
PORTB.1=(byte››j)&0b00000001;
C=1;
C=0;
}

}


interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
static int s=0;
s++;
switch (s)
{
case 1: LCD_Write_byte(0x38,0);
case 2: LCD_Write_byte(0x0C,0);
case 3: LCD_Write_byte(0x06,0);
case 4: {if (PIND.0==1) LCD_Write_byte(0x31,1); break;}
case 5: {if (PIND.1==1) LCD_Write_byte(0x32,1); break;}
case 6: {if (PIND.2==1) LCD_Write_byte(0x33,1); break;}
case 7: {if (PIND.3==1) LCD_Write_byte(0x34,1); break;}
case 8: {LCD_Write_byte(0x01,0); s=3; break;}

}


}


void main(void)
{

DDRD=0xFF;
DDRB=0xFF;
DDRD.0=0;
DDRD.1=0;
DDRD.2=0;
DDRD.3=0;
PORTD=0x00;
PORTB=0x00;
PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
TCCR0=0x04;
TCNT0=0x00;
TIMSK=0x02;
#asm("sei")

}
Миниатюры:
Нажмите на изображение для увеличения
Название: LCDProteus.jpg
Просмотров: 91
Размер:	96.3 Кб
ID:	3768  
Реклама:
FlashAck вне форума  
Непрочитано 18.01.2010, 19:26  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: AVR и LCD

Сообщение от FlashAck Посмотреть сообщение
Я бы предположил что ошибка в самой схеме, но преподаватель друга(которому делал работу) сказал что не хватает какого то куска кода в программе для работы второго регистра.
Всего хватает. Но вот программа схеме не соответствует. Для сброса регистров единичка должна пройти через 14 сдвигов по регистру, а у Вас их всего 12.
И в данных есть разрыв - вывод 13 первого регистра не подключен к индикатору, т.е. для вывода 8-ми бит данных нужно 9 сдвигов.
RW индикатора можно просто заземлить, все равно чтение из него реализовать не получится.
Про неоптимальность использованных как программных, так и аппартных решений я промолчу...
kison вне форума  
Непрочитано 18.01.2010, 19:29  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: AVR и LCD

Не вдаваясь ни в схему, ни в алгоритм, скажите мне, при каких условиях s может быть равно 2, например ???
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
static int s=0;
s++;
switch (s)
{
case 1: LCD_Write_byte(0x38,0);
case 2: LCD_Write_byte(0x0C,0);
__________________
warez
urry вне форума  
Непрочитано 18.01.2010, 19:33  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: AVR и LCD

Сообщение от urry Посмотреть сообщение
Не вдаваясь ни в схему, ни в алгоритм, скажите мне, при каких условиях s может быть равно 2, например ???
При втором прерывании от таймера будет.
После первого = 1, после второго 2 и т.д.
А вот сброс s не предусмотрен....
kison вне форума  
Непрочитано 18.01.2010, 19:46  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: AVR и LCD

После первого = 1, после второго 1 и т.д.
baiderin вне форума  
Непрочитано 18.01.2010, 19:47  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: AVR и LCD

Сообщение от baiderin Посмотреть сообщение
После первого = 1, после второго 1 и т.д.
Обоснуйте.
kison вне форума  
Непрочитано 18.01.2010, 20:05  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: AVR и LCD

static int s=0;
s++;
baiderin вне форума  
Непрочитано 18.01.2010, 20:13  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: AVR и LCD

Виноват,не осознал, что она static.
baiderin вне форума  
Непрочитано 18.01.2010, 20:13  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: AVR и LCD

Сообщение от baiderin Посмотреть сообщение
static int s=0;
s++;
Ну и??
Если бы было
Код:
static int s;
s = 0;
s++;
То бы и не росло. Однако инициализация СТАТИЧЕСКОЙ переменной выполняется только ОДИН раз.
kison вне форума  
Непрочитано 18.01.2010, 21:27  
FlashAck
Частый гость
 
Регистрация: 09.04.2009
Сообщений: 23
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
FlashAck на пути к лучшему
По умолчанию Re: AVR и LCD

Сообщение от kison Посмотреть сообщение
Всего хватает. Но вот программа схеме не соответствует. Для сброса регистров единичка должна пройти через 14 сдвигов по регистру, а у Вас их всего 12.
И в данных есть разрыв - вывод 13 первого регистра не подключен к индикатору, т.е. для вывода 8-ми бит данных нужно 9 сдвигов.
RW индикатора можно просто заземлить, все равно чтение из него реализовать не получится.
Про неоптимальность использованных как программных, так и аппартных решений я промолчу...
Насчет аппаратных решений так надо. Посылая не байтами а тетрадами можно было сделать и с одним сдвиговым. И надо не 14, а 13 потому что 13 первого регистра переходит автоматом в 3й второго(т.к. автоматически то надо не 9 сдвигов а все таки восемь). Единственное что у мню 12 а не 13. поэтому я это учел и добавил после цикла в процедуре записи C=0;C=1;, но все равно не помогает.
FlashAck вне форума  
 

Закладки
Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
AVR и интерфейс. Просто (но не для меня) Харрисон Микроконтроллеры, АЦП, память и т.д 3 03.03.2010 02:22
Подключение LCD дисплея utyfwdfkb Информация по радиокомпонентам 8 31.10.2009 01:34


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot