пятница, 6 сентября 2024 г.

Профиль принтера FlyingBear Ghost 4 для Cura

При покупке принтера 5 лет назад, я взял G-code начала и окончания печати из инструкции принтера, приехавшего ко мне с AliExpress. Уже тогда удивился, что нигде в цифровом виде этой инструкции нет, чтобы можно было просто скопипастить код.

А сейчас с удивлением обнаружил, что в сети вообще очень мало информации по этой модели: по версиям Ghost 4S и 5 сколько угодно, а по 4 - нет.

Я установил Cura но новый комп, и там есть готовые настройки для 4S, но они не подходят для 4. Хорошо, что на другом компьютере у меня сохранились настройки - потому что бумажная инструкция неизвестно где.

Для всех, кто ищет настройки для FlyingBear Ghost 4 и не может найти, публикую их:




Start G-code

G21
G90
G28 X0 Y0
G28 Z0
G1 Z15.0 F1200
G92 E0
G1 E20 F200
G92 E0

End G-code

M104 S0

M106 S0

G91

G1 E-20 F300

G90

G1 Z200

G1 X0 Y0

M84



четверг, 17 февраля 2022 г.

Подключение к esp-12e (ESP8266) с помощью FTDI, отправка AT-комманд, подключение к роутеру

Что есть:

USB-serial конвертер: упоминался в предыдущих постах в блоге, там подробно описан

Wi-Fi модуль: esp-12e

Ноутбук: Dell под Ubuntu 16.04

Схема подключения

Ниже есть ссылка на статью с картинками для наглядности, но все просто. Два провода на GND, еще два на плюс, RX/TX и готово. Конкретно: контакты ESP8266 GND и GPIO15 (они рядом) подключаем к GND; VCC и EN (на некоторых моделях это CH_PD) подсоединяем к +3.3 V. Далее как обычно RX модуля подсоединяем к TX адаптера, а TX - к RX адаптера, перепутать невозможно.

Осторожно: 5 вольт убьет чип; у меня на FTDI адаптере есть джампер для переключения между 5 и 3.3 вольт - проверяю его каждый раз.

Коммуникация

Когда все провода подсоединены, подключаю FTDI адаптер в USB ноутбука - esp модуль один раз кратко мигает светодиодом.

Далее можно настроить Arduino IDE (об этом ниже) и отправлять команды через нее или обойтись терминалом и утилитой screen - для этого в терминале набираю команду:

screen /dev/ttyUSB0 115200

перед этим надо определить, по какому порту обращаться к FTDI (у меня это /dev/ttyUSB0).

Когда запустится screen ничего не будет - пустой экран. 

Команды надо отправлять так: набрал команду, нажал Enter, потом нажал Ctrl-J - после этого команда отправится на модуль, и должен прилететь ответ. Например такая последовательность:

AT[Enter][Ctrl-J]

в ответ модуль должен прислать "OK"

Ниже есть ссылка на видео Great Scott, как с помощью таких комманд можно подключиться к домашнему ротуеру. А вот скрин моей попытки подключиться, только сначала нужно переключиться в режим 3 (в видео про это есть).


Настройка Arduino IDE

  1. Установить из Ubuntu Software последнюю версию Arduino IDE (сейчас 1.8)
  2. Далее всё по видео (ссылка внизу): в настройках File/Preferences вставить в поле "Additional Board Managers URLs" адрес http://arduino.esp8266.com/stable/package_esp8266com_index.json и нажать Ок
  3. Установить плагин esp8266: в меню Tools/Board выбрать Board Manager, в открывшемся окне в поиске набрать "esp8266", в выпадающем списке выбрать последнюю версию
  4. В списке Tools/Board появится ESP8266 - там выбрать "Generic ESP8266 Module"
  5. Для проверки запустить Serial monitor (предварительно выбрав Tools/Port), выставить BaudRate 115200 внизу и в выпадающем списке "Both NL & CR", потом набрать вверху в строке команду "AT" и нажать Send - должен прийти ответ "OK".

Ссылки

Пример подключения к роутеру (начиная с 4:50)

Подключение проводов

Почему нужно заканчивать команды нажатием Enter и Ctrl-J

Подключение и прошивка ESP8266 из Arduino IDE

Робот на esp8266


среда, 22 декабря 2021 г.

UART print Atmega328p FTDI (FT232RL)

О подробностях подключения FTDI для прошивки и используемой модели см. предыдущий пост.

