Программирование МК AVR

 

 

 

Помечено: 

В этой теме 27 ответов, 18 участников, последнее обновление  SergeyVT 4 дн., 6 час. назад.

Просмотр 13 сообщений - с 16 по 28 (из 28 всего)
  • Автор
    Сообщения
  • #13888

    arkonen
    Участник

    Всех с новым годом . Товарищи помогите , подскажите как реализовать SNMP в AVR ? Или может статьи есть у кого то интересные где почитать можно ?

    #13933

    VladimirM
    Участник

    Здравствуйте. В ATmega328P есть регистры OCR0B, OCR0A у меня вопрос, если будет установлен режим сброс при совпадении, а значения в регистрах будут разные, получается что счётчик не дойдёт до второго числа в регистре которого число больше и будет всё время сбрасываться, так как регистр TCNT0 один,а регистра сравнения (OCR0B,OCR0A) два! Так ли это? Как они работают?

    #14621

    arkonen
    Участник

    Доброго времени суток , подскажите пожалуйста как можно безболезненно в AVR всунуть SNMP ?
    Может подскажите ссылки , ну или хотя бы направьте в нужное русло !

    #14623

    Ortos
    Участник

    Доброе время суток.
    Подскажите пожалуйста как подключить точку через 74hc595 для часов.
    Спасибо.

    #14780

    Leonid
    Участник

    Спасибо автору за его бескорыстную просвятительскую (надо сказать отлично выполненную) работу!

    Теперь, не совсем в тему, посмотрел на ваш урок в ютьюбе и честное слово, позавидовал работе вашего компьютера. Быстро, четко без задержек на внутренние задержки, даже при работе с «железом»! ВОПРОС, если не составит труда дайте конфигурацию вашего компа и операционной системы… Уж ОЧЕНЬ хочется такой же…

    #15095

    Selivanov
    Участник

    Владимир, добрый день!
    Свой вопрос я хотел бы начать с благодарности: большое спасибо за канал! Ещё недавно будучи студентом универа,
    я смотрел Ваши и ролики и, скажем так, набирался ума. Само собой, это пошло на пользу, и дисциплину, связанную с
    программированием МК, я закрыл на хорошую оценку.
    Теперь непосредственно вопрос: у Вас есть очень интересный цикл уроков про микроконтроллер STM32 и сетевой чип W5500.
    Скажите, пожалуйста, реально ли Ваш код переставить на «рельсы» AVR? Я пытался переделать его самостоятельно (я хочу
    поднять простой UDP сервер), но у меня ничего не выходит. Не могли бы вы дать несколько советов, как инициализировать
    чип на AVR (я, в частности, использую Atmega32)? Я делаю практически всё то же самое, но не знаю, в чём может крыться
    ошибка (может быть, даже неправильно написана функция передачи по SPI). Помогите, пожалуйста, уже почти месяц
    бьюсь над этой проблемой. Если что, могу даже скинуть свой код.
    Спасибо. Каким бы ни был результат, я обещаю задонатить, так как считаю, что такие полезные ресурсы должны иметь поддержку.

    #15096

    Narod Stream
    Хранитель

    Здравствуйте!
    А чип отзывается по SPI?

    #15099

    Selivanov
    Участник

    Этого я не проверял. Я написал функцию пересылки данных по SPI, и начал писать в регистры W5500 необходимые данные: ip, mac, порт и всё остальное. У меня, к сожалению, самый простой программатор, без отладчика, поэтому отладить код не могу. Наверное, мне стоит попробовать прочитать эти данные, чтобы удостовериться, что они действительно доходят до места назначения, но я даже не уверен, что пересылку организовал правильно. Код привожу ниже:

    void w5500_writeReg(uint8_t op, uint16_t adress, uint8_t data)
    	{
    		//select_w5500();                //Функцию выбора SS закомментировал
    		SPDR = (adress>>8);              //Пересылаем старший байт адреса
    		while(!(SPSR & (1<<SPIF)));      //Ждём конца пересылка
    		SPDR = adress;                   //Пересылаем младший байт адреса
    		while(!(SPSR & (1<<SPIF)));
    		SPDR = op|(RWB_WRITE<<2);        //Применяем операцию "или" к опкоду и битом записи, сдвинутым на два бита
    		while(!(SPSR & (1<<SPIF)));
    		SPDR = data;                     //Передаём данные
    		while(!(SPSR & (1<<SPIF)));
    		//deselect_w5500();
    	}
    

    Функция чтения точно такая же, за исключением того, что я по-другому формирую опкод (op|(RWB_READ<<2) и в конце не пересылаю данные в SPDR, а возвращаю их (return SPDR). Если можно как-нибудь по-другому проверить работоспособность чипа, то я буду рад об этом узнать.

    #15100

    Narod Stream
    Хранитель

    Проверьте отклик логическим анализатором

    #15749

    Yury
    Участник

    В уроке 20, часть 2 есть небольшая ошибка: в нескольких функциях мы запрещаем прерывания, но нигде их не разрешаем…

    #15758

    SergeyVT
    Участник

    Доброго времени суток, Narod Stream!Прошу разъяснить для меня простую вещь.
    В уроке про мигающий светодиод мы изучали побитовые операции И, ИЛИ, НЕ.Все вроде бы понятно.Но тут напрашивается вопрос, зачем Вы так усложнили код, тем более с обычным мигающим светодиодом?
    Ваш код
    #define F_CPU 8000000
    #include <avr/io.h>
    #include <util/delay.h>

    int main(void)
    {
    DDRD = 0xFF;
    PORTD = 0b00000000;
    while(1)
    {
    PORTD |= (1<<(PORTD0));
    _delay_ms(500);
    PORTD &= ~(1<<(PORTD0));
    _delay_ms(500);
    }
    }
    Мой код
    #define F_CPU 8000000// указываем частоту в герцах
    #include <avr/io.h>
    #include <util/delay.h>

    int main(void)// начало основной программы
    {
    DDRD = 0xFF;//Все выводы порта D будут сконфигурированы как выходы.
    PORTD = 0b00000000;//устанавливаем на всех ножках принудительно ноль(во избежание остаточного мусора в регистрах)
    while(1)
    {
    PORTD = 0b00000001;
    _delay_ms(500);//делаем задержку в пол секунды
    PORTD = 0b00000000;
    _delay_ms(500);//делаем задержку в пол секунды
    }
    }
    Хотя ведь можно было просто установить вот так как у меня и все так же работает.Если я не прав, то поясните в чем конкретно.Буду очень признателен.

    #15819

    tobaco
    Участник

    [b]SergeyVT[/b]
    Потому что в данном случае:
    PORTD |= (1<<(PORTD0));
    затрагивается только ножка на которой висит светодиод, а в вашем случае вы явно задаете состояние всех ног порта, что верно, но в случае если на другие ножки вешать что-то еще, то ваш код все это отключит.

    #15828

    SergeyVT
    Участник

    [b]tobaco[/b]Спасибо!

  • Автор
    Сообщения
  • #13888

    arkonen
    Участник
    • Оффлайн

    Всех с новым годом . Товарищи помогите , подскажите как реализовать SNMP в AVR ? Или может статьи есть у кого то интересные где почитать можно ?

    #13933

    VladimirM
    Участник
    • Оффлайн

    Здравствуйте. В ATmega328P есть регистры OCR0B, OCR0A у меня вопрос, если будет установлен режим сброс при совпадении, а значения в регистрах будут разные, получается что счётчик не дойдёт до второго числа в регистре которого число больше и будет всё время сбрасываться, так как регистр TCNT0 один,а регистра сравнения (OCR0B,OCR0A) два! Так ли это? Как они работают?

    #14621

    arkonen
    Участник
    • Оффлайн

    Доброго времени суток , подскажите пожалуйста как можно безболезненно в AVR всунуть SNMP ?
    Может подскажите ссылки , ну или хотя бы направьте в нужное русло !

    #14623

    Ortos
    Участник
    • Оффлайн

    Доброе время суток.
    Подскажите пожалуйста как подключить точку через 74hc595 для часов.
    Спасибо.

    #14780

    Leonid
    Участник
    • Оффлайн

    Спасибо автору за его бескорыстную просвятительскую (надо сказать отлично выполненную) работу!

    Теперь, не совсем в тему, посмотрел на ваш урок в ютьюбе и честное слово, позавидовал работе вашего компьютера. Быстро, четко без задержек на внутренние задержки, даже при работе с «железом»! ВОПРОС, если не составит труда дайте конфигурацию вашего компа и операционной системы… Уж ОЧЕНЬ хочется такой же…

    #15095

    Selivanov
    Участник
    • Оффлайн

    Владимир, добрый день!
    Свой вопрос я хотел бы начать с благодарности: большое спасибо за канал! Ещё недавно будучи студентом универа,
    я смотрел Ваши и ролики и, скажем так, набирался ума. Само собой, это пошло на пользу, и дисциплину, связанную с
    программированием МК, я закрыл на хорошую оценку.
    Теперь непосредственно вопрос: у Вас есть очень интересный цикл уроков про микроконтроллер STM32 и сетевой чип W5500.
    Скажите, пожалуйста, реально ли Ваш код переставить на «рельсы» AVR? Я пытался переделать его самостоятельно (я хочу
    поднять простой UDP сервер), но у меня ничего не выходит. Не могли бы вы дать несколько советов, как инициализировать
    чип на AVR (я, в частности, использую Atmega32)? Я делаю практически всё то же самое, но не знаю, в чём может крыться
    ошибка (может быть, даже неправильно написана функция передачи по SPI). Помогите, пожалуйста, уже почти месяц
    бьюсь над этой проблемой. Если что, могу даже скинуть свой код.
    Спасибо. Каким бы ни был результат, я обещаю задонатить, так как считаю, что такие полезные ресурсы должны иметь поддержку.

    #15096

    Narod Stream
    Хранитель
    • Оффлайн

    Здравствуйте!
    А чип отзывается по SPI?

    #15099

    Selivanov
    Участник
    • Оффлайн

    Этого я не проверял. Я написал функцию пересылки данных по SPI, и начал писать в регистры W5500 необходимые данные: ip, mac, порт и всё остальное. У меня, к сожалению, самый простой программатор, без отладчика, поэтому отладить код не могу. Наверное, мне стоит попробовать прочитать эти данные, чтобы удостовериться, что они действительно доходят до места назначения, но я даже не уверен, что пересылку организовал правильно. Код привожу ниже:

    void w5500_writeReg(uint8_t op, uint16_t adress, uint8_t data)
    	{
    		//select_w5500();                //Функцию выбора SS закомментировал
    		SPDR = (adress>>8);              //Пересылаем старший байт адреса
    		while(!(SPSR & (1<<SPIF)));      //Ждём конца пересылка
    		SPDR = adress;                   //Пересылаем младший байт адреса
    		while(!(SPSR & (1<<SPIF)));
    		SPDR = op|(RWB_WRITE<<2);        //Применяем операцию "или" к опкоду и битом записи, сдвинутым на два бита
    		while(!(SPSR & (1<<SPIF)));
    		SPDR = data;                     //Передаём данные
    		while(!(SPSR & (1<<SPIF)));
    		//deselect_w5500();
    	}
    

    Функция чтения точно такая же, за исключением того, что я по-другому формирую опкод (op|(RWB_READ<<2) и в конце не пересылаю данные в SPDR, а возвращаю их (return SPDR). Если можно как-нибудь по-другому проверить работоспособность чипа, то я буду рад об этом узнать.

    #15100

    Narod Stream
    Хранитель
    • Оффлайн

    Проверьте отклик логическим анализатором

    #15749

    Yury
    Участник
    • Оффлайн

    В уроке 20, часть 2 есть небольшая ошибка: в нескольких функциях мы запрещаем прерывания, но нигде их не разрешаем…

    #15758

    SergeyVT
    Участник
    • Оффлайн

    Доброго времени суток, Narod Stream!Прошу разъяснить для меня простую вещь.
    В уроке про мигающий светодиод мы изучали побитовые операции И, ИЛИ, НЕ.Все вроде бы понятно.Но тут напрашивается вопрос, зачем Вы так усложнили код, тем более с обычным мигающим светодиодом?
    Ваш код
    #define F_CPU 8000000
    #include <avr/io.h>
    #include <util/delay.h>

    int main(void)
    {
    DDRD = 0xFF;
    PORTD = 0b00000000;
    while(1)
    {
    PORTD |= (1<<(PORTD0));
    _delay_ms(500);
    PORTD &= ~(1<<(PORTD0));
    _delay_ms(500);
    }
    }
    Мой код
    #define F_CPU 8000000// указываем частоту в герцах
    #include <avr/io.h>
    #include <util/delay.h>

    int main(void)// начало основной программы
    {
    DDRD = 0xFF;//Все выводы порта D будут сконфигурированы как выходы.
    PORTD = 0b00000000;//устанавливаем на всех ножках принудительно ноль(во избежание остаточного мусора в регистрах)
    while(1)
    {
    PORTD = 0b00000001;
    _delay_ms(500);//делаем задержку в пол секунды
    PORTD = 0b00000000;
    _delay_ms(500);//делаем задержку в пол секунды
    }
    }
    Хотя ведь можно было просто установить вот так как у меня и все так же работает.Если я не прав, то поясните в чем конкретно.Буду очень признателен.

    #15819

    tobaco
    Участник
    • Оффлайн

    [b]SergeyVT[/b]
    Потому что в данном случае:
    PORTD |= (1<<(PORTD0));
    затрагивается только ножка на которой висит светодиод, а в вашем случае вы явно задаете состояние всех ног порта, что верно, но в случае если на другие ножки вешать что-то еще, то ваш код все это отключит.

    #15828

    SergeyVT
    Участник
    • Оффлайн

    [b]tobaco[/b]Спасибо!

Просмотр 13 сообщений - с 16 по 28 (из 28 всего)

Для ответа в этой теме необходимо авторизоваться.