Перейти к содержанию

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


Рекомендуемые сообщения

думал, вы скажете что это компьютер.

Нет, в роли компьютера будет ваш контроллер. Иначе, для чего он вообще нужен?

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Карты бывают разные. Я же не сказал, что она должна быть IBM совместимая :)

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Добрый вечер, товарищи! Совсем недавно начал изучать микроконтроллеры. И решил начать с фирмы Texas Instruments. Хочу собрать схему, показанную на рисунке 1. Т.е с помощью кнопки переключать светодиоды. Написал код программы:

#include "msp430f1121.h"

int main(void)

{

WDTCTL = WDTPW + WDTHOLD;

P1DIR |= BIT1 + BIT3;

P1OUT = 0x00;

P1OUT |= BIT2;

while(1)

{

if((P1IN & BIT2)==0)

{

P1OUT |= BIT1;

P1OUT &= ~BIT3;

}

else

{

P1OUT |= BIT3;

P1OUT &= ~BIT1;

}

}

}

IAR ругаться на нее не стал. Сначала решил промоделировать схему в протеусе, использую выходной файл .hex . Но вот протеус стал ругаться и выдавать вот такую ошибку:

Error reading HEX file D\....\(location): Colon expected at start of line..

Real Time Simulation failed to start.

Ума не приложу в чем ошибка! Но самое главное протеус работает нормально, прошивка, скачанная из интернета для других МК работает.

Прошу, помогите мне! Заранее благодарю всех!smile.png

post-191122-0-74823900-1431892090_thumb.jpg

post-191122-0-47098400-1431892091_thumb.jpg

post-191122-0-28710400-1431892092_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

У HEX-а есть два принципиально разных формата, видать IAR генерирует несовместимый формат файла. Надо бы покопаться в компиляторе и переключить на другой.

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

Ссылка на комментарий
Поделиться на другие сайты

Методом тыка. Открой его в блокноте и посмотри, открой те что в протеусе работают и тоже посмотри.

А на счет программы - практика покажет.

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

Ссылка на комментарий
Поделиться на другие сайты

А мне нравится кнопка с батарейкой :crazy:

Когда я впервые открыл протеус, я промодeлировал именно такую схему.

Изменено пользователем si4karuk
Ссылка на комментарий
Поделиться на другие сайты

Вроде создает. Сейчас попробовал скомпилировать файл с этим расширением, протеус выдал еще больше ошибок. А как блокнотом открыть файл .hex?

Ссылка на комментарий
Поделиться на другие сайты

Это не файл прошивки, это точно. Это какой-то левый двоичный файл. Скорей всего, что-то не так сделано и компилятор сохраняет в .HEX что-то совсем другое. Судя по всему, это готовый объектный файл.

Настоящий .HEX-файл должен быть текстовым и вполне удачно открываться блокнотом.

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

Ссылка на комментарий
Поделиться на другие сайты

#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include "lcd.h"
void uart_init( void )
{
//настройка скорости обмена
UBRRH = 0;
UBRRL = 12;// 4800 скорость
//8 бит данных, 1 стоп бит, без контроля четности
UCSRC = ( 1 << URSEL ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 );
//разрешить прием и передачу данных
UCSRB = ( 1 << TXEN ) | ( 1 <<RXEN );
}
void uart_putc( char g )
{
//ждем окончания передачи предыдущего байта
while( ( UCSRA & ( 1 << UDRE ) ) == 0 );
UDR = g;
}

void uart_puts( char *str )
{
unsigned char g;
while( ( g = *str++ ) != 0 ) {
uart_putc( g );
}
}
int main( void )
{
uart_init();
while( 1 )
{
uart_puts( "Hello \r\n" );// r,n- переход на новую строку
_delay_ms(1000);
 }
return 0;
}

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

Изменено пользователем lazudhic
Ссылка на комментарий
Поделиться на другие сайты

а в реальности всё работает. измерил чистоту примерно подогнал . теперь надо на lcd принятое слово вывести . т.е. как из всех букв собрать в слово и передать на экран ?

Ссылка на комментарий
Поделиться на другие сайты

Добрый вечер. Такой вопрос. Кто знает зачем ставят резистор между линиями Rx Tx UARTа. Резистор 240к. Увидел такое в готовм устройстве, до этого не видел ниразу.

Ссылка на комментарий
Поделиться на другие сайты

терминатор видимо

для линий связи значительной длинны полезная штука от помех. Если линия 2-5 метров, можно не заморачиваться

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Встречал такое, когда два прибора связаны по одной линии. Т.е. Rx подсоединяется напрямую, а Tx для ограничения тока, уже через резистор. Для чего так сделано х.з. Обычно резистор ставится от "звона" между линиями RS482/RS422, но там - десятки Ом.

Изменено пользователем shindbad
Ссылка на комментарий
Поделиться на другие сайты

не ну к.з. батарейки при помощи кнопки это вещь !!! но у меня другой вопрос нужно организовать буфер на 20 символов в программе на приёме uart и только после этого выводила принятое сообщение из 20 символов на экран lcd . или покажите готовый кусок кода и где он должен стоять

ниже привожу код который:

передаёт сообщение по уарт на п.к., если пришёл символ с п.к. отображает на lcd экране и обратно всё снова(работает цеклично)

. код уже проверял работает с м.к.atmega32

#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include "lcd.h"
#define F_CPU 1000000// не на что не влияет
void lcd()
{
init_port(); // инициализируем порт A для lcd
lcd_init(); // инициализируем ЖКИ десплей
lcd_clear();
}
// работа с usart
void uart_init( void )
{
//настройка скорости обмена
UBRRH = 0;
UBRRL = 12;// 4800 скорость
//8 бит данных, 1 стоп бит, без контроля четности
UCSRC = ( 1 << URSEL ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 );
//разрешить прием и передачу данных
UCSRB = ( 1 << TXEN ) | ( 1 <<RXEN );
}
unsigned char uart_getc( void )
{
//ждем приема байта
while(( UCSRA & ( 1 << RXC )) == 1);
//считываем принятый байт
return UDR;
//1 вот сдесь нужно собрать слово скорее всего через буфер
}
void uart_putc( unsigned char g )
{
//ждем окончания передачи предыдущего байта
while( ( UCSRA & ( 1 << UDRE ) ) == 0 );
UDR = g;
}

void uart_puts( char *str )
{
unsigned char g;
while( ( g = *str++ ) != 0 ) {
 uart_putc( g );
}
}

int main( void )
{
uart_init();
unsigned char  g;
uart_puts( "Hello uart\r\n" );// r,n- переход на новую строку
lcd();
while( 1 )
{
  lcd_clear();
 lcd_putstring("zapusc");
  _delay_ms(2000);
  uart_puts("Hello drug" );// r,n- переход на новую строку
 lcd_clear();
 lcd_putstring("GOTOV"); //выводим строку на lcd-Done AT Home

 g = uart_getc();

   _delay_ms(10);
   lcd_putchar( g );
 _delay_ms(1000);
 }
   return 0;
}

Ссылка на комментарий
Поделиться на другие сайты

и ещё такой вопрос если разница между этими кодами а то попадаются примеры в которых по разному написано

while(( UCSRA & ( 1 << RXC )) == 1);//ждем приема байта
return UDR;

и этим

while(!( UCSRA & ( 1 << RXC )));//ждем приема байта
return UDR;

Ссылка на комментарий
Поделиться на другие сайты

Есть. Первая запись в общем случае неправильная. Правильно ее исправить на

while((UCSRA & (1<<RXC)) != 0);

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

поэкспериментировав выяснил что первая запись будет работать без ожидания получения информации, вторая будет ждать пока биты поступят в порт и только после этого продолжит работать . ну поскольку информацию про буфер не получил собрал следующий блок

 for (int m=0;m<=9;m++ )
  {
   g = uart_getc();
   lcd_gotoxy(m,1);
   lcd_putchar( g );
  }

который отдалённо имеет что то схожее и теперь появляются строчки на экране

