31.03.2016, 20:42 | #1 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
AVR (mega328p)
Ну по аналогии с соседней темой про буйлдрут (но надеюсь с более ощутимым результатом) хочу по обсуждать программирование и прошивку AVR.
Исходные данные: К одной ардуине (UNO схема) прицеплена кнопка. ко второй арудине (promini) прицеплен светодиод. Задача: При нажатии кнопки сведодиод должен поочередно загораться и гаснуть. Связь между дуинами через Cluenet. Вопросы для начала:
Последний раз редактировалось Tohin; 31.03.2016 в 20:44. |
31.03.2016, 21:22 | #2 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: AVR (mega328p)
1-Нельзя будет прошить через USB, только программатором
2-Если прошивать через бутлодер , то не нужно 3-Как обычно в инете куча инструкций а-можно если обе ардуины посадить на reset b-если бутлодер жив то можно прошивать через UART c-если к полноценному COM подключать то нужна |
31.03.2016, 21:33 | #3 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
У Клюнета свой бутлоадер. Если я затру ардуиновский то UNO будет шиться через ch340G? LPT?
|
31.03.2016, 21:49 | #4 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: AVR (mega328p)
Цитата:
|
|
01.04.2016, 09:48 | #5 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
А разве lpt не програматор?
|
01.04.2016, 10:27 | #6 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: AVR (mega328p)
На самом деле шиться можно чем угодно, если есть софт для прошивки
Например можно сделать программатор из USB-UART моста FTDI или из той же ардуины |
03.04.2016, 14:25 | #7 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
Мой первый блин...
передачу данных не проверял, но лампочками моргает не так как я задумал... Код:
#include "defines.h" #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/sleep.h> #include "clunet.h" /* For remind pb0 - button whith +5V on press pb1 - control led - light when button active pb2 - eror led pd3 - TX pd2 - RX */ void data_received(unsigned char src_address, unsigned char dst_address, unsigned char command, char* data, unsigned char size) { } int main (void) { clunet_init(); clunet_set_on_data_received(data_received); sei(); DDRB = 0b00111110; // Порт B вход на ноге 0 выход на ногах 1-5, ноги 6,7 вход с кварца, не трогать. PORTB = 0x00; // отключаем подтягивающие резисторы char needsend=1; char buffer[1]; buffer[0] = 1; signed char sw=1; //на начальном этапе предполагем, что диод выключен, и его надо включить. Потом будем учить меня получать состояние с управляемого устройства clunet_send(CLUNET_BROADCAST_ADDRESS, CLUNET_PRIORITY_MESSAGE, CLUNET_COMMAND_DEVICE_POWER_INFO, buffer, sizeof(buffer)); while (1){ if ((PINB&(1 << PB0)) == 1&&needsend==1) { PORTB |= (1 << PB1); // включаем контрольный диод на выводе PB1 clunet_send(1,CLUNET_PRIORITY_COMMAND,0x21,sw,strlen(sw)); // В моем представлении эта комманда оптравляет на устройство 1 комманду под номером 33 с одержимым 'sw' - 1 или 0, которые включают или выключают диод needsend=0;// пока не отпустим кнопку, больше слать не надо sw=!sw; //в следующее нажатие нужно инвертировать комманду, не знаю можно ли так писать в C... _delay_ms(200); //боремся с дрябезгом? } // Ждем пока на выводе PDO лог. 1 if((PINB&(1 << PB0)) == 0&&needsend==0){ //кнопка отпущена, и ранее была отослана комманда needsend=1;// при следующем нажатии кнопки надо будет послать комманду. PORTB &= ~(1 << PB1); // выключаем контрольный диод на выводе PB1 } else{ //что-то пошло не так PORTB |= (1 << PB2); // включаем красный диод на выводе PB2 _delay_ms(500); // чтоб увидеть это#define PORTB &= ~(1 << PB2); // и гасим его в надежде, что в следующем цикле ошибок не будет. } } } А я правильно прочитал что в С-ях нету elseif? ну по аналогии с пхп... UPD: Перечитал код... посмотрел на диоды, потыкал кнопочку.. стало понятнее. Итак "симптомы": "аварийный" диод горит постоянно - логично При нажатии кнопки загорается контрольный диод. бывают лаги, когда попадаю на delay. потом кратковременно гаснет "аварийный диод". Контрольный диод гаснет только при отпускании кнопки. Надо приниматься за программатор для promini и принимающую программу. Последний раз редактировалось Tohin; 03.04.2016 в 14:54. |
03.04.2016, 14:46 | #8 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: AVR (mega328p)
Цитата:
|
|
03.04.2016, 17:37 | #9 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
А если я подключу ProMini к разъемам UNO - 0(RX) и 1(TX) (выведены с ch340g)
При этом замкну Reset на +5, чтобы предотвратить перешивку набортной mega. а ProMini сброшу вручную. Я прошьюсь? или это все бред дилетанта? |
03.04.2016, 20:14 | #10 | ||
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: AVR (mega328p)
Цитата:
Цитата:
Как вариант можно купить на алике дешевый программатор USBASP Им можно бутлоадеры без определенных знаний , прямо и Arduino IDE прошивать |
||
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|