04.04.2016, 09:45 | #11 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
Не получилось у меня прошится через rx/tx...
То ли я ресет не вовремя нажимаю, то ли лыжы не едут Ну да ладно, прошил UNO в ISP и через 4 проводка (MOSI MISO SCK Reset) залил в Mini следующий код: Код:
#include "defines.h" #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/sleep.h> #include "clunet.h" /* For remind pb2 - LED -10pin pb5 - control led pd3 - TX pd2 - RX */ void data_received(unsigned char src_address, unsigned char dst_address, unsigned char command, char* data, unsigned char size){ if (command==0x21){ if (data==1){ PORTB |= (1<< 2); } else { PORTB &= ~(1 << 2); } } } int main (void) { clunet_init(); clunet_set_on_data_received(data_received); sei(); DDRB = 0b00111110; // Порт B вход на ноге 0 выход на ногах 1-5, ноги 6,7 вход с кварца, не трогать. PORTB = 0x00; // отключаем подтягивающие резисторы while(1) { PORTB |= 1 << 5; _delay_ms(1000); PORTB &= ~(1 << 5); _delay_ms(1000); } } UPD. блин... у меня кажется pro mini на 3,3V.... Хотя на прием влиять не должно... но сам факт. Последний раз редактировалось Tohin; 04.04.2016 в 11:20. |
04.04.2016, 19:45 | #12 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
А шина то работает! кажется... Вставил моргание светодиодом на UNO при получении любого пакета.
Любой узел при инициализации отправляет в сеть сообщение "я живой": clunet_send(CLUNET_BROADCAST_ADDRESS, CLUNET_PRIORITY_MESSAGE, CLUNET_COMMAND_DEVICE_POWER_INFO, buffer, sizeof(buffer)); соответственно Uno моргает светодиодом.значит пакет приходит. значит я что-то накосячил в коде на получение, или на отправку. А как вывести переменную в СОМ-порт? В среде Ардуино есть функция Serial.println(var); WinAVR на такое ругается... Последний раз редактировалось Tohin; 04.04.2016 в 20:58. |
04.04.2016, 22:20 | #13 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: AVR (mega328p)
Цитата:
Написанный тобой выше код, легко компильнется IDE |
|
12.04.2016, 12:12 | #14 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
Да че-то не подумал... Спасибо за идею!
А как подключить clunet.h в скетч? АдуиноИДЕ ругается: Неверная библиотека найдена в D:\arduino-1.6.7\libraries\clunet: D:\arduino-1.6.7\libraries\clunet Ща попробую найти библиотеку Seral от ардуины и скопировать ее в WinAVR И все таки никак не могу понять нафига нужен бутлоадер в Mini. Без программатора ее прошить нельзя. А с программатором ее можно прошить без бутлоадера. Или он нужен только чтобы прошиться через COM а-ля max232? И без бутлоадера через COM не зальется? А как же заливается бутлоадер через USB-COM на UNO? Последний раз редактировалось Tohin; 12.04.2016 в 12:28. |
12.04.2016, 12:37 | #15 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: AVR (mega328p)
В библиотеке нужно добавить #include "Arduino.h"
Подробней Цитата:
DTR подключал? |
|
12.04.2016, 20:07 | #16 | ||
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
Цитата:
Цитата:
|
||
12.04.2016, 22:52 | #17 | |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
Я пока продолжу. При попытке скомпилить код под Ардуино Иде выдавало ошибки по ошибке типов.
Если ничего не путаю, то я переменную sw задавал как char. А функция clunet_send ожидает вместо нее массив. Подправил код и теперь все вижу: Код:
#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 pb3 - control led - llight when sw=1 pd3 - TX pd2 - RX D:\WinAVR-20100110\clunet-master\demo_sender_atmega328>D:\arduino-1.6.7\hardware\tools\avr/bin/avrdude -CD:\arduino-1.6.7\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -c arduino -PCOM31 -b115200 -D -U flash:w:clunet-demo.hex:i */ void data_received(unsigned char src_address, unsigned char dst_address, unsigned char command, char* data, unsigned char size) { PORTB |= (1 << PB2); // если что-то получили, включаем красный диод на выводе PB2 _delay_ms(200); //чтобы увидеть Serial.print("message from:"); Serial.print(src_address); Serial.print("\n\r"); PORTB &= ~(1 << PB2); // и гасим его } int main (void) { clunet_init(); clunet_set_on_data_received(data_received); sei(); Serial.begin(9600); Serial.print("I'm ready\n\r"); DDRB = 0b00111110; // Порт B вход на ноге 0 выход на ногах 1-5, ноги 6,7 вход с кварца, не трогать. PORTB = 0x00; // отключаем подтягивающие резисторы char needsend=1; char buffer[1]; buffer[0] = 1; char sw[1]; sw[0]=1; //на начальном этапе предполагем, что диод выключен, и его надо включить. Потом будем учить меня получать состояние с управляемого устройства clunet_send(CLUNET_BROADCAST_ADDRESS, CLUNET_PRIORITY_MESSAGE, CLUNET_COMMAND_DEVICE_POWER_INFO, buffer, sizeof(buffer)); while (1){ if (sw[0]==1){ PORTB |= (1<< 3); } else { PORTB &= ~(1 << 3); } 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[0]=!sw[0]; //в следующее нажатие нужно инвертировать комманду, не знаю можно ли так писать в C... _delay_ms(200); //боремся с дрябезгом? } // Ждем пока на выводе PDO лог. 1 if((PINB&(1 << PB0)) == 0&&needsend==0){ //кнопка отпущена, и ранее была отослана комманда needsend=1;// при следующем нажатии кнопки надо будет послать комманду. PORTB &= ~(1 << PB1); // выключаем контрольный диод на выводе PB1 } } } Цитата:
Кстати забавный глюк, avrdude из IDE не запускается, но если скопировать строку запуска в 'cmd' то все великолепно прошивается. |
|
13.04.2016, 11:22 | #18 | |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
Вспомнил, что где то валялся распаянный max232. откопал. подключил...
Uno прошилась на ура, после первого нажатия кнопки ресет (DTR не распаян, микруха залита термоклеем)... Pro mini отказывается.. Цитата:
|
|
13.04.2016, 12:08 | #19 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: AVR (mega328p)
Цитата:
|
|
13.04.2016, 18:48 | #20 | |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Re: AVR (mega328p)
наковырял LPT кабель от принтера...
Написал в avrdude.conf : Цитата:
Но все труды оказались бесполезными... Код:
Programmer Type : PPI Description : Direct AVR Parallel Access cable VCC = 3 BUFF = (not used) RESET = 1 SCK = 16 MOSI = 14 MISO = 10 ERR LED = (not used) RDY LED = (not used) PGM LED = (not used) VFY LED = (not used) avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x000102 avrdude: Expected signature for ATmega328P is 1E 95 0F avrdude: safemode: lfuse reads as 0 avrdude: safemode: hfuse reads as 0 avrdude: safemode: efuse reads as 0 avrdude: erasing chip avrdude: reading input file "0x3F" avrdude: writing lock (1 bytes): Writing | | 0% 0.00s ***failed; Writing | ################################################## | 100% 0.09s avrdude: 1 bytes of lock written avrdude: verifying lock memory against 0x3F: avrdude: load data lock data from input file 0x3F: avrdude: input file 0x3F contains 1 bytes avrdude: reading on-chip lock data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: verification error, first mismatch at byte 0x0000 0x00 != 0x3f avrdude: verification error; content mismatch avrdude: safemode: lfuse reads as 0 avrdude: safemode: hfuse reads as 0 avrdude: safemode: efuse reads as 0 avrdude: safemode: Fuses OK (H:00, E:00, L:00) avrdude done. Thank you. Думаю шнурок очень длинный (1,5м ) везде пишут, что не более 15см. |
|
Здесь присутствуют: 3 (пользователей: 0 , гостей: 3) | |
|
|