Jump to content

Вопросы от начинающих по МК


Recommended Posts

Скажите пожалуйста,мне необходимо инвертировать состояние пина порта,как это сделать?Программа AtmelStudio 6.2 . Я понимаю что необходимо использовать мнемонику ~ но если написать PORTC=~PORTC про инвертирует весь порт,а мне необходимо только младший разряд :help:

Может так? PORTC^=0b00000001;

Edited by BiBOX
Link to comment
Share on other sites

Пример неуместен. Ибо добавление лишнего кварца, необходимого для программирования - геморрой. Зачем он, спрашивается, если можно воткнуть МК в панельку программатора и прошить без всякой навесухи ?

Вот от совокупности таких мелочей и начинает "тошнить".

Alex, этот, совсем не лишний, а единственный (и иногда просто необходимый) кварц может быть подключен в панельке программатора. Его наличие ни как не скажется во всех вариантах прграммирования (кроме параллельного). Поэтому втыкать МК в панельку можно так же легко, как и PICи. Зато отсутствует необходимость высокого напряжения прграммирования. Это позволяет программировать МК через SPI внутрисхемно (в рабочей схеме, со всей обвязкой). К тому же есть возможность программирования через несколько других интерфейсов и даже самопрограммирования (вообще без программатора). Разве это плохо?

Link to comment
Share on other sites

Решения Infineon для беспроводного электроинструмента с бесщеточными электродвигателями

Современные строительные электроинструменты достигают высокой производительности и эргономичности благодаря использованию мощных бесщеточных электродвигателей и литий-ионных аккумуляторов. Для реализации сложных алгоритмов питания таких двигателей и управления ими компания Infineon предлагает микросхему интеллектуального драйвера управления трехфазным бесщеточным двигателем 6EDL7141, MOSFET BSC007N04LS6 из семейства OptiMOS 6, а также отладочную плату EVAL6EDL7141TRAP1SH.

Подробнее

Разве это плохо?
Конечно же не плохо. О плюсах и минусах разных фирм и их "плюшек" можно говорить очень долго... Зря я высказал своё мнение о Атмелах, забираю свои слова обратно, дабы не разводить "межнациональную войну". А мнение своё оставлю при себе :)
Link to comment
Share on other sites

Приглашаем на вебинар «Необычное в обычном. Сравнительный анализ современных решений Recom» (27.01.2022)

Приглашаем 27/01/2022 всех желающих посетить вебинар, посвященный двум наиболее растущим сегментам интегрированных источников питания – AC/DC малой мощности (1-20Вт) и сегменту решений PoL без изоляции. На вебинаре рассмотрим проблему выбора AC/DC в бюджетном сегменте и концепцию тестирования ускоренного старения, проведем сравнительный анализ подходов к интеграции AC/DC модулей. Сделаем обзор решений концепции POL с доисторических времен до современных технологий и средств для разработки и тестирования.

Подробнее

Тэкс.. господа... Прошивка МК - это вообще отдельный, особый режим работы МК (описанный в документах разработчика), и всё необходимое обеспечивается самим программатором. И без разницы, в какой режим будет сконфигурирован осциллятор МК.

Link to comment
Share on other sites

Как улучшить параметры преобразователей с помощью карбид-кремниевых модулей WolfPACK

Необходим быстродействующий преобразователь питания средней мощности с высоким КПД? Он должен быть компактным и недорогим? Решение – карбид-кремниевые модули средней мощности WolfPACK производства Wolfspeed. В статье рассмотрены основные особенности модулей WolfPACK и показано, что переход на эту универсальную и масштабируемую платформу позволяет не только быстро разработать новые устройства, но и без значительных затрат времени и средств модернизировать уже существующие схемы на традиционной элементной базе.

Подробнее

LI/PR2 – надежные и недорогие ИП от MORNSUN на DIN-рейку

Компания Mornsun выпустила три серии источников питания с креплением на DIN-рейку в форм-факторе Home Automation на популярные значения выходной мощности 30, 60 и 100 Вт (серии LI30-20/PR2, LI60-20/PR2, LI100-20/PR2). Эти источники питания относятся ко второму поколению продукции (R2) и характеризуются высокой надежностью и хорошей стоимостью.

Подробнее

порт микроконтроллера настроен на выход DDRC=255; можно ли его состояние проверять x=PINC?

