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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

uuuu писал(а):как переключаться между тремя портами по сигналу
зачем так много действий, и зачем вообще if, которые ничего не делают?

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

while(1)
{
	PORTD = ~PINB;
}
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Реклама
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13

Сообщение misterkuk »

Собрал схему и запитал pic16f628a от 3.7 вольт. Но он не запускается от этого напряжения, а от 5в работает на рас. Может что-то программно в нём включать или выставлять? Схемы самой нет, еотил сразу печатку ведь там проц и 3 74HC595 которые зажигают светодиоды. Питание- литий полимерный аккумулятор.
Контактная информация:
Реклама
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Смотрите BOR и Brown-out Reset Voltage... 3.65 Vmin ... 4.35 Vmax ...
"Я не даю готовых решений, я заставляю думать!"(С)
Родился
Сообщения: 1
Зарегистрирован: Ср фев 13, 2013 19:25:40

Сообщение Faton_11 »

Добрый вечер!

output reg [length-1:0] adr1_out,//регистр со значением адреса
output wire [length-1:0] adr1_bus,//8-разрядная шина адреса

Значения с шины можно записать в регистр таким образом:
adr1_out<=adr1_bus;

Но мне нужно наоборот, записать данные из регистра на шину. Насколько я понимаю, такая форма записи не приемлема:
adr1_bus<=adr1_out;

Изучаю недавно, подскажите, как можно записать правильно?
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 9
Зарегистрирован: Ср фев 13, 2013 11:47:56

Сообщение uuuu »

unalex писал(а):зачем так много действий, и зачем вообще 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 раза.
Причина: Нарушение пп. 2.2 и 2.7 Правил Форума
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

честно говоря вообще вопрос какой то непонятный-" как между ними переключаться?"
в вашем случае лучше использовать маску для входа, так как выключатель выдает три единицы по очереди, а вы читаете весь порт.
Маска накладывается так

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

#define MASK  0b00000111
temp =PINB &MASK; 
далее по идее знаки для сегментного индикатора лучше хранить в массиве, сколько знаков, столько и элементов массива

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

 char show[]={0b00000001, 0b00000010, 0b00000100, 0b00000111}  
дальше, чтобы не использовать лишних циклов пишем так
Спойлер

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

 
 #define MASK  0b00000111 
// объявление переменных
 char temp=0,show[]={0b11111110, 0b11111101, 0b11111011, 0b00000111};
//-------------основной цикл
temp =PINB &MASK; 
switch (temp){
       case (0b00000001): PORTD =show[1];break;
       case (0b00000010): PORTD =show[2];break;
       case (0b00000100): PORTD =show[3];break; 
default : PORTD =show[4] ;
}//end of switch        
Последний раз редактировалось vitalik_1984 Пт фев 15, 2013 00:00:26, всего редактировалось 3 раза.
Контактная информация:
Реклама
Родился
Сообщения: 9
Зарегистрирован: Ср фев 13, 2013 11:47:56

Сообщение uuuu »

vitalik_1984 писал(а):
Спойлер

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

 
 #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 раз.
Причина: Нарушение п.2.7 Правил Форума
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

а догадаться нельзя? раз пишет неопределенный символ, значит нужно его определить

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

//определение переменных
unsigned char temp =0; 
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

uuuu, замени все иксы "х" на "b"
Открыл глаза
Сообщения: 47
Зарегистрирован: Чт янв 21, 2010 21:39:22

Сообщение grindripperMi »

Здравия, хвостатые!;) Подогнались микроконтроллеры: ATMEL 121,122, 322, 552, 618 с "расширением" 24 CO 1A, и AT 89C52(S52) все 24PC или PI. В разделе "для дома, для семьи" их можно как нибудь пристроить? Посоветуйте со схемами и с программами, если не затруднит кого нибудь из почтенного общества. Без издёвок! С уважением Михаил!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