Пример отсюда: https://www.avrfreaks.net/forum/what-happens-if-you-read-udr0-multiple-times

Мой вариант, поменял F_CPU на 1000000UL и BAUD на 2400:

/*

 * GccApplication1.c

 *

 * To answer the question, "What happens when you read the UART's 

 * Data Register (UDR) multiple times?"

 * posed on AVRFreaks: 

 * https://www.avrfreaks.net/comment/3006581#comment-3006581

 *

 * Created: 05/10/2020 19:09:14

 * Author : awn

 */ 

#define F_CPU 1000000UL // Clock Speed


#include <avr/io.h>

#include <util/delay.h>


#define BAUD 2400

#define MYUBRR F_CPU/16/BAUD-1

void usart_init( uint16_t ubrr_val )

{

    // Set baud rate

    UBRR0 = ubrr_val;

    

    // Enable receiver and transmitter 

    UCSR0B = (1<<RXEN0) | (1<<TXEN0);

    

    // Set frame format: 8 data, 2 stop bit

    UCSR0C = (1<<USBS0) | (3<<UCSZ00);

}


void usart_txByte( uint8_t data )

{

    while ( !( UCSR0A & (1<<UDRE0) ) )

    {

        // Wait for empty transmit buffer 

    }


    // Put data into buffer, sends the data 

    UDR0 = data;

}


void usart_txString( char * string )

{

    while ( *string )

    {

        usart_txByte( (uint8_t)*string );

        ++string;

    }

}


int main(void)

{

    usart_init( MYUBRR );

    usart_txString( "Hello, ATmega328P XPlained Mini world\r\n" );

    

    while (1) 

    {

       while ( !(UCSR0A & (1<<RXC0)) )

       {

            // Wait for RXC

        }

        

        // At this point, RXC0 must be set - so there must be at least one byte to read from UDR0;

        // Read & display the UDR0 plus RXC0 and DOR0 (overrun) bits multiple times...

        

        usart_txString( "\r\nRXC0: " ); usart_txByte( (UCSR0A & (1<<RXC0)) ? '1' : '0' ); usart_txString( "; DOR0: " ); usart_txByte( (UCSR0A & (1<<DOR0)) ? '1' : '0' ); usart_txString( "; UDR0: " ); usart_txByte( UDR0);

        usart_txString( "\r\nRXC0: " ); usart_txByte( (UCSR0A & (1<<RXC0)) ? '1' : '0' ); usart_txString( "; DOR0: " ); usart_txByte( (UCSR0A & (1<<DOR0)) ? '1' : '0' ); usart_txString( "; UDR0: " ); usart_txByte( UDR0);

        usart_txString( "\r\nRXC0: " ); usart_txByte( (UCSR0A & (1<<RXC0)) ? '1' : '0' ); usart_txString( "; DOR0: " ); usart_txByte( (UCSR0A & (1<<DOR0)) ? '1' : '0' ); usart_txString( "; UDR0: " ); usart_txByte( UDR0);

        usart_txString( "\r\nRXC0: " ); usart_txByte( (UCSR0A & (1<<RXC0)) ? '1' : '0' ); usart_txString( "; DOR0: " ); usart_txByte( (UCSR0A & (1<<DOR0)) ? '1' : '0' ); usart_txString( "; UDR0: " ); usart_txByte( UDR0);

        usart_txString( "\r\nRXC0: " ); usart_txByte( (UCSR0A & (1<<RXC0)) ? '1' : '0' ); usart_txString( "; DOR0: " ); usart_txByte( (UCSR0A & (1<<DOR0)) ? '1' : '0' ); usart_txString( "; UDR0: " ); usart_txByte( UDR0);

        usart_txString( "\r\nRXC0: " ); usart_txByte( (UCSR0A & (1<<RXC0)) ? '1' : '0' ); usart_txString( "; DOR0: " ); usart_txByte( (UCSR0A & (1<<DOR0)) ? '1' : '0' ); usart_txString( "; UDR0: " ); usart_txByte( UDR0);

        usart_txString( "\r\n" );

        

        // Pause - allow the user to type some characters

        _delay_ms(3000);

    }

}

Файл makefile:

FILENAME = udr_multi_read

PORT = ft0

DEVICE = atmega328p

PROGRAMMER = ftdi

BAUD = 2400

COMPILE = avr-gcc -Wall -Os -mmcu=${DEVICE}


default: compile upload clean


compile:

${COMPILE} -c ${FILENAME}.c -o ${FILENAME}.o

