Jump to content

Recommended Posts

Posted (edited)
Только что, Дмитрий Мамедиев сказал:

Как понять

Вы прочли раздел про операторы? Знаете, что обозначает оператор == ? Что обозначает оператор || ? Что такое символ (символьная константа) знаете? Если не знаете - прочтите. 

Просто замените все операторы и остальные "элементы" в строке их названиями, а потом произнесите вслух получившееся предложение - на начальной стадии освоения это на 100% даст ответ на вопрос "как понять".

Если не получится - напишите здесь, что получилось, попробуем пояснить, что не так делали. Если получится, поделитесь успехом - возликуем вместе с вами :) 

Edited by ARV

Share this post


Link to post
Share on other sites
Posted (edited)

Операторы && и &, а так же || и | в Си принципиально разные, путать их ни в коем случае нельзя.

&& - логическое И

& - битовое (двоичное) И

|| - логическое ИЛИ

| - битовое (двоичное) ИЛИ

Результат любого ЛОГИЧЕСКОГО оператора может быть ТОЛЬКО 0 (не истина, ложь) или 1 (истина). Какие бы числа/переменные вы ни обрабатывали этими операторами, в итоге будет или 0, или 1.

Результат БИТОВЫХ операций может быть ЛЮБЫМ ЧИСЛОМ, т.к. происходит операция над каждым БИТОМ каждого из пары чисел/значений.

Примеры:

1 && 2 результат 1 (любое число, не равное 0, для ЛОГИЧЕСКОГО оператра эквивалентно 1)

1 & 2 результат 0 (биты в числах не совпадаеют, а значит при побитовом И в каждом бите получится 0, что в итоге даст и общий 0).

Только что, Дмитрий Мамедиев сказал:

В книжке был такой пример: x=1 y=2 тогда x&y получим 0, x|y 3, x||y почемуто 2,

x || y не может быть 2 ни при каких условиях - или книжка говно, или вы что-то не поняли и/или не так процитировали.

Edited by ARV

Share this post


Link to post
Share on other sites

Финальные результаты тестирования литиевых батареек FANSO при нормальных условиях

Перед разработчиком устройства, в котором предполагается использование батарейки, всегда стоит задача выбора того или иного бренда. Конечно, наиболее объективный результат по качеству можно получить при реальном тестировании в режиме работы самого устройства. Для того чтобы у разработчиков была некоторая информация о реальных значениях основных параметров ЛХИТ, инженеры компании КОМПЭЛ решили провести серию из трех тестов. Первый тест на постоянный разряд в нормальных климатических условиях, начатый в апреле 2019 г., мы завершили.

Узнать финальный результат тестирования

                     

Видеокурс Работаем с микроконтроллерами STM32G0. Впервые на русском языке.

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0

Подробнее

Только что, Дмитрий Мамедиев сказал:

Почему нельзя например так int (0>=x >5);

То, что вы написали, вообще не имеет смысла: x меньше или равно нулю, и при этом x больше пяти - такого не может быть в принципе.

А вообще на счет цепочечных сравнений скажу так: вы должны учитывать, что операторы одинакового приоритета исполняются слева направо. Т.е. сначала сравнится 0 >= x, а потом то, что получится, сравнится с пятеркой. Поскольку результатом логического оператора всегда будет только 0 или 1, то второе сравнение всегда даст ложный результат, т.к. и 0 и 1 меньше пяти.

Используйте традиционную проверку на вхождение в диапазон: if((x >= 0) && (x < 5)).

Share this post


Link to post
Share on other sites

Еще вопрос. Подключаю лсд 1602. По стандартной схеме, когда используются пины 4567, все ок. Но мне нужно подключить 0123 пины мк, так вот на лсд тоже нужно использовать 0123?

Share this post


Link to post
Share on other sites
1 час назад, Дмитрий Мамедиев сказал:

Мне нужна переменная в определенных пределах. Почему нельзя например так int (0>=x >5);

ну я тебе и написал,  только придел ты задал [1:4] ,я конкретно под него и написал

 

6 минут назад, Дмитрий Мамедиев сказал:

Еще вопрос.

а теперь то же самое только по русски

Share this post