Ссылка на комментарий
Поделиться на другие сайты

Написать буфер не так сложно. Для интерфейсов в общем случае больше подходит список (FIFO), но в частном может быть удобнее массив с произвольным доступом. Для простейшего случая можно обойтись массивом, а после заполнения забирать оттуда всю информацию одновременно. Для этого можно завести массив и переменную, хранящую сколько байт принято. По приему очередного байта (по прерыванию, например) записываем в конец массива принятый байт и увеличиваем счетчик. В основной программе проверяем, не равен ли счетчик размеру массива и если равен - забираем все данные из массива и сбрасываем счетчик в ноль.

Полный код писать не буду, хотя это было бы проще, чем текстовое описание.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • @DownHouse , насчёт номинала затворного резистора вам уже сказали. Он образует RC-цепочку с ёмкостью затвора транзистора. На высоких частотах ШИМ работать не будет. Кроме того, у транзисторных оптопар есть такой параметр: Как видите, ток коллектора может быть даже меньше входного тока в светодиод. Быстро управлять затвором мощного полевика, у которого ёмкость под 10 нФ, таким маленьким током не получится. Так что и тут ограничение на частоту ШИМ. По закону Ома он считается. Какой ток коллектора сможет выдать транзистор оптопары, такое напряжение на R2 и получится. Естественно с "упором" в напряжение питания. Выше него не прыгнешь. Транзистор оптопары войдёт в насыщение, выходной ток оптопары станет меньше максимального, который может выдать её транзистор, ток будет ограничен значением сопротивления R2. Например, при коэффициенте передачи тока оптопары, равным единице, при напряжении питания 5 В, при токе в светодиод оптопары 10 мА и при сопротивлении резистора R2 500 Ом, напряжение на нём будет 10 мА * 0,5 кОм = 5 В. Но если оптрон посредственный, с коэффициентом передачи тока 0,5, то при тех же условиях, выходной ток коллектора транзистора оптрона будет не больше 5 мА, и напряжение выше 2,5 В на R2 не поднимется. Если пороговое напряжение открывания полевого транзистора выше, то он не откроется. Чтобы схема работала при установке любого экземпляра оптопары, без отбора, схема проектируется исходя из наихудших значений параметров. В вашем случае минимально-допустимое сопротивление R2 будет 1 кОм (10 мА/2 * 1 кОм = 5 В).  
    • Алексей, ну ты-то уже опытный в аудиотехнике волк и понимаешь, что все эти буквенные обозначения на латинице у производящих е-cap-ы контор по факту означают разные потребительские характеристики. А товарищ @Алексей Акулиничев в этом ещё новичок; натрёт в залобье мозолей, с опытом тоже начнёт разбираться в "who из где". 
    • Смотря для чего оптимальный. Если вы КПД блока под 99% вытягиваете, то нужен очень маленький. Но при этом будет сильное недоиспользование габаритной мощности "железа" сердечника. Если задача по-максимуму использовать возможности сердечника - то ограничивается только максимальной температурой сердечника, точкой Кюри...
    • Примерно так. НО! Если у этих динамиков НЧ реально от 40Гц, то кубики пенопласта будут тереться друг об друга , создавая заметные на слух "артефакты", поэтому надо бы запастись тонким поролоном, или плотной тканью прокладывая его/её между ними, или обворачивая их. ЗЫ. Чем дешевле динамик и чем проще кажется реализация на нём более-менее ровно играющей акустической системы,тем  больше возни с ним. Это уже не раз доказанный практикой факт.
    • Вот спасибо. Это прям для меня.  Я не про этот резистор. Про этот резистор я понял. Я не понимаю нужен ли резистор перед 4 выводом оптопары. Да я пока думаю нужен ли он будет (в смысле ШИМ). Точности большой по температуре не нужно будет. R1 будет от 150 - 200 Ом, а вот R2 не очень понимаю как считать (как я понимаю этот резистор будет затвор транзистора на землю сажать пока оптопара закрыта,  5-10 кОм думаю) Вот так сделал.
  • Похожий контент

×
×
  • Создать...