Jump to content

Recommended Posts

6 часов назад, Alexeyslav сказал:

Любой порт так же поддерживает прерывания по перепаду уровня

где ты увидел это в АТМега8?

Share this post


Link to post
Share on other sites
В 20.05.2019 в 21:32, Mars36 сказал:

Хочу найти ресурс где можно подробно почитать про компиляцию и линковку проекта для stm32f103 в линуксе.

Вот для начала. http://we.easyelectronics.ru/STM32/ispolzovanie-gcc-dlya-stm32f100.html

Нужно будет в makefile поменять серию устройства.

В 20.05.2019 в 21:32, Mars36 сказал:

проекта для stm32f103

Тут еще важны буквы, от них зависит память устройства и линия. Для классического f103C8T6 это medium density если не ошибаюсь.

Если описать алгоритм вкратце: нужно скомпилировать main (юзерский код) и startup (настройка памяти, прерываний и всего прочего, эта штука компилируется из ассемблерного файла, предоставляемого производителем, только надо найти в нужном формате), у меня это Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_ml.s. Для всей серии stm32f1x испольщуется один заголовочный файл #include <stm32f10x.h> , выбор конкретного камня задается дефайном DEVCLASS (лучше всего в makefile через флаг -D ), например -D DEVCLASS =  STM32F10X_MD. Но дополнительно надо еще указать путь к инклюдам на конкретные камни, например Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/

Мало того, при линковке надо еще указать распределение памяти и еще какие-то параметры. Это делается указанием линкеру файла настроек через флаг -T, например -T ld/stm32f10xC8.ld

Из того что вспомнил, вроде все. Можно бы еще упомянуть прошивку, но это уже будет зависеть от программатора. Я пробовал с stm32flash (uart bootloader) и самодельным st-link2 (прошитым через тот же stm32flash, естественно) через openocd.

Share this post


Link to post
Share on other sites
#define dirX PINB7
#define dirY PINB6
#define dirZ PIND4
#define stepX PIND1
#define stepY PIND0
#define stepZ PIND6

int massz[4]={(PORTC|=(1<<PINC5)),(PORTC|=(1<<PINC4)),(PORTC|=(1<<PINC3)),(PORTC|=(1<<PINC2))};

ISR(INT0_vect)
{
	//unsigned int i=0;
	if (PIND&(1<<dirZ))
	{
		if (PIND&(1<<stepZ))
		{
			massz[2];
		}	
		//i--;
	}
	else 
	{
		if (PIND&(1<<stepZ))
		{
			massz[0];
		}
		//i++;
		
	}
}
int main(void)
{
	INTinit();//вызываем функцию инициализации прерывания
	sei();//устанавливаем бит глобального разрешения прерываний
	port_ini();
}

что я делаю не так? настройки INT0 не привожу

 

Share this post


Link to post
Share on other sites

Особенности схемотехники и трассировки печатных плат для STM32WB55

Разработка новых устройств на базе беспроводного микроконтроллера STM32WB от STMicroelectronics может быть сделана в короткий срок, если выполнять некоторые важные правила и воспользоваться готовыми конструктивными решениями и рекомендациями инженеров ST.

Читать статью

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

что я делаю не так?

Я полагаю неправильно излагаете свои мысли в виде вопроса.

Share this post


Link to post
Share on other sites
Posted (edited)
10 часов назад, Дмитрий Мамедиев сказал:

if (PIND&(1<<stepZ)) { massz[2]; }

Вот этим вы что хотели сделать?

Упоминание в коде имени переменной (а элемент массива - это по сути переменная) равносильно считыванию содержимого этой переменной. Поскольку считанное значение никак не используется - компилятор просто выбросит весь этот if и в других местах аналогично.

Ага, вот еще: в main нет главного цикла, а это значит, что main завершится. После завершения main прерывания запрещаются автоматически и наступает вечный цикл. Вы именно этого поведения программы добивались?

Edited by ARV

Share this post


Link to post
Share on other sites
                     

CoolGaN - на предельной скорости коммутации!

Решения на галлий-нитриде (GaN) обладают фундаментальными преимуществами перед кремнием. В частности, имея более высокую критическую напряжённость электрического поля, в сравнении с традиционными кремниевыми транзисторами, транзисторы на основе галлий-нитрида обладают выдающимися динамическими характеристиками, что позволяет коммутировать их на высоких частотах. Семейство CoolGaN™ – это именно то, что необходимо, чтобы поднять ваши устройства на принципиально новый уровень. Мы собрали все самые интересные материалы по данной теме на одной странице.

