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

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


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

1 hour ago, Дмитрий Мамедиев said:

Если программа написанна в ардуино, я смогу и как, залить ее в атмегу 8 без ардуино платформы?

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

Посмотрите эту статью Ардуино на Атмега 8

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

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

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

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

В ардуино выбираем инструменты:
Плата: arduino ng or older
Процессор: atmega8
Программатор: usbasp
Затем скетч-загрузить через программатор.
Но пишет что нужно обновление usbasp. Сомниваюсь что это поможет, думаю проблема глубже.

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

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

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

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

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

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

А можно: скетч-экспорт бинарного файла. И в папке с проектом создает hex файлы. Только не понятно почему два: стандарт и бутлодер стандарт. И какой из них нужный?

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

Как понимать фразу- рассмотрим 8-битный регистр статуса, отображенный на адрес памяти 0x1234??? Это типа регистр(попросту ячейка памяти),имеющий адрес в памяти 0х1234 и являющийся регистром статуса?

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

1 час назад, StationX сказал:

отображенный на адрес памяти 0x1234

Отображенный - значит имеющий  адрес расположенный в поле адресов ОЗУ, но физически не расположенный в ОЗУ. Такого рода регистры могут иметь не единственный адрес доступа (опционально).

戦う前に相手のベルトの色に注目

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

      Здравствуйте. Сделал программу устройства. В протеусе работает, хотя и дергается (CPU загрузка 90-98%). Когда перенес на МК (Atmega8-16PU) начались проблемы, не понравилось как работает связка АЦП+ТАЙМЕР1 (ГУН). Сначала не обратил внимание, потом заметил ,что при изменении напряжения на входе АЦП  сигнал на выходе ГУН на 1-3 сек пропадает потом появляется (частота соответствует заданной со входа АЦП). Выделил этот кусок программы, просимулировал в протеусе, все нормально, переренес на МК опять плохо! Программатор USBASP AVR.

Подскажите, в каком направлении двигаться.

 

Timer_1_ADC.c

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

Цитата

Попробуйте устанавливать в OCR1A новое значение только когда изменилось значение АЦП.

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

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

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

snn_krs и Alexeyslav. Похоже дело не в программе ,а в самом МК. У меня было 2-е Атмеги одну сразу "заклинил" фьюзами, а 2-ю похоже подпортил пока несколько раз перепрошивал, подбирая коэффициент F от U. (переставлял из программатора в схему).

Как эти МК реагируют на статику ? Появилось подозрение, что они боятся статического электричества даже небольшого.

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

Компилятор пишет id returned 1 exit status.
Но! Если в самом конце ввести пустую
int main (void) {
while
}} то без ошибок. Т.е. проблема не в том что какой то символ не правильно написан! Тогда в чем?

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

Объясните - не могу понять в чём я допустил ошибку. Atmega8. 

Цель - потушить  светодиод в Proteus 8  при нажатии на кнопку - ну или зажечь неважно.

После загрузки в протеус - и запуска - светодиод загорается но не тухнет при нажатии на кнопку

Пробовал включать встроенное сопротивление- пробовал не включать.

Пробовал различные варианты - не работает. - 

Скрытый текст

#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>

void Preset()
{
    DDRB = 0xFF;
    DDRD = 0x00;
    PORTB = 0xFF;
    PORTD = 0x00;
}

int main(void)
{
    Preset();
    
    while (1)
    {
        if (PIND0 == 1) // (PIND>0x00),(PIND>0x00),(PIND0&0x00),(PIND>0),(PIND0&0) Варианты опробовал - всё также не реагирует
        {
            PORTB = 0x00;
            _delay_ms(1000);
        }
        else
        {
            PORTB = 0xFF;
            _delay_ms(1000);
        }
      
    }
}

5ab821e8df7b5_.jpg.240b19e5c6565eed4fa5d7a4abe3ce3d.jpg

 

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

Подтянуть вход PD0 внешним резистором к питанию.

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

Я не раздаю удочки. Я продаю рыбу.

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

Кнопку обычно ставят на "общий", подтягивая порт к питанию внешним или внутренним резистором. Если желаете, чтобы работало от управляющего "плюса", притяните порт к "общему", иначе на нем всегда будет "1".

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

солар  пробовал внешне и к питанию и к земле - разные местами- при этом код соответственно менял. не помогает То есть помогло частично

Тут вот в чём дело то в  условии If  (PINC0 >0) при включении светодиод горид - при нажатии не тушится  а при условии if (PINC>0) светодиод тухнет. Пришлось вешать резистор на каждый порт C. И тогда чудо случилось - наконец заработало. вот так  If  (PINC >0), 

Однако не работали такие условия  If  (PINC0 >0),  If  (PC0 >0),  If  (PINC0==1), If  (PINC0!=0) и.т.д.

А чтобы узнать - конкретную ножку нужно указать бит в PIN вот таким образом if (PINC&0b00000001) так работает 100%

А можно ли всё-таки узнать состояние порта не обращаясь к битам PIN ??? допустим через  PC>0 - ну или как то так ?

 

 

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

7 часов назад, AlexRK сказал:

И тогда чудо случилось - наконец заработало.

Это не чудо. Это называется играть в угадайку. Вместо того чтобы разобраться как всё же работает контроллер и почему это делается именно так.

7 часов назад, AlexRK сказал:

можно ли всё-таки узнать состояние порта не обращаясь к битам PIN ??? допустим через  PC>0

Можно всё. Но это ни больше ни меньше а макроопределения которые в итоге сводятся к чтению регистра PINC... одно и то же можно сделать тысячами разных способов, и года только добавляют эти велосипеды.

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

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

3 часа назад, StationX сказал:

#define PERIOD_10_MS                  (20)

То есть почему константа в скобках?

потомушта, в это определение при наладке часто вводится корректирующий коэффициент типа :

#define PERIOD_10_MS                  (20-1)

и в выражении типа : частота=1/PERIOD_10_MS

со скобками это 1/19, без  1/20 - 1

фирштейн?

 

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

В 26.03.2018 в 01:28, AlexRK сказал:

Объясните - не могу понять в чём я допустил ошибку. Atmega8. 

Цель - потушить  светодиод в Proteus 8  при нажатии на кнопку - ну или зажечь неважно.

  Показать содержимое

#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>

void Preset()
{
    DDRB = 0xFF;
    DDRD = 0x00;
    PORTB = 0xFF;
    PORTD = 0x00;
}

int main(void)
{
    Preset();
    
    while (1)
    {
        if (PIND0 == 1) // (PIND>0x00),(PIND>0x00),(PIND0&0x00),(PIND>0),(PIND0&0) Варианты опробовал - всё также не реагирует
        {
            PORTB = 0x00;
            _delay_ms(1000);
        }
        else
        {
            PORTB = 0xFF;
            _delay_ms(1000);
        }
      
    }
}

5ab821e8df7b5_.jpg.240b19e5c6565eed4fa5d7a4abe3ce3d.jpg

 

Попробуйте написать так. if (PIND &=~(1<<0)) . Это в Atmel Studio 6.2

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

Только что, RA3DTI сказал:

Попробуйте написать так. if (PIND &=~(1<<0))

Вы сами-то поняли, что написали? В курсе, что в итоге будет или может быть?

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

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

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

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

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

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

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

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

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

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

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

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

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