Можно. При этом будете считывать актуальное состояние порта. т.к. возможна ситуация(КЗ на выходе) когда реальное состояние выхода отличается от состояния регистра-защёлки. Например КЗ выхода или конденсатор чрезмерной емкости, когда он током КЗ выходного драйвера заряжается с десяток микросекунд, а вы проверяете значение на выходе сразу же после смены состояния выхода.

Скажите пожалуйста,мне необходимо инвертировать состояние пина порта,как это сделать?

От студии это не зависит, в новых контроллерах есть такая фишка, если записать лог. 1 в порт PINx соответствующий бит регистра-защелки порта проинвертируется. Подробности смотреть в соответствующем даташите на примененный контроллер.

Учение - изучение правил. Опыт - изучение исключений.

Link to comment
Share on other sites

Подскажите,что обозначает данная строка- int main(void) - означает, что функция main возвращает значение типа int т.е. значения от 0 до 65535. Не могу понять,что значит возвращает.Куда возвращает?

Link to comment
Share on other sites

Функция возвращает то что написано в return. К примеру:

int func (void)

{

return 4

};

int x;

x = func();

x присвоиться значение 4.

Edited by GOR23
Link to comment
Share on other sites

Добрался я до lcd дисплея.

lcd_soxr_v_massiv("Proverka"); //Отправка в массив

void lcd_soxr_v_massiv (char massiv[])

{ char i;

for (i=0;massiv!='\0';i++)

lcd_razbiv(massiv); //отправка в разбив

}

void lcd_razbiv(char c) //Разбиваем на два,так как используем 4-х проводной режим

{

char cc=0;

cc=c>>4;

LCD_RS_SET;

lcd_otpravka(cc); //Отправляем первую часть

lcd_otpravka©; //и вторую

}

Как я понял сохраняются коды букв в массив,это верно?

Каким образом мне сделать,что бы он отображал значение переменной?

Засовываю просто переменную,ругается студия и ни чего не отображает.

