Member
Статус: Не в сети Регистрация: 03.02.2004 Откуда: Пушкино
"Микроконтроллерное управление звуком" так называется цикл статей в журнале Радиохобби. Описывается регулятор громкости стерео. Хотел бы поинтересоваться, может кто нибудь собирал что то подобное либо читал данную статью и собирает этот регулятор.
Я хочу собрать регулятор 5.1 уже есть в наличии МК ATmega8-16PI, LCD 16S2D (МЭЛТ) управляться будет по 4х битной шине. Микросхемы для регулировки наверно возьму TDA7314 (по i2с) 3 штуки, т.к. TDA7448 негде достать.
Advanced member
Статус: Не в сети Регистрация: 10.04.2003 Откуда: Москва
Собственно говоря, а в чем проблема?
Подключить hardware или написать программу? С первым разобраться не трудно, а вот программа ... в AVR достаточно простая структура и система команд.
Какие проблемы с аппаратурой? (судя по спецификации - ничего сверхсложного)
Member
Статус: Не в сети Регистрация: 03.02.2004 Откуда: Пушкино
Да с подключением особых проблем пока не возникает. А вот с программной частью проблемы т.к. только начинаю осваивать. Хотел написать программу на С. Сейчас пытаюсь разобраться с иницилизацией ЖК. Программу саму дали, а что там еще дописать надо не говорят (все же крутые программисты ). Вот программа:
Цитата:
// индикатор на младшем ниббле порта PDATA #define Strobe EN=1; asm("nop"); asm("nop");EN=0; #define CStrobe RS=0; asm("nop"); asm("nop"); Strobe; ei(); Delay5ms();di(); #define DStrobe RS=1; asm("nop"); asm("nop"); Strobe; ei(); DelayUs(60);di(); //------------------------------------------------- void putch (char DAT){ byte tmp; di(); tmp = DAT & 0xF0; // use high nibble PDATA = (tmp>>4) & 0x0F; DStrobe; // sent high nibble first PDATA = (DAT) & 0x0F; DStrobe; // send low nibble ei(); } //------------------------------------------------- void WriteWCMD(byte DAT){ byte tmp; di(); tmp = DAT & 0xF0; // use high nibble PDATA = (tmp>>4) & 0x0F; CStrobe; // send high nibble first ei(); Delay5ms(); di(); PDATA = (DAT) & 0x0F; CStrobe; // send low nibble ei(); } //------------------------------------------------------- void lcd_init(void){ // Initialise the LCD Display. byte i; Delay5ms();Delay5ms();Delay5ms(); // data length is 8 at this point WriteWCMD(0x33); //set data length to 8 WriteWCMD(0x32); WriteWCMD(0x28); // 4 bit, 2 lines, 5x7 dots //"Mode set, display shift, inc address" WriteWCMD(0x06); // //"Set display ON, cursor OFF, blink OFF" WriteWCMD(0x0C); //"Reset and blank display" WriteWCMD(0x01); } //------------------------------------------------------- #define lcd_blank() WriteWCMD(0x01); //-------------------------------------------------------
Добавлено спустя 1 минуту, 54 секунды: Надо определить к каким ногам подключен индикатор, ei(), di(), byte вроде пока все.
Я правильно понимаю, что это Ваше первое устойство на микроконтроллере? В таком случае лучше начать с простого (например светодиодная мигалка) и разобраться как следует в фукционировании микроконтроллера. Что касается инициализации жки, даташит на его контроллер hd44780 изучили? В нем есть блок схема инициализации. Делаете по ней и всё.
Member
Статус: Не в сети Регистрация: 03.02.2004 Откуда: Пушкино
andrey_ev писал(а):
Я правильно понимаю, что это Ваше первое устойство на микроконтроллере? В таком случае лучше начать с простого (например светодиодная мигалка) и разобраться как следует в фукционировании микроконтроллера.
Делал мигалку.
andrey_ev писал(а):
Что касается инициализации жки, даташит на его контроллер hd44780 изучили?
Да.
andrey_ev писал(а):
В нем есть блок схема инициализации. Делаете по ней и всё.
Advanced member
Статус: Не в сети Регистрация: 10.04.2003 Откуда: Москва
Chip_SET, подключи как тебе удобнее и напиши сам.
Если что-то не понятно - спрашивай.
Я подключал подобный LCD к 8 битам параллельного порта LPT (с 4-битным обменом), проблем небыло. Могу привести ASM текст ... но смысла мало.
В твоем примере все есть, осталось описать уровень работы с битами порта.
Advanced member
Статус: Не в сети Регистрация: 10.04.2003 Откуда: Москва
Зачем тебе занимать еще один порт? Повесь на тот-же.
Или ты что-то другое замышлял насчет порта PD?
Я бы сделал так (ща гляну):
; pin description:
; d0,d1,d2,d3 = data 0,1,2,3
; d4 = 0
; d5 = wr/RD
; d6 = 0
; d7 = RS
Зачем-то пропустил 2 бита ... наверно, что-то задумывал, но забыл.
О! ... слушай, у тебя же есть 8 бит порт, зачем ты хочешь работать в 4х-битном режиме? Это же в 2 раза медленее. Впрочем, это важно только для графических LCD.
Добавлено спустя 54 минуты, 1 секунду: remark: если интересно - я тут развлекался Написано на ASM и только как технологическая версия. Нормальная версия куда-то сгинула.
Member
Статус: Не в сети Регистрация: 03.02.2004 Откуда: Пушкино
serj писал(а):
Зачем тебе занимать еще один порт? Повесь на тот-же.
Это ты про что?
4х битный режим для экономии ног Нога Чтение/Запись на индикаторе подключена на землю, считывать ничего не надо с него. Хотя я посмотрю на 8-ми битный режим может получиться.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения