Мелкие вопросы по МК и ПЛИС.
Ошибочно если не правильно подключишь просто проводки к LPT или коротнешь их между собой, то что будет с этим портом? Резисторы хоть как то ток ограничат и есть шанс что порт не вылетит.
И причем тут сейчас "некоторые микросхемы", какие именно? Или хочешь чтоб простейший прошивальшик на "пяти проводках" работал как универсальный программатор для всех случаев и под любые микросхемы?
Тогда тем более для согласования нужно буферную микросхему хотя бы ставить и питать ее от прошиваемого устройсва. Серия 74LS244 на питание от 3В не расчитана (мин. 4,75V) и будет работать или нет конкретный экземпляр микросхемы неизвестно, как вариант тогда серию 74HC244 поставить ( питание мин. от 2V до 6V), но они более "капризные".
И причем тут сейчас "некоторые микросхемы", какие именно? Или хочешь чтоб простейший прошивальшик на "пяти проводках" работал как универсальный программатор для всех случаев и под любые микросхемы?
Тогда тем более для согласования нужно буферную микросхему хотя бы ставить и питать ее от прошиваемого устройсва. Серия 74LS244 на питание от 3В не расчитана (мин. 4,75V) и будет работать или нет конкретный экземпляр микросхемы неизвестно, как вариант тогда серию 74HC244 поставить ( питание мин. от 2V до 6V), но они более "капризные".
- sachok
- Опытный кот
- Сообщения: 849
- Зарегистрирован: Сб янв 05, 2008 11:05:15
- Откуда: Україна м.Луцьк
- Контактная информация:
Есть проблема когда вывожу показания на ЖКИ, вот таким методом:
Proteus выдает ошибку:
Что делать?
Код: Выделить всё
if (way>99999 && way<999999)
{
lcd_putsf("S=");
lcd_putchar (way/100000+0x30);
lcd_putchar ((way/10000)%10+0x30);
lcd_putchar ((way/1000)%10+0x30);
lcd_putsf(".");
lcd_putchar ((way/100)%10+0x30);
lcd_putchar ((way/10)%10+0x30);
lcd_putchar ((way/1)%10+0x30);
lcd_putsf("km");
}
Proteus выдает ошибку:
Что делать?
Я не Сашок!!!
-
Skrrmrchoh
- Нашел транзистор. Понюхал.
- Сообщения: 185
- Зарегистрирован: Чт сен 06, 2007 22:36:09
- Откуда: Санкт-Петербург
Не могу разобраться с кодевиженовской функцией.
Стандартный пример в папке examples с DS18B20 и LCD.
В примере:
sprintf(lcd_buffer,"t%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(500);
Допустим, мне надо выводить значение переменной i на дисплей.
Из вышеприведенного кода я сделал вот что:
sprintf(lcd_buffer,"%u",i);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(30);
Сделал чисто механически, убирая лишнее почти наугад.
Внимание, вопросы:
Сейчас число i выводится в первую позицию на дисплее. Как сместить?
1) Дисплей однострочный, скажем, я хочу видеть это значение посредине дисплея? Или не посредине, а во второй, третьей позиции?
С lcd_gotoxy(x,y); не получается...
2)Что такое lcd_buffer? В примере из папки examples в начале программы объявлено
char lcd_buffer[33];
Что такое 33?
3) Получается выводить значение i, если оно целое. Делаю дробным- выводится явно не то, что должно. Как выводить дробные значения?
Стандартный пример в папке examples с DS18B20 и LCD.
В примере:
sprintf(lcd_buffer,"t%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(500);
Допустим, мне надо выводить значение переменной i на дисплей.
Из вышеприведенного кода я сделал вот что:
sprintf(lcd_buffer,"%u",i);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(30);
Сделал чисто механически, убирая лишнее почти наугад.
Внимание, вопросы:
Сейчас число i выводится в первую позицию на дисплее. Как сместить?
1) Дисплей однострочный, скажем, я хочу видеть это значение посредине дисплея? Или не посредине, а во второй, третьей позиции?
С lcd_gotoxy(x,y); не получается...
2)Что такое lcd_buffer? В примере из папки examples в начале программы объявлено
char lcd_buffer[33];
Что такое 33?
3) Получается выводить значение i, если оно целое. Делаю дробным- выводится явно не то, что должно. Как выводить дробные значения?
народ! помогите! я ни хрена не понял динамического опроса клавиатуры! зачем у нас в обучалке еще и код приводится?
я понял, что столбцы, строки, но не понял как эта штука работает...
на столбцы идет питание всегда. а на строки через кнопки. ну вот. что надо сделать, чтобы нажать кнопку 8 допустим? что делать?
я понял, что столбцы, строки, но не понял как эта штука работает...
на столбцы идет питание всегда. а на строки через кнопки. ну вот. что надо сделать, чтобы нажать кнопку 8 допустим? что делать?
- Вложения
-
- 01.gif
- (6.19 КБ) 395 скачиваний
Не умеешь - не берись, но не взявшись не научишься...
Stalker46 писал(а):...что делать с ресетом? как на кнопку его сажать? куда подключать и через какой резистор?
Вход RESET соединить с VCC через резистор 1 - 5 кОм. Между RESET и GND подключить керамический конденсатор 0,1 мкф. Параллельно конденсатору подключить кнопку "Reset" с нормально разомкнутыми контактами.
Stalker46 писал(а):народ! помогите! я ни хрена не понял динамического опроса клавиатуры!
Не огорчайтесь. Я бы тоже нифига не понял бы, если бы не разобрался с динамическим опросом клавиатуры ещё тогда, когда Интернет был только бредом мировой буржуазии...
Идея в том, что на входы A0 - A3 от микроконтроллера ПООЧЕРЁДНО подаётся сигнал. И считывается состояние выходов D0 - D2. В обучалке этот сигнал - логический ноль и этот сигнал берётся от программы динамической индикации (типа, зачем добру пропадать...).
Сначала 0 подаётся только на вход A0. На остальные входы A1 - A3 подаётся 1. Если не нажата ни одна кнопка, то на выходах D0 - D2 будут лог. 1. Тоже самое будет, если нажата любая из кнопок, подключённых к входам A1 - A3. А вот если будет нажата одна из кнопок, подключённых к входу A0, то на одном из выходов D0 - D2 появится лог. 0. И смотря по тому, на каком выходе он появился, можно точно сказать, какая кнопка нажата.
Потом 0 подаётся только на вход A1, а на остальные входы 1. И процесс повторяется. И повторяется достаточно быстро, чтобы успеть просканировать все линии, пока кнопка нажата.
Если нажата кнопка 8, то лог. 0 выскочит на выходе D1 именно в тот момент, когда лог. 0 подан на вход A2. Посколько мы знаем на какой вход подан 0, и увидели на каком выходе вылез 0, то можно легко вычислить, какая кнопка нажата.
А ещё предлагаю подумать над тем, что будет с микроконтроллером, если одновременно нажать кнопки 2, 5, 8, 0 или любые две из них.
Барсик писал(а):Stalker46 писал(а):...что делать с ресетом? как на кнопку его сажать? куда подключать и через какой резистор?
Вход RESET соединить с VCC через резистор 1 - 5 кОм. Между RESET и GND подключить керамический конденсатор 0,1 мкф. Параллельно конденсатору подключить кнопку "Reset" с нормально разомкнутыми контактами.Stalker46 писал(а):народ! помогите! я ни хрена не понял динамического опроса клавиатуры!
Не огорчайтесь. Я бы тоже нифига не понял бы, если бы не разобрался с динамическим опросом клавиатуры ещё тогда, когда Интернет был только бредом мировой буржуазии...![]()
Идея в том, что на входы A0 - A3 от микроконтроллера ПООЧЕРЁДНО подаётся сигнал. И считывается состояние выходов D0 - D2. В обучалке этот сигнал - логический ноль и этот сигнал берётся от программы динамической индикации (типа, зачем добру пропадать...).
Сначала 0 подаётся только на вход A0. На остальные входы A1 - A3 подаётся 1. Если не нажата ни одна кнопка, то на выходах D0 - D2 будут лог. 1. Тоже самое будет, если нажата любая из кнопок, подключённых к входам A1 - A3. А вот если будет нажата одна из кнопок, подключённых к входу A0, то на одном из выходов D0 - D2 появится лог. 0. И смотря по тому, на каком выходе он появился, можно точно сказать, какая кнопка нажата.
Потом 0 подаётся только на вход A1, а на остальные входы 1. И процесс повторяется. И повторяется достаточно быстро, чтобы успеть просканировать все линии, пока кнопка нажата.
Если нажата кнопка 8, то лог. 0 выскочит на выходе D1 именно в тот момент, когда лог. 0 подан на вход A2. Посколько мы знаем на какой вход подан 0, и увидели на каком выходе вылез 0, то можно легко вычислить, какая кнопка нажата.
А ещё предлагаю подумать над тем, что будет с микроконтроллером, если одновременно нажать кнопки 2, 5, 8, 0 или любые две из них.
кое что прояснилось. а зачем питание подается то?
если нажать кнопки 2 5 8 и 0, на входах и выходах будут лог 0. я правильно сказал?
Не умеешь - не берись, но не взявшись не научишься...
Во-первых. Нет необходимости цитировать мой предыдущий пост полностью. Тем более, что он находится как раз над Вашим, и его трудно не заметить.
Во-вторых. Питание подаётся на резисторы, чтобы подтянуть логический уровень к 1, даже тогда, когда ни одна кнопка не нажата.
В-третьих. Ответ на вопрос про одновременное нажатие кнопок неправильный. Правильный ответ такой - микроконтроллеру будет мучительно больно от того, что его же собственные выходы будут соединены между собой. Тем более, что на одном из них 0, а на других 1. Какой потечёт ток через выводы, вопрос тёмный. Но он будет довольно большим, и точно не пойдёт на пользу микроконтроллеру... Чтобы такого безобразия не случилось, необходимо между входами A0 - A3 и соответствующими выходами микроконтроллера включить диоды. Анодом к входам A0 - A3, катодом к выходам микроконтроллера...
Во-вторых. Питание подаётся на резисторы, чтобы подтянуть логический уровень к 1, даже тогда, когда ни одна кнопка не нажата.
В-третьих. Ответ на вопрос про одновременное нажатие кнопок неправильный. Правильный ответ такой - микроконтроллеру будет мучительно больно от того, что его же собственные выходы будут соединены между собой. Тем более, что на одном из них 0, а на других 1. Какой потечёт ток через выводы, вопрос тёмный. Но он будет довольно большим, и точно не пойдёт на пользу микроконтроллеру... Чтобы такого безобразия не случилось, необходимо между входами A0 - A3 и соответствующими выходами микроконтроллера включить диоды. Анодом к входам A0 - A3, катодом к выходам микроконтроллера...
-
Skrrmrchoh
- Нашел транзистор. Понюхал.
- Сообщения: 185
- Зарегистрирован: Чт сен 06, 2007 22:36:09
- Откуда: Санкт-Петербург
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Барсик писал(а):В-третьих. Ответ на вопрос про одновременное нажатие кнопок неправильный. Правильный ответ такой - микроконтроллеру будет мучительно больно от того, что его же собственные выходы будут соединены между собой..необходимо между входами A0 - A3 и соответствующими выходами микроконтроллера включить диоды. Анодом к входам A0 - A3, катодом к выходам микроконтроллера...
Ну и глупо так делать. При сканировании на выход поочередно переводишь только 1 из A0-A3, остальные устанавливаешь на вход, при этом никаких диодов не надо.
BerZerK-ku писал(а):...При сканировании на выход поочередно переводишь только 1 из A0-A3, остальные устанавливаешь на вход, при этом никаких диодов не надо.
А кто с этим спорит? Речь идёт об обучалке: http://radiokot.ru/start/mcu_fpga/avr/16/ Что-то я там не заметил, чтобы изменялось направление передачи порта.
Stalker46 писал(а):...разве одна и таже нога может быть и выходом и входом в одной программе?
А почему бы и нет? Ещё как может! Кто Вам мешает написать в любом месте программы, например:
DDRD = 0b00000001; // PDO на вывод, остальное на ввод.
Как написать на ассемблере, не знаю.