Делаю через if,но необходимо 120 разных значений записать,что очень много места занимает(((

Помогите,пожалуйста. :unknw:

Edited by BiBOX
Link to comment
Share on other sites

Купил на ebay преобразователь USB-UART на FT232RL и подключил к USB. FT232RL греется и драйвер в Windows поставить не получается. FT232RL в Windows не определяется. Нормально ли что микросхема FT232RL греется?

Edited by Vezd
Link to comment
Share on other sites

это не нормально. она у вас с косяком.

проверте монтаж он не сложный, схема включения есть в даташите, она не сложная, деталей 5-7

Не знаеш как? Спроси у Google'а !!!

Link to comment
Share on other sites

Есть ещё вариант с китайской FT. У меня она тоже слегка грелась. FT не определяется вообще, или просто драйвер не устанавливается и она остаётся как неопознанное устройство? Если второй вариант попробуйте вот эти дрова.

ЗЫ: Вот здесь про китайские FT прекрасная статья.

ft232 drivers crack.rar

Edited by GOR23
Link to comment
Share on other sites

Определяется только как "Неизвестное устройство", как FT не определяется. И драйвер не подцепляется.

Прикрепленные дрова тоже не сработали :( .

Статью прочитал. Значит я все равно испортил бы микросхему новыми дровами.

Заказал преобразователь на CP2102.

Link to comment
Share on other sites

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

какая у вас ОС?

Edited by Viktor26

Не знаеш как? Спроси у Google'а !!!

Link to comment
Share on other sites

У меня была похожая ситуация. Только драйвера у меня первый раз установились, после извлечения устройства и повторного подключения драйвера уже не устанавливались устройство было неопознано, PID слетел на 0. В тех драйверах что я выложил, я просто поменял PID в inf файлах с 6001 на 0000. После этого дрова у меня установились и устройство заработало. При чём на 7 винде. Вот только не помню может отключал я проверку цифровой подписи драйверов или нет. Сейчас в основном пользуюсь XP, там и так всё работает.

Link to comment
Share on other sites

какая у вас ОС?

Windows XP

Посмотрите в свойствах неизвестного устройства какой там PID.

Вроде 0000

post-121615-0-44920300-1436436304_thumb.png

Edited by Vezd
Link to comment
Share on other sites

Мощные светодиоды лучше вообще не ШИМ-ировать, в чем проблема управлять плавно через обратную связь по току?

300гц чистого ШИМ-а для светодиодов это очень мало, даже на небольших движениях будешь наблюдать стробоскопический эффект.

Даже 1кГц на вращающихся элементах дают заметный стробоскопический эффект.

Учение - изучение правил. Опыт - изучение исключений.

Link to comment
Share on other sites

А что эти светодиоды будут в местном освещении станка использоваться, чтобы заморачиваться стробоскопическим эффектом? Обычные люминесцентки моргают 100 Гц и то никто не замечает. Только в производственных цехах их запитывают от разных фаз, чтобы этого эффекта не было.

Link to comment
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...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

  • Сообщения

    • above 100kHz - выше below 100kHz - ниже Почему при снижении частоты нужно увеличивать емкость? И нужно ли? @Ulis с предыдущей схемой (Медок) вы оч хорошо помогли разобраться с действием конденсатора по входу, спасибо. Может и тут исправите схему в симуляторе до последней, которую я приводил, с Ку=2? Был бы оч признателен. Не понимаю, почему звук меняется при переходе на низкий Ку... Должен только лучше становится...
    • Неплохой перевод. Всё понятно. В чём вопрос-то? Почему "below" вместо "ниже" стало переводиться как "выше"? Или в чём?
    • Ещё раз: разрабатывал проект не он. Поэтому упоминаю его только потому, что на его сайте нашел схему и проект. Никакой привязки его к авторству нет. В даташите увидел немного другое, потому и спросил.  Вот перевод автоматический того фрагмента.  
    • В сервисном центре.  Ты всё равно можешь её только поменять, при этом сделав копию её содержимого у целой камеры и поставить память на свою. 
    • @dyno По-моему, я когда-то где-то и по-моему именно вам уже писал, что шунтирование питания конденсаторами должно работать во всей полосе пропускания ОУ, чтобы не сталкиваться со всякими непонятными эффектами.
    • Датагор - полу-грамотный барыга.
    • Поток останется 265, определённый автоматически регом. Что-то не то всё-таки с сохранением настроек. За это микруха памяти отвечает? Есть вообще утилиты для тестирования нутра таких девайсов?
  • Similar Content

    • By Super Akk
      Здравствуйте, я работаю в Proteus и у меня возникла ошибка Simulation is not running in real time due to excessive CPU load
      Подскажите пожалуйста как её исправить
      Код прошивки:
      #include <lm3s300.h> // Graphic Display functions #include <glcd.h> // Font used for displaying text // on the graphic display #include <font5x7.h> // Declare your global variables here void main(void) { unsigned char odin[] = { 0x08, 0x00, 0x08, 0x00, #ifndef _GLCD_DATA_BYTEY_ 0x00, 0x10, 0x18, 0x14, 0x10, 0x10, 0x7C, 0x00, #else 0x00, 0x00, 0x48, 0x44, 0x7E, 0x40, 0x40, 0x00, #endif }; // Declare your local variables here // Variable used to store graphic display // controller initialization data GLCDINIT_t glcd_init_data; // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2A output: Disconnected // OC2B output: Disconnected ASSR=(0<<EXCLK) | (0<<AS2); TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20); TCCR2B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (0<<CS20); TCNT2=0x00; OCR2A=0x00; OCR2B=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); // Timer/Counter 2 Interrupt(s) initialization TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (0<<TOIE2); // External Interrupt(s) initialization // INT0: Off // INT1: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-14: Off // Interrupt on any change on pins PCINT16-23: Off EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00); EIMSK=(0<<INT1) | (0<<INT0); PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0); // USART initialization // USART disabled UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80); // 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 DIDR1=(0<<AIN0D) | (0<<AIN1D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); // SPI initialization // SPI disabled SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); // TWI initialization // TWI disabled TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE); // Graphic Display Controller initialization // The KS0108 connections are specified in the // Project|Configure|C Compiler|Libraries|Graphic Display menu: // DB0 - PORTB Bit 0 // DB1 - PORTB Bit 1 // DB2 - PORTB Bit 2 // DB3 - PORTB Bit 3 // DB4 - PORTB Bit 4 // DB5 - PORTB Bit 5 // DB6 - PORTB Bit 6 // DB7 - PORTB Bit 7 // E - PORTC Bit 0 // RD /WR - PORTC Bit 1 // RS - PORTC Bit 2 // /RST - PORTC Bit 3 // /CS1 - PORTC Bit 4 // /CS2 - PORTC Bit 5 // Specify the current font for displaying text glcd_init_data.font=font5x7; // No function is used for reading // image data from external memory glcd_init_data.readxmem=NULL; // No function is used for writing // image data to external memory glcd_init_data.writexmem=NULL; glcd_init(&glcd_init_data); glcd_putimage(0,0, odin, GLCD_PUTCOPY); while (1) { // Place your code here } } Схема прикреплена ниже в архиве

      Схема.rar
    • By Н_Д_А
      Всем привет).
      Может, кому-то эта статья  сэкономит много времени и нервов. 
      Недавно  по работе встретился с интересной задачкой.
      Нужно было передать на железку по порту RS485 информацию для проверки работоспособности последней.
      Так как не всегда имеется в ремонте вся система, то для начала нужно было посмотреть, на заведомо исправной системе, что же там между ними (железками) передаётся.
      Логический анализатор показал что девайсы общаются по не совсем стандартному, а по  9ти битному протоколу (USART 9n1).
      А это усложняло задачу, так-так известные мне терминальные программы его не поддерживают.  И без бубна не обойтись))).
      Начались поиски решения.
      Через некоторое время стало понятно, что AVR позволяет это делать и даже в даташите подробно это описывает.
      Дело за малым. Реализация задуманного))). 
      Все регистры выставлены по документу………..Для Atmega8a.
      void USART_Init( unsigned int speed) //Инициализация модуля USART { UBRRH = (unsigned char)(speed>>8); UBRRL = (unsigned char)speed; UCSRB=(1<<RXEN)|( 1<<TXEN); //Включаем прием и передачу по USART UCSRB |= (1<<RXCIE); //Разрешаем прерывание при передаче UCSRA |= (1<<U2X); //удвоение скорости UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0); UCSRB |= (1<<UCSZ2); // Включаем 9bit режим // Обращаемся именно к регистру UCSRC (URSEL=1) // ассинхронный режим (UMSEL=0), без контроля четности (UPM1=0 и UPM0=0) // 1 стоп-бит (USBS=0), 8-бит посылка (UCSZ1=1 и UCSZ0=1) // если (UCSZ1=1 и UCSZ0=1 и UCSZ2=1) 9bit mode. // UCSRC |= (1<<UPM1);//четность } По даташиту передача 9го бита происходит установкой или сбросом TXB8. 
      То есть, установили бит, передаётся 1 в старшем 9ом разряде, сбросили – 0. 
      void USART_Transmit( unsigned int data ) // функция передачи 9ти бит из даташита. { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ) ; /* Copy ninth bit to TXB8 */ UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) //не понял, что они хотели этим сделать. UCSRB |= (1<<TXB8); /* Put data into buffer, sends the data */ UDR = data; } И вот незадача, числа размером до 1 байт передаются без проблем, а числа больше 0xFF (255) нет).
      А устройство передаёт числа до 510.
      Предлагаю решение.  Может и не самое лучшее, но вполне работоспособное.
      int main(void) { USART_Init (103);//9600 //------------------------------------------------------------------------------------ while(1) { for (i=0; i<22; i++) { code_simbol = simbol[i]; //символ из массива //-------------------------------------отправка в UART-------------------------------- if (code_simbol > 255) { pr=1; // флаг передачи символа больше 0xff (255 десятичное) } else { pr=0; // флаг передачи символа меньше 0xff } USART_Transmit(code_simbol,pr);//собственно сама функция отаравки } } } А теперь и сама функция передачи .
      void USART_Transmit( unsigned char data, uint8_t prisnak ) //Функция отправки по USART { while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема if (prisnak==1) { UCSRB |= (1<<TXB8); //устанавливаем для передачи еденицы в старшем разряде } else { UCSRB &= ~(1<<TXB8); //сбрасываем старший разряд } /* Put data into buffer, sends the data */ UDR = data; //Начало передачи данных asm volatile ("nop"); Соответственно если число для предачи мньше 256 мы передаём его при нулевом 9ом бите.
      Ну а если больше то 9й бит выставляем в единицу.
      А вот и результат.

       
    • By eyuw
      Б/у контролеры холодильной установки: 1) Eliwell 974LX  на atmega16A-PU , 3 реле - характеристики на фото.Цена 15 бел.руб. 2) Eliwell IDPlus974  на atmega32A-PU, 3 реле - характеристики на фото.Цена 18 бел.руб. Корпуса без передней панели закрывающей цифровой индикатор, без датчиков температуры! г.Толочин, Витебская обл. Отправка по Беларуси наложенным платежом. Покупатель также оплачивает почтовые расходы. 


    • By АртемК
      Уже весь интернет прошерстить, помогите найти, или где он приставует, чтоб его достать нужен очень срочно, или может у кого то есть куплю!

    • By Эдик Ибрагимов
      Использовать микроконтроллер семейства 8951
       
×
×
  • Create New...