Link to post
Share on other sites

Я не понял как трактовать ваш пример. По поводу лсд. У меня свободны остаются пины порта д только 0123, через них нужно подключить дисплей. В сети примеры подключения только когда используются старшие пины портов и мк и лсд. Если я подключаю мк через 0123 то на лсд тоже нужно использовать пины 0123?

Share this post


Link to post
Share on other sites
8 минут назад, Дмитрий Мамедиев сказал:

...Если я подключаю мк через 0123 то на лсд тоже нужно использовать пины 0123?

А какая связь между нумерациями портов LCD и МК?

Share this post


Link to post
Share on other sites
Только что, Дмитрий Мамедиев сказал:

Если я подключаю мк через 0123 то на лсд тоже нужно использовать пины 0123?

Вопрос странный. Вы же подключаете к микросхеме сигналы на её ножки в соответствии с их назначением, а не так, как вам удобно. С чего вдруг на ЖКИ (ЛСД - этот наркотик, а ЖКИ - это по-русски LCD - жидкокристаллический дисплей) вы будете подключать сигналы не в соответствии с назначением контактов ЖКИ, а как вам удобнее?

В микроконтроллере переназначить пины можно программно - это всегда можно, а произвольно назначать выводы ЖКИ - это перегиб.

Share this post


Link to post
Share on other sites
Только что, Дмитрий Мамедиев сказал:

Можно подключить на мк к пинам 0123 а на лсд 4567?

Конечно можно. Я ж вам намекал: если у микросхемы нужный пин имеет номер 7, это ведь не означает, что только с 7-го пина МК можно подавать сигнал на него. Из МК вы можете сформировать нужные сигналы практически на произвольных его ножках.

Share this post


Link to post
Share on other sites
42 минуты назад, Дмитрий Мамедиев сказал:

Я не понял

любое число при логическом умножении на 3 (0b00000011) даст числа [0:3]

на 7 (0b00000111) даст числа [0:7] , на 15 (0b00000011) даст числа [0:15]

у тебя диапазон  [1:4] на единицу больше диапазона [0:3]

z--;  // вычли единицу, получили диапазон [0:3]
z&=3; // обрезали
z++; // прибавили единицу , вернули диапазона [1:4]

50 минут назад, Дмитрий Мамедиев сказал:

В сети примеры

выводы МК могут быть любыми , выводы ЖКИ при 4битном подключении только <4:7>

Share this post


Link to post
Share on other sites
void lcd_com(unsigned char com)
{
	PORTC &= ~(1 << RS); // RS = 0 (запись команд)
	PORTC |= (1 << EN); // EN = 1 (начало записи команды в LCD)
	PORTD &= 0xF0; //обнуляем 0:4 пины порта Д
	PORTD |= (com >> 4); // старший нибл
	_delay_us(100);
	PORTC &= ~(1 << EN); // EN = 0 (конец записи команды в LCD)
	_delay_us(100);
	PORTC |= (1 << EN); // EN = 1 (начало записи команды в LCD)
	PORTD &= 0xF0; //обнуляем 0:4 пины порта Д
	PORTD |= (com & 0x0F); // младший нибл
	_delay_us(100);
	PORTC &= ~(1 << EN); // EN = 0 (конец записи команды в LCD)
	_delay_us(100);
}

не получается все равно. вроде бы все правильно и логично, но протеус не хотит ничего показывать. отладчик тоже показал что все впорядке но...

Share this post


Link to post
Share on other sites
Только что, Дмитрий Мамедиев сказал:

не получается все равно

Схему в студию.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • Guest Денис
      By Guest Денис
      В общем, есть такое чудо китайской техники (фото)
      Что оно может:
      1. Заряжаться через microUSB порт
      2. Кнопка вкл/выкл, она же переключает режимы
      3. 3 режима свечения светодиода (он светит разными цветами)
      Что я хочу сделать:
      1. Пункты 1 и 2 выше
      2. Разнообразить количество режимов, переливание статичный цвет и тд...
      Вопрос: как это сделать? что купить?

      P.S. К сожалению, в гугле не нашел подробной инструкции, а я в электронике я дуб дубом


×
×
  • Create New...