Читать статьи

Posted (edited)

@Дмитрий Мамедиев , я вам конкретно написал: у вас в коде нет "вывести massz[2]" - что вы там ХОТИТЕ, я не в курсе, я вижу, что вы СДЕЛАЛИ. И про main я вам все написал четко и однозначно: нет цикла в main - нет никакой работы.

Edited by ARV

Share this post


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

Основная программа будет выполняться в ISR()

Основная программа должна выполняться в основном цикле. В прерывании должно быть все быстро, зашли зафиксировали ушли. И в коде своем пишите комментарии что вы хотите получить в каждой строчке своего кода. Так будет проще понять ход ваших злобных мыслей:D

Share this post


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

а это?

Что "это" - я вам описывал ранее: это простое считывание элемента массива, никакого ВЫВОДА куда-либо чего-либо тут нет. 

Share this post


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

if(....){massz[2]}

это значит- если (что-то) то {взять ячейку 2 массива massz.....} дальше что делать? Ну как минимум например что то присвоить massz[2]=5;  ну или прочитать массив а=massz[2]. у вас нет действий, о чем говорит ARV

Edited by Demonrostov

Share this post


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

бежать нужно

Успехов в спорте!

Share this post


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

разве не поставит

Поставит. Только massz[2] это не делает.

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

Share this post


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

Как так то.

А вот так. В массиве хрантся ЧИСЛА. Не ДЕЙСТВИЯ, а ЧИСЛА. Установка или сброс бита - это ДЕЙСТВИЕ. Улавиваете разницу между действием и числом?

Я ведь вам рекомендовал литературу по языку Си почитать - все продолжаете упорно игнорировать советы?

Edited by ARV

Share this post


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

Пойду читать.

И Proteus поюзайте, там много полезностей есть. Много вопросов можно самому решить, особенно на стадии обучения.

Share this post


Link to post
Share on other sites

2 платы UNO. Общая земля, подведена к внешнему БП. Есть междупортовые связи. Вопрос как правильно подключить питание..?? . К примеру, плюс 9 в звездой на оба VIN. Делал, почему то косячит((( И еще: как объяснить, что если никакого питания на вторую плату не завожу, а в первую втыкаю ЮСБ для заливки, то светодиод Power второй в течение 2-3 сек горит? Затем гаснет.

 

Share this post


Link to post
Share on other sites

Это паразитное питание через диоды выходных вентилей.

Share this post


Link to post
Share on other sites

Принесли мне дисплей только что новый из китая. Подключил но на нем тоже ничего не отображается. Вообще как мертвый. И подсветка не горит даже. Что за нах?

Share this post


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

Что за... ?

Что за дисплей и куда подключил? 

Edited by my504

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. К сожалению, в гугле не нашел подробной инструкции, а я в электронике я дуб дубом


  • Сообщения

    • Вы ещё и читаете с трудом? Куча же рекомендаций, что делать... а насчёт чего куда А тут профраздел.
    • Krab,хотел спросить вас только одно, на фото капля. это не 7106. Наверняка на память помните варианты. Подскажите пожалуйста.
    • Здравствуйте. Есть схема акустической мигалки. Собрал, все работает. Вместо КТ315Б использовал BC547B. Очень понравилась идея, и захотелось запитать ленту таким образом, но ток, протекающий через коллектор-эмиттер в 0.1А, мне не подходит (лента светит очень тускло, но чувствительность хорошая). Светодиодная лента потребляет 1 и 2 А (2 разных ленты на 2 разных устройства). То есть оптимально, чтобы схема могла пропускать 5А.  Для решения проблемы я купил BD243B, но эффект вообще не тот... чувствительность не такая, как при BC547B.  1. Можете ли посоветовать аналогичный DC547B транзистор со схожими характеристиками но на 5А коллектор-эмиттер?  2. Можно ли решить проблему, подключив несколько VT2? Если да, то нужно ли использовать низкоомные резисторы на эмиттер и какие? Ну и будет ли смысл городить забор из 10-20 транзисторов с объединенной базой?  P.S.: лента на 5В и 4,8 Вт/м
    • Здравствуйте, это доработка HCPL-3120 какой версии станции ? И при этой доработки нужно изменять прошивку и какую именно ?
×
×
  • Create New...