Страница 52 из 628

Добавлено: Ср май 06, 2009 16:15:59
DiGiCat
Kaban да ее, оЧепятка получилась. :))) Выше поправил. Лучше даже не из КМОП серии взять, а ТТL - 74LS244 или наш аналог АП5.

Добавлено: Ср май 06, 2009 16:22:59
МитяРа
555АП5

Добавлено: Ср май 06, 2009 17:16:37
paranoyd
Спасибо, но все же интересно, почему без резисторов можно порт спалить? Я, напр., читал, что LPT дает 5 вольт, а некоторым микросхемам нужно 3 В. Так вот по-моему тут можно микросхему спалить... или я чего-то недопонимаю :roll:

Добавлено: Ср май 06, 2009 18:16:39
DiGiCat
Ошибочно если не правильно подключишь просто проводки к LPT или коротнешь их между собой, то что будет с этим портом? Резисторы хоть как то ток ограничат и есть шанс что порт не вылетит.
И причем тут сейчас "некоторые микросхемы", какие именно? Или хочешь чтоб простейший прошивальшик на "пяти проводках" работал как универсальный программатор для всех случаев и под любые микросхемы? :shock: :))
Тогда тем более для согласования нужно буферную микросхему хотя бы ставить и питать ее от прошиваемого устройсва. Серия 74LS244 на питание от 3В не расчитана (мин. 4,75V) и будет работать или нет конкретный экземпляр микросхемы неизвестно, как вариант тогда серию 74HC244 поставить ( питание мин. от 2V до 6V), но они более "капризные".

Добавлено: Ср май 06, 2009 23:07:45
paranoyd
а как насчет К555АП5? она будет работать?

Добавлено: Ср май 06, 2009 23:23:00
DiGiCat
Будет, она и есть считай 74LS244 и выше про нее самую и писали в том числе.

Добавлено: Пт май 08, 2009 13:41:57
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 выдает ошибку:Изображение
Что делать?

Добавлено: Пн май 11, 2009 19:16:43
Aheir

Добавлено: Вт май 12, 2009 10:56:44
Skrrmrchoh
Не могу разобраться с кодевиженовской функцией.

Стандартный пример в папке examples с DS18B20 и LCD.
В примере:


sprintf(lcd_buffer,"t%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[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, если оно целое. Делаю дробным- выводится явно не то, что должно. Как выводить дробные значения?

Добавлено: Вт май 12, 2009 12:41:43
Arlleex
народ! помогите! я ни хрена не понял динамического опроса клавиатуры! зачем у нас в обучалке еще и код приводится?
я понял, что столбцы, строки, но не понял как эта штука работает...
на столбцы идет питание всегда. а на строки через кнопки. ну вот. что надо сделать, чтобы нажать кнопку 8 допустим? что делать?

Добавлено: Вт май 12, 2009 13:17:58
Arlleex
вот ресет это сброс программы, выполняемой МК. т.е. идет программа, например мигают светодиоды, я сбросил ресет, и программы выполняется сначала. что делать с ресетом? как на кнопку его сажать? куда подключать и через какой резистор?

Добавлено: Вт май 12, 2009 15:44:33
Барсик
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 или любые две из них.

Добавлено: Вт май 12, 2009 18:14:25
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. я правильно сказал?

Добавлено: Вт май 12, 2009 21:37:03
Барсик
Во-первых. Нет необходимости цитировать мой предыдущий пост полностью. Тем более, что он находится как раз над Вашим, и его трудно не заметить.
Во-вторых. Питание подаётся на резисторы, чтобы подтянуть логический уровень к 1, даже тогда, когда ни одна кнопка не нажата.
В-третьих. Ответ на вопрос про одновременное нажатие кнопок неправильный. Правильный ответ такой - микроконтроллеру будет мучительно больно от того, что его же собственные выходы будут соединены между собой. Тем более, что на одном из них 0, а на других 1. Какой потечёт ток через выводы, вопрос тёмный. Но он будет довольно большим, и точно не пойдёт на пользу микроконтроллеру... Чтобы такого безобразия не случилось, необходимо между входами A0 - A3 и соответствующими выходами микроконтроллера включить диоды. Анодом к входам A0 - A3, катодом к выходам микроконтроллера...

Добавлено: Вт май 12, 2009 22:47:54
Skrrmrchoh
[quote="Skrrmrchoh"]Не могу разобраться с кодевиженовской функцией...

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

Спасибо, со всем разобрался.

Добавлено: Ср май 13, 2009 06:38:41
BerZerK-ku
Барсик писал(а):В-третьих. Ответ на вопрос про одновременное нажатие кнопок неправильный. Правильный ответ такой - микроконтроллеру будет мучительно больно от того, что его же собственные выходы будут соединены между собой..необходимо между входами A0 - A3 и соответствующими выходами микроконтроллера включить диоды. Анодом к входам A0 - A3, катодом к выходам микроконтроллера...
Ну и глупо так делать. При сканировании на выход поочередно переводишь только 1 из A0-A3, остальные устанавливаешь на вход, при этом никаких диодов не надо.

Добавлено: Ср май 13, 2009 06:42:22
Arlleex
а как же в программе прописывать тогда? разве одна и таже нога может быть и выходом и входом в одной программе?

Добавлено: Ср май 13, 2009 13:35:13
Барсик
BerZerK-ku писал(а):...При сканировании на выход поочередно переводишь только 1 из A0-A3, остальные устанавливаешь на вход, при этом никаких диодов не надо.
А кто с этим спорит? Речь идёт об обучалке: http://radiokot.ru/start/mcu_fpga/avr/16/ Что-то я там не заметил, чтобы изменялось направление передачи порта.
Stalker46 писал(а):...разве одна и таже нога может быть и выходом и входом в одной программе?
А почему бы и нет? Ещё как может! Кто Вам мешает написать в любом месте программы, например:

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

Как написать на ассемблере, не знаю.

Добавлено: Ср май 13, 2009 15:53:58
Arlleex
я что то вообще не понимаю 0b000000001 и вот такие. и как в кодевижен это настраивать? там же надо сразу расставить, какие ноги выходы, а какие входы... вы лучше скажите, как схему проектировать? как в обучалке? или что?

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