${COMPILE} -o ${FILENAME}.elf ${FILENAME}.o

avr-objcopy -j .text -j .data -O ihex ${FILENAME}.elf ${FILENAME}.hex

avr-size --format=avr --mcu=${DEVICE} ${FILENAME}.elf


upload:

avrdude -v -p ${DEVICE} -c ${PROGRAMMER} -P ${PORT} -b ${BAUD} -U flash:w:${FILENAME}.hex:i


clean:

rm ${FILENAME}.o

rm ${FILENAME}.elf

rm ${FILENAME}.hex

В консоли запустил:

screen /dev/tty.usbserial-A50285BI 2400


Подключил FTDI: (MCU RXD -> TX, MCU TXD -> RX, MCU GND -> GND, MCU VCC -> VCC) и увидел в screen такой результат:

Первая строчка появилась как только подключил FTDI к atmega328p, стопка последующих записей - сразу после нажатия клавиши "y" на клавиатуре (в английской раскладке). Так и должна работать программа, если посмотреть в код: пишет приветствие, потом ждет получения информации на линии RX, и возвращает полученную информацию в линию TX --- судя по том, что выдает screen, передача информации работает: символ "y" дошел до чипа и успешно вернулся обратно. 

понедельник, 20 декабря 2021 г.

Программирование atmega328p с помощью китайского SparkFun FTDI из под mac-os

Система: Catalina (10.15.7)
Программатор FTDI с Ali-express, также описан в другом посте
Основано на видео-туториале: https://youtu.be/iKqLbbyPydI  с адаптацией под мой программатор FTDI

Подготовка

Установить VCP драйвера: https://ftdichip.com/drivers/vcp-drivers/

Выполнить команды:

brew tap osx-cross/avr

brew install avr-gcc

brew install avrdude


Создать файл ~/.avrduderc и прописать туда:

programmer
  id    = "ftdi";
  desc  = "SparkFun FTDI Basic Breakout";
  type  = "ftdi_syncbb";
  connection_type = usb;
  miso  = 1;  # RXD
  sck   = 3;  # CTS
  mosi  = 0;  # TXD
  reset = 4;  # DTR
;

Описание других программаторов, если потребуется, можно найти в
/usr/local/Cellar/avrdude/6.3_2/etc/avrdude.conf - там, в частности есть описание программаторов с id=ft232r и id=arduino-ft232r --- но ни один из них мне не подходит, потому что они предполагают использование ноги DSR или RTS которые на моем программаторе не выведены. Поэтому и приходится писать свой конфиг в файл ~/.avrduderc – мне это было проще, чем припаять провод к ноге RTS, например, и использовать стандартное описание c id=ft232r.


Подсоединить выходы RXD, CTS, TXD, DTR к ногам atmega328p соответственно: miso, sck, mosi, reset и ещё два провода: GND, VCC соответственно в GND и VCC микроконтроллера.

Код и makefile

Объяснение написанного ниже Часть, приведенная далее, отлично описана в указанном выше видео – очень рекомендую.
Пример простого файла blink.c, мигающего светодиодом, подсоединенным к 14-ой ноге:

#define F_CPU 16000000UL
#define LED_PIN 0

#include <avr/io.h>
#include <util/delay.h>

void main(void)
{
  DDRB |= (1 << LED_PIN);  // set pin as output
  while (1)
    {
      PORTB ^= (1 << LED_PIN);  // toggles pin
      _delay_ms(50);  // busy wait, 50ms
    }
}

Объяснение назначения и пользы от написания makefile хорошо сделано в указанном туториале https://youtu.be/iKqLbbyPydI – очень рекомендую. Расположив makefile в той же директории, что и blink.c и выполнив команду make из консоли, можно скомпилировать blink.c в пригодный для заливки на микроконтроллер формат .hex и сразу залить его на atmega328p – всего одной командой. Содержимое makefile:

FILENAME = blink
PORT = ft0
DEVICE = atmega328p
PROGRAMMER = ftdi
BAUD = 2400
COMPILE = avr-gcc -Wall -Os -mmcu=${DEVICE}

default: compile upload clean

compile:
${COMPILE} -c ${FILENAME}.c -o ${FILENAME}.o
${COMPILE} -o ${FILENAME}.elf ${FILENAME}.o
avr-objcopy -j .text -j .data -O ihex ${FILENAME}.elf ${FILENAME}.hex
avr-size --format=avr --mcu=${DEVICE} ${FILENAME}.elf

