![]() |
|
|
#11 |
|
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1032 ![]() ![]() ![]() |
Не получилось у меня прошится через 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. |
|
|
|
|
|
#12 |
|
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1032 ![]() ![]() ![]() |
А шина то работает! кажется... Вставил моргание светодиодом на 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. |
|
|
|
|
|
#13 | |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Написанный тобой выше код, легко компильнется IDE |
|
|
|
|
|
|
#14 |
|
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1032 ![]() ![]() ![]() |
Да че-то не подумал... Спасибо за идею!
А как подключить 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. |
|
|
|
|
|
#15 | |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
В библиотеке нужно добавить #include "Arduino.h"
Подробней Цитата:
DTR подключал? |
|
|
|
|
|
|
#16 | ||
|
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1032 ![]() ![]() ![]() |
Цитата:
Цитата:
|
||
|
|
|
|
|
#17 | |
|
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1032 ![]() ![]() ![]() |
Я пока продолжу. При попытке скомпилить код под Ардуино Иде выдавало ошибки по ошибке типов.
Если ничего не путаю, то я переменную 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' то все великолепно прошивается. |
|
|
|
|
|
|
#18 | |
|
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1032 ![]() ![]() ![]() |
Вспомнил, что где то валялся распаянный max232. откопал. подключил...
Uno прошилась на ура, после первого нажатия кнопки ресет (DTR не распаян, микруха залита термоклеем)... Pro mini отказывается.. Цитата:
|
|
|
|
|
|
|
#19 | |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
|
|
|
|
|
|
|
#20 | |
|
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1032 ![]() ![]() ![]() |
наковырял 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см.
|
|
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|