zero648 писал(а):uuuu, замени все иксы "х" на "b"
:facepalm: чет запарился, хотя вроде не должно быть при этом сильных косяков, 111 не превышает 255, просто гореть будет не то, что предполагается.
В поисках истины человек развивается.
Контактная информация:
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Сообщение nirq »

24C01 - память, в гугле про неё есть. Небольшая.
89x52 - устаревшее и/или на любителя, программатор мутить специально для.

Схема с программой рожается из головы для решения поставленной задачи, иначе смысл процесса.... присоединять деталь А к детали Б по инструкции, чтоб добро не пропадало?
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

uuuu

эта конструкция делает все то, что вы написали выше(порт D ножки 0 1 2 выдают ноль ели на соответствующих ногах порта B единички(кнопка замыкает на массу), на остальных ногах порта D всегда висят единички),
проверьте сначала, потом пишите что не так

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

while(1)
{
   PORTD = ~(PINB & 0x07);
}
Последний раз редактировалось unalex Пт фев 15, 2013 02:58:15, всего редактировалось 1 раз.
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

uuuu писал(а):char show[]={0x11111110, 0x11111101, 0x11111011, 0x00000111};
ну тут явно больше 255

да и вообще к чему такие громоздкие конструкции, когда мой пример делает то же самое в одну строчку
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

Ребят подскажите, нужно соединить HCPL-0931 и MAX13487. Делаю преобразователь USB - RS485. HCPL гальваническая развязка, MAX13487 - согласователь уровней с автоопределением направления. В даташите есть принципиальная схема включения на оптронах, а как Максимку подключить к HCPL-0931 я никак не могу понять.

Вот такой вариант будет работать?
http://we.easyelectronics.ru/GYUR22/max ... s-485.html
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

MAX13487 1(RO) ->- HCPL-9031 2(IN1), HCPL-9031 7(OUT1) ->- RXD
MAX13487 4(DI) -<- HCPL-9031 3(OUT2), HCPL-9031 6(IN2) -<- TXD

или

MAX13487 1(RO) ->- HCPL-9031 6(IN2), HCPL-9031 3(OUT2) ->- RXD
MAX13487 4(DI) -<- HCPL-9031 7(OUT1), HCPL-9031 2(IN1) -<- TXD

как удобнее
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Родился
Сообщения: 9
Зарегистрирован: Ср фев 13, 2013 11:47:56

Сообщение uuuu »

код
Последний раз редактировалось uuuu Сб фев 16, 2013 08:47:00, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Может, заменить whil-ы на if'ы else-if'ы?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Сообщение a_skr »

uuuu писал(а):вы как будто меня не слышите?
проверяете в железе или симуляторе? На первый взгляд должно работать, но нужны подтягивающие к корпусу резисторы на всех входах. Если их нет, то можно предположить, что при включении на входах вначале низкий уровень, переключатель сразу дает высокий на одном входе, срабатывает нужный while, выставляет нужное значение на выходе, далее входы "подплывают" к логической единице и ни один while уже не сработает.
Можно сделать кнопки (переключатель) с замыканием на корпус, а не на плюс, включить внутреннюю подтяжку к питанию и не ставить внешние резисторы.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

unalex писал(а): проверьте сначала, потом пишите что не так
Ваш код работает так,что светодиод горит только пока нажата кнопка или какой либо выключатель.А uuuu, похоже, нужно чтобы при нажатии переключалось.

uuuu ваш код отлично работает, сейчас проверил в симуляции. Активное положение кнопок- 1.
При совместно включенном состоянии ничего не происходит, и это понятно, так как эти состояния не описаны.

И не нужно одно и то же повторять несколько раз. Лучше нарисуйте схемку сего устройства и приложите инициализацию портов, может где подтяжка включена, а это как раз не описанное состояние.
Я уже помогал делать проект для включения реле в нужной последовательности через нажатие на кнопки плюс-минус, могу приложить.
Контактная информация:
Ответить

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