upload:
avrdude -v -p ${DEVICE} -c ${PROGRAMMER} -P ${PORT} -b ${BAUD} -U flash:w:${FILENAME}.hex:i

clean:
rm ${FILENAME}.o
rm ${FILENAME}.elf
rm ${FILENAME}.hex


Файл с этим содержимым надо назвать "makefile" (без расширения) и положить туда же, где лежит и файл blink.c; из консоли сделать cd в эту папку и выполнить там команду make.

Замечания

Значение порта PORT = ft0 у меня не зависит от того, к какому USB подключен программатор: пробовал втыкать в разные, прошивает микроконтроллер одинаково успешно. А когда, как рекомендовано в видео, указывал настоящий порт, то получал ошибку:

avrdude: invalid portname '/dev/cu.usbserial-A50285BI': use 'ft[0-9]+'

Объяснение причины подобной ошибки нашел тут: https://electronics.stackexchange.com/a/353586 - буквально так: avrdude нужно использовать libftdi чтобы получить контроль над выходами программатора, поэтому вместо порта из папки /dev/ ему нужно читать ft0, являющийся первым FTDI интерфейсом – как-то так, я если честно, не вникал, просто указал ft0 в качестве порта и все заработало (почему не ft1 или ft9? не знаю)

Значение BAUD важно, я использую BAUD=2400, потому что при BAUD=115200, как рекомендовано в видео получал следующую ошибку при выполнении make:

avrdude: Device is not responding to program enable. Check connection.

avrdude: initialization failed, rc=-1

         Double check connections and try again, or use -F to override

         this check.


наверное, это связано с тем, что FTDI-программатор не такой быстрый, как тот, что использовался в видео-туториале. Можете попробовать увеличить значение, но у меня при BAUD=4800 уже возникает ошибка верификации:

avrdude: verifying ...

avrdude: verification error, first mismatch at byte 0x0000

         0xff != 0x0c

avrdude: verification error; content mismatch


если вы видите что-то подобное (запись успешная, а при верификации ошибка), то возможно снижение BAUD поможет решить проблему.

Дисклеймер: фото привожу на всякий случай, потому что времени делать нормальную диаграмму нету.






среда, 25 марта 2020 г.

Управляем 3D принтером Flying Bear Ghost4 с компа

с помощью wi-fi плагина Ultimaker Cura (на macOS)

Система: macOS Catalina 10.15.3
Версия Ultimaker Cura: 4.5.0
Исходники плагина отсюда: https://github.com/miblooming/JZ-TS24-2/blob/master/other/FlyingBear_TS_WIFI/FlyingBearIntegration.zip

По идее все те же действия должны сработать и для Windows и Linux, отличаться будет только этап установки: путь к папке, где должен лежать плагин, будет другим: можете попробовать путь $HOME/.local/share/cura/4.5/plugins - не проверял, будет ли это работать, но в версии Cura 4.4 на Ubuntu 16.04 такая папка у меня есть.

Предварительно принтер надо подключить к локальной сети wi-fi
Далее выполнить следующие шаги:

1. Установить плагин

- распаковать скачанный архив с плагином, появится папка FlyingBearIntegration
- открыть в Finder папку Applications правой кнопкой кликнуть Ultimaker Cura и выбрать из меню "Show Package Contents", открыть папку Contents/Resources/plugins/plugins и положить папку FlyingBearIntegration туда.

2. Наладить плагин

Просто так он не заработает, видимо написан под старую версию Cura, поэтому нужно будет подправить:

- в папке FlyingBearIntegration открыть файл plugin.json и заменить его содержимое на следующее:

{
    "name": "FlyingBear Connection",
    "author": "Looming",
    "version": "1.0.0",
    "description": "Manager your FlyingBear printers via WIFI",
    "api": "7.1",
    "i18n-catalog": "cura"
}

- в файле PluginMain.py удалить строки с 311 по 315 включительно, они выглядят вот так:

        for i in range(0,model.rowCount()):
            if i<data_len:
                model.setItemData(model.createIndex(i,0), {0:'True',1:self.ip_list[i]})
            else:
                model.setItemData(model.createIndex(i,0), {0:'False',1:''})

вот их надо удалить, а то плагин будет выдавать ошибку, после которой Cura будет прекращать работу.

3. Подключить принтер

После этих действий в Ultimaker Cura в меню Extensions появится пункт FlyingBear/Manage Printers, по вызову которого нужно будет ввести IP адрес принтера в локальной WIFI сети (принтер покажет его на экране после подключения).

Полученные блага

Теперь можно манипулировать принтером прямо из приложения.


понедельник, 5 февраля 2018 г.

Прошивка ATTiny26L с помощью китайского SparkFun FTDI (с использованием avrdude на Ubuntu)

[Черновик]

Коротко


Такой программатор, USB mini b:

Такое подключение выводов платы к ATTiny26:
DTR => 10 (RESET)
RX  => 2  (MISO)
TX  => 1  (MOSI)
CTS => 3  (SCK)

Можно также запитать МК, подав 5V прямо с программатора (VCC => 5, GND => 6).

Инструкции подробно


Скачай avra assembler https://sourceforge.net/projects/avra/files/
Скомпилируй avra assembler: http://help.ubuntu.ru/wiki/programs_installation --- начни с bootstrap, если будет ругаться на отсутствие файлов (README, AUTHORS и т.п.) создай пустые файлы с этими именами.  Затем собери и установи пакет checkinstall'ом: https://habrahabr.ru/post/130868/

Установи avrdude

Ознакомься с предметной частью (прочитай про Bit Bang, подключи программатор, настрой avrdude.conf):

Настройку программатора не обязательно прописывать в avrdude.conf, можно прописать в ~/.avrduderc  Моя настройка:

programmer
  id    = "ftdi";
  desc  = "SparkFun FTDI Basic Breakout";
  type  = "ftdi_syncbb";
  connection_type = usb;
  miso  = 1;  # RXD
  sck   = 3;  # CTS
  mosi  = 0;  # TXD
  reset = 4;  # DTR
;

Последняя строка с точкой-с-запятой обязательна! Если нужно прописать другие номера ножек (DSR, DCD, RI и проч.), то можешь посмотреть нумерацию тут http://kmpu.ru/other/ft232rl_usb-programmator-avr/index.html или в Datasheet http://www.ftdichip.com/Support/Documents/AppNotes/AN232B-01_BitBang.pdf

Пропишись в нужные группы: https://askubuntu.com/a/800566

Запусти lsusb и убедись, что linux видит usb программатор:

vova@alex:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 413c:2501 Dell Computer Corp. 
Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Команда для проверки:

sudo avrdude -p t26 -c ftdi -F -U flash:r:"/home/vova/tmp/t26blink.hex":i -B 1400

эта команда скопирует программу, залитую на MCU.  Не забудь -B 1400, если работаешь с не очень быстрым MCU (см. мануал avrdude, а также http://www.avrfreaks.net/forum/avrdude-gives-diff-device-sigs-same-attinys и http://easyelectronics.ru/skorostnoj-avr-usb-programmator-na-ft232rl-bez-vspomogatelnogo-kontrollera.html). Результат ее запуска:

vova@alex:~$ sudo avrdude -p t26 -c ftdi -F -U flash:r:"/home/vova/tmp/t26blink.hex":i -B 1400

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.10s

avrdude: Device signature = 0x1e9109 (probably t26)
avrdude: reading flash memory:

Reading | ################################################## | 100% 7.79s

avrdude: writing output file "/home/vova/tmp/t26blink.hex"

avrdude: safemode: Fuses OK (E:FF, H:F7, L:E1)


avrdude done.  Thank you.


Кстати, для последующего дезассемблирования слитого с МК hex файла используй 

avr-objdump -m avr -D t26blink.hex

Взято отсюда: http://www.avrfreaks.net/comment/800129#comment-800129
Если нет такой программы, то надо установить binutils-avr

sudo apt install binutils-avr


среда, 15 июня 2016 г.

Установка пакета R xslx в Ubuntu

Возможные ошибки в ходе установки:

error: Cannot compile a simple JNI program

лечится так:
  1. установить переменные $JAVA_HOME and $PATH
  2. выполнить sudo R CMD javareconf
спасибо Fabio Ciotoli, (http://stackoverflow.com/a/23041950/1635919)


libjvm.so: cannot open shared object file: No such file or directory

Это ошибка при установке пакета rJava из списка зависимостей xlsx

лечится так :

Создать файл /etc/ld.so.conf.d/java.conf с содержимым:

/usr/lib/jvm/java-8-oracle/jre/lib/amd64
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server

java-8-oracle заменить на java-7-oracle, если у Вас версия отличается.

Выполнить sudo ldconfig, перезапустить процесс R (перезапустить RStudio) и снова попытаться установить xlsx.  (http://stackoverflow.com/a/25932828/1635919)

У меня больше ошибок не было и все установилось нормально.