Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
DiGiCat
Друг Кота
Сообщения: 4793
Зарегистрирован: Пт июл 11, 2008 09:42:35
Откуда: Made in USSR

Сообщение DiGiCat »

Kaban да ее, оЧепятка получилась. :))) Выше поправил. Лучше даже не из КМОП серии взять, а ТТL - 74LS244 или наш аналог АП5.
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

555АП5
paranoyd
Встал на лапы
Сообщения: 90
Зарегистрирован: Пт дек 05, 2008 23:34:46

Сообщение paranoyd »

Спасибо, но все же интересно, почему без резисторов можно порт спалить? Я, напр., читал, что LPT дает 5 вольт, а некоторым микросхемам нужно 3 В. Так вот по-моему тут можно микросхему спалить... или я чего-то недопонимаю :roll:
Аватара пользователя
DiGiCat
Друг Кота
Сообщения: 4793
Зарегистрирован: Пт июл 11, 2008 09:42:35
Откуда: Made in USSR

Сообщение DiGiCat »

Ошибочно если не правильно подключишь просто проводки к LPT или коротнешь их между собой, то что будет с этим портом? Резисторы хоть как то ток ограничат и есть шанс что порт не вылетит.
И причем тут сейчас "некоторые микросхемы", какие именно? Или хочешь чтоб простейший прошивальшик на "пяти проводках" работал как универсальный программатор для всех случаев и под любые микросхемы? :shock: :))
Тогда тем более для согласования нужно буферную микросхему хотя бы ставить и питать ее от прошиваемого устройсва. Серия 74LS244 на питание от 3В не расчитана (мин. 4,75V) и будет работать или нет конкретный экземпляр микросхемы неизвестно, как вариант тогда серию 74HC244 поставить ( питание мин. от 2V до 6V), но они более "капризные".
paranoyd
Встал на лапы
Сообщения: 90
Зарегистрирован: Пт дек 05, 2008 23:34:46

Сообщение paranoyd »

а как насчет К555АП5? она будет работать?
Аватара пользователя
DiGiCat
Друг Кота
Сообщения: 4793
Зарегистрирован: Пт июл 11, 2008 09:42:35
Откуда: Made in USSR

Сообщение DiGiCat »

Будет, она и есть считай 74LS244 и выше про нее самую и писали в том числе.
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Есть проблема когда вывожу показания на ЖКИ, вот таким методом:

Код: Выделить всё

 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 выдает ошибку:Изображение
Что делать?
Я не Сашок!!!
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Оптимизм х (Опыт + Знания) = const
Skrrmrchoh
Нашел транзистор. Понюхал.
Сообщения: 185
Зарегистрирован: Чт сен 06, 2007 22:36:09
Откуда: Санкт-Петербург

Сообщение Skrrmrchoh »

Не могу разобраться с кодевиженовской функцией.

Стандартный пример в папке 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, если оно целое. Делаю дробным- выводится явно не то, что должно. Как выводить дробные значения?
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

народ! помогите! я ни хрена не понял динамического опроса клавиатуры! зачем у нас в обучалке еще и код приводится?
я понял, что столбцы, строки, но не понял как эта штука работает...
на столбцы идет питание всегда. а на строки через кнопки. ну вот. что надо сделать, чтобы нажать кнопку 8 допустим? что делать?
Вложения
01.gif
(6.19 КБ) 395 скачиваний
Не умеешь - не берись, но не взявшись не научишься...
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

вот ресет это сброс программы, выполняемой МК. т.е. идет программа, например мигают светодиоды, я сбросил ресет, и программы выполняется сначала. что делать с ресетом? как на кнопку его сажать? куда подключать и через какой резистор?
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

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 или любые две из них.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Барсик писал(а):
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. я правильно сказал?
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

Во-первых. Нет необходимости цитировать мой предыдущий пост полностью. Тем более, что он находится как раз над Вашим, и его трудно не заметить.
Во-вторых. Питание подаётся на резисторы, чтобы подтянуть логический уровень к 1, даже тогда, когда ни одна кнопка не нажата.
В-третьих. Ответ на вопрос про одновременное нажатие кнопок неправильный. Правильный ответ такой - микроконтроллеру будет мучительно больно от того, что его же собственные выходы будут соединены между собой. Тем более, что на одном из них 0, а на других 1. Какой потечёт ток через выводы, вопрос тёмный. Но он будет довольно большим, и точно не пойдёт на пользу микроконтроллеру... Чтобы такого безобразия не случилось, необходимо между входами A0 - A3 и соответствующими выходами микроконтроллера включить диоды. Анодом к входам A0 - A3, катодом к выходам микроконтроллера...
Skrrmrchoh
Нашел транзистор. Понюхал.
Сообщения: 185
Зарегистрирован: Чт сен 06, 2007 22:36:09
Откуда: Санкт-Петербург

Сообщение Skrrmrchoh »

[quote="Skrrmrchoh"]Не могу разобраться с кодевиженовской функцией...

...Как сместить?
...Что такое?
...Как выводить?

Спасибо, со всем разобрался.
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Барсик писал(а):В-третьих. Ответ на вопрос про одновременное нажатие кнопок неправильный. Правильный ответ такой - микроконтроллеру будет мучительно больно от того, что его же собственные выходы будут соединены между собой..необходимо между входами A0 - A3 и соответствующими выходами микроконтроллера включить диоды. Анодом к входам A0 - A3, катодом к выходам микроконтроллера...


Ну и глупо так делать. При сканировании на выход поочередно переводишь только 1 из A0-A3, остальные устанавливаешь на вход, при этом никаких диодов не надо.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

а как же в программе прописывать тогда? разве одна и таже нога может быть и выходом и входом в одной программе?
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

BerZerK-ku писал(а):...При сканировании на выход поочередно переводишь только 1 из A0-A3, остальные устанавливаешь на вход, при этом никаких диодов не надо.

А кто с этим спорит? Речь идёт об обучалке: http://radiokot.ru/start/mcu_fpga/avr/16/ Что-то я там не заметил, чтобы изменялось направление передачи порта.

Stalker46 писал(а):...разве одна и таже нога может быть и выходом и входом в одной программе?

А почему бы и нет? Ещё как может! Кто Вам мешает написать в любом месте программы, например:

DDRD = 0b00000001; // PDO на вывод, остальное на ввод.

Как написать на ассемблере, не знаю.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

я что то вообще не понимаю 0b000000001 и вот такие. и как в кодевижен это настраивать? там же надо сразу расставить, какие ноги выходы, а какие входы... вы лучше скажите, как схему проектировать? как в обучалке? или что?
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

Схему - как в обучалке.
Как Вы настроите входы/выходы в CodeVisionAVR, никоим образом не будет вам мешать перестраивать входы/выходы по ходу выполнения программы по своему усмотрению.
Внимательно прочитайте, что такое PORT, PIN и DDR и уясните что для чего нужно.
Ответить

Вернуться в «Разные вопросы по МК»