Форум обсуждения оборудования  

Вернуться   Форум обсуждения оборудования "Умный дом" > Разное > Курилка

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2016, 09:45   #11
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 770
Вес репутации: 803
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию 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.
Tohin вне форума   Ответить с цитированием
Старый 04.04.2016, 19:45   #12
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 770
Вес репутации: 803
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию 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.
Tohin вне форума   Ответить с цитированием
Старый 04.04.2016, 22:20   #13
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,007
Вес репутации: 9205
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: AVR (mega328p)

Цитата:
А как вывести переменную в СОМ-порт?
В среде Ардуино есть функция Serial.println(var);
А почему ты не хочешь в Arduino IDE писать код?
Написанный тобой выше код, легко компильнется IDE
Admin вне форума   Ответить с цитированием
Старый 12.04.2016, 12:12   #14
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 770
Вес репутации: 803
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию 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.
Tohin вне форума   Ответить с цитированием
Старый 12.04.2016, 12:37   #15
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,007
Вес репутации: 9205
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: AVR (mega328p)

В библиотеке нужно добавить #include "Arduino.h"
Подробней

Цитата:
И все таки никак не могу понять нафига нужен бутлоадер в Mini. Без программатора ее прошить нельзя
Все прошивается, проверенно не однократно, возможно ты перепутал местами rx, tx
DTR подключал?
Admin вне форума   Ответить с цитированием
Старый 12.04.2016, 20:07   #16
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 770
Вес репутации: 803
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию Re: AVR (mega328p)

Цитата:
- Мастер, я запорол все детали, что вы мне дали.
- Как? Все?
- Да, все десять штук...
- Я ведь тебе девять давал?!!
- А я и образец запорол...
Сначала ArduinoIDE ругался на переменные clunet'a, а потом перестал работать avrdude при попытке залить стандартный скетч
Цитата:
java.io.IOException: Cannot run program "D:\arduino-1.6.7\hardware\tools\avr/bin/avrdude": CreateProcess error=193, %1 не является приложением Win32
Походу это тоже мне не по зубам...
Tohin вне форума   Ответить с цитированием
Старый 12.04.2016, 22:52   #17
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 770
Вес репутации: 803
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию 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
            }

     }
  
  
}
В терминале приходит:
Цитата:
I'm ready
message from:1
Буду ждать доставку usbasp, чтобы перешить Mini (там тоже надо поправить на массив)

Кстати забавный глюк, avrdude из IDE не запускается, но если скопировать строку запуска в 'cmd' то все великолепно прошивается.
Tohin вне форума   Ответить с цитированием
Старый 13.04.2016, 11:22   #18
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 770
Вес репутации: 803
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию Re: AVR (mega328p)

Вспомнил, что где то валялся распаянный max232. откопал. подключил...
Uno прошилась на ура, после первого нажатия кнопки ресет (DTR не распаян, микруха залита термоклеем)...
Pro mini отказывается..
Цитата:
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x60
Tohin вне форума   Ответить с цитированием
Старый 13.04.2016, 12:08   #19
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,007
Вес репутации: 9205
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: AVR (mega328p)

Цитата:
Pro mini отказывается
Возможно бутлодер слетел, ошибка тоже говорит о том что бутлодер не отвечает на запросы
Admin вне форума   Ответить с цитированием
Старый 13.04.2016, 18:48   #20
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 770
Вес репутации: 803
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию Re: AVR (mega328p)

наковырял LPT кабель от принтера...
Написал в avrdude.conf :
Цитата:
programmer
id = "dapa";
desc = "Direct AVR Parallel Access cable";
type = "par";
connection_type = parallel;
vcc = 3;
reset = 1;
sck = 16;
mosi = 14;
miso = 10;
;
подключил через резисторы 220 Ом. (не понял почему, но miso = 10; у меня соответствует 5й ноге разъема, очень долго пытался понять почему ничего не работает, но в итоге скачал прогу spidebug от создателя uniproof. там можно видеть состояние назначенного MSIO. и стал замыкать, по очереди, все контакты на землю. как пропала галочка на input - значит она)
Но все труды оказались бесполезными...
Код:
         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.
запускал с ключом -F т.к. Device signature не совпадает.
Думаю шнурок очень длинный (1,5м ) везде пишут, что не более 15см.
Tohin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 15:38. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика