Собрал схему и запитал pic16f628a от 3.7 вольт. Но он не запускается от этого напряжения, а от 5в работает на рас. Может что-то программно в нём включать или выставлять? Схемы самой нет, еотил сразу печатку ведь там проц и 3 74HC595 которые зажигают светодиоды. Питание- литий полимерный аккумулятор.
зачем так много действий, и зачем вообще if, которые ничего не делают?
Код:
while(1) { PORTD = ~PINB; }
мне нужно от переключателя с тремя положениями управлять led индикатором,и чтоб на входах была логическая 1 ,а на выходах 0(led индикатор с общим анодом)
на самом деле на портах D будет не по одному нулю,а больше .один ноль -один сегмент индикатора,я ещё не определился какиеножки порта d будут активны,но не в этом загвоздка,как переключаться между ними?if я убрал,получилось так: while(1) { while(PINB==0b00000001) {PORTD=0b11111110;}
while(PINB==0b00000010) {PORTD=0b11111101;}
while(PINB==0b00000100) {PORTD=0b11111011;},но как между ними переключаться то?
Последний раз редактировалось Gudd-Head Чт фев 14, 2013 09:12:23, всего редактировалось 2 раз(а).
честно говоря вообще вопрос какой то непонятный-" как между ними переключаться?" в вашем случае лучше использовать маску для входа, так как выключатель выдает три единицы по очереди, а вы читаете весь порт. Маска накладывается так
Код:
#define MASK 0b00000111 temp =PINB &MASK;
далее по идее знаки для сегментного индикатора лучше хранить в массиве, сколько знаков, столько и элементов массива
#define MASK 0x00000111 // объявление переменных char show[]={0x11111110, 0x11111101, 0x11111011, 0x00000111};//Error: must declare first in block //---------- цикл temp =PINB &MASK;//Error: undefined symbol 'temp' switch (temp){//Error: undefined symbol 'temp' case (0x00000001): PORTD =show[1];break; case (0x00000010): PORTD =show[2];break; case (0x00000100): PORTD =show[3];break; default : PORTD =show[4]; }//end of switch
СпойлерCODE VISION ВЫРУГАЛСЯ ОШИБКАМИ НА ВАШ КОД,Я ИХ НАПИСАЛ НАПРОТИВ ТЕХ СТРОК.МНЕ НУЖНО ЕСЛИ ПЕРЕКЛЮЧАТЕЛЬ В ПЕРВОМ ПОЛОЖЕНИИ -ГОРИТ ЦИФРА 1,ВО ВТОРОМ-ЦИФРА 2,В ТРЕТЬЕМ-ЦИФРА 3.В ПРИНЦИПЕ МОЙ КОД ПРАВИЛЬНЫЙ,РАБОТАЕТ ,НО ОН НЕ ПЕРЕКЛЮЧАЕТ.Т.Е.ЕСЛИ ПЕРЕКЛЮЧАТЕЛЬ ВКЛЮЧЕН В ПЕРВОЕ ПОЛОЖЕНИЕ,ЗАГОРАЮТСЯ СЕГМЕНТЫ ,КОТОРЫЕ Я УКАЖУ В PORTD,НО КАК ТОЛЬКО Я ВКЛЮЧАЮ ВО ВТОРОЕ ИЛИ ТРЕТЬЕ ПОЛОЖЕНИЕ ПЕРЕКЛЮЧАТЕЛЬ ПРОГРАММА НЕ ПЕРЕХОДИТ СООТВЕТСТВЕННО ВО ВТОРУЮ И ТРЕТЬЮ ЧАСТЬ,А ПРОДОЛЖАЕТ ВЫПОЛНЯТЬСЯ ПЕРВАЯ.
Последний раз редактировалось Gudd-Head Чт фев 14, 2013 15:59:16, всего редактировалось 1 раз.
Здравия, хвостатые!;) Подогнались микроконтроллеры: ATMEL 121,122, 322, 552, 618 с "расширением" 24 CO 1A, и AT 89C52(S52) все 24PC или PI. В разделе "для дома, для семьи" их можно как нибудь пристроить? Посоветуйте со схемами и с программами, если не затруднит кого нибудь из почтенного общества. Без издёвок! С уважением Михаил!
24C01 - память, в гугле про неё есть. Небольшая. 89x52 - устаревшее и/или на любителя, программатор мутить специально для.
Схема с программой рожается из головы для решения поставленной задачи, иначе смысл процесса.... присоединять деталь А к детали Б по инструкции, чтоб добро не пропадало?
эта конструкция делает все то, что вы написали выше(порт D ножки 0 1 2 выдают ноль ели на соответствующих ногах порта B единички(кнопка замыкает на массу), на остальных ногах порта D всегда висят единички), проверьте сначала, потом пишите что не так
Код:
while(1) { PORTD = ~(PINB & 0x07); }
_________________ Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Последний раз редактировалось unalex Пт фев 15, 2013 02:58:15, всего редактировалось 1 раз.
Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт фев 15, 2013 10:37:49
Нашел транзистор. Понюхал.
Зарегистрирован: Пн мар 19, 2012 13:04:11 Сообщений: 172
Рейтинг сообщения:0
Ребят подскажите, нужно соединить HCPL-0931 и MAX13487. Делаю преобразователь USB - RS485. HCPL гальваническая развязка, MAX13487 - согласователь уровней с автоопределением направления. В даташите есть принципиальная схема включения на оптронах, а как Максимку подключить к HCPL-0931 я никак не могу понять.
проверяете в железе или симуляторе? На первый взгляд должно работать, но нужны подтягивающие к корпусу резисторы на всех входах. Если их нет, то можно предположить, что при включении на входах вначале низкий уровень, переключатель сразу дает высокий на одном входе, срабатывает нужный while, выставляет нужное значение на выходе, далее входы "подплывают" к логической единице и ни один while уже не сработает. Можно сделать кнопки (переключатель) с замыканием на корпус, а не на плюс, включить внутреннюю подтяжку к питанию и не ставить внешние резисторы.
Ваш код работает так,что светодиод горит только пока нажата кнопка или какой либо выключатель.А uuuu, похоже, нужно чтобы при нажатии переключалось.
uuuu ваш код отлично работает, сейчас проверил в симуляции. Активное положение кнопок- 1. При совместно включенном состоянии ничего не происходит, и это понятно, так как эти состояния не описаны.
И не нужно одно и то же повторять несколько раз. Лучше нарисуйте схемку сего устройства и приложите инициализацию портов, может где подтяжка включена, а это как раз не описанное состояние. Я уже помогал делать проект для включения реле в нужной последовательности через нажатие на кнопки плюс-минус, могу приложить.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения