2021년 12월 30일 목요일

라즈베리파이와 아두이노의 시리얼통신에 대한 전체적인 원리를 설명해주세요!!!!!!

 질문입니다.


1. 라즈베리파이와 아두이노의 시리얼통신에 대한 전체적인 원리를 설명해주세요!!!!!!



라즈베리파이보다 훨씬 빠른 데스크탑에서 보내는 시리얼이든
세계 최고 성능의 슈퍼컴퓨터에서 보내는 시리얼이든
아두이노에서 문제없이 처리합니다.
보레이트 9600bps는 정해진 비트 속도이며
이 처리속도보다 더 빠른 115200bps에서도 아두이노는 아무런 문제없이 처리를 합니다.
//
반대로 생각하세요
아두이노에서는 매 1바이트 수신마다 빠뜨리지 않고 꼬박 꼬박 처리를 할 수 있지만
라즈베리파이나 데스크탑 등 OS가 탑재된 애들은 망할 OS에서 제대로 처리를 하지 못해서
수신이벤트를 매 바이트마다 전달해주지 못합니다.
한가하면 1바이트에서 수신이벤트를 주기도 하지만
좀만 바쁘면 수십바이트 단위로 묶어서 이벤트를 전달하며
115200으로 데이터를 연속으로 쏘면
애들이 정신 못차리고 어플리케이션 창도 잘 못 움직일 정도로 버벅입니다.

정확한 타이밍에 맞춰서 처리를 해야하는 제어에서 PC등을 사용하지 못하고 아두이노나 AVR 같은 MCU를 사용하는 이유도 이 때문입니다.

리즈베리파이는 적은 용량의 소규모 리눅스가 포팅되고, 이런 용도로 사용 할 때에는 설치된 프로그램도 아주 적기 때문에
그나마 아두이노처럼 빠르게 처리할 수 있는 것처럼 보이는 겁니다.

쉬운 예를 하나 들어보죠
아두이노에서는 10us주기에서 1us HIGH 펄스를 정확하게 출력 할 수 있습니다.
이런 제어는 PC나 라즈베리파이에서는 할 수 없습니다.
PC나 레즈베리파이는 빠른 처리속도와 거대한 메모리를 바탕으로 많은 데이터의 처리및 연산 등을 고속으로 할 수 있지만 짧은 주기의 정확한 제어는 아두이노에 비해서 떨어집니다.
OS가 그런 용도에 적합하지 않도록 설계 되었기 때문입니다.

추가문의는 https://www.basic4mcu.com

2021년 12월 25일 토요일

ESP-07 arduino pinmap

 


programming 

1. RESET, GPIO0  ==> GND

2. RESET  ==> OPEN

3. GPIO  ==> OPEN

4. arduino program download

5.Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 1MB
Compressed 265104 bytes to 195084...
Writing at 0x00000000... (8 %)
Writing at 0x00004000... (16 %)
Writing at 0x00008000... (25 %)
Writing at 0x0000c000... (33 %)
Writing at 0x00010000... (41 %)
Writing at 0x00014000... (50 %)
Writing at 0x00018000... (58 %)
Writing at 0x0001c000... (66 %)
Writing at 0x00020000... (75 %)
Writing at 0x00024000... (83 %)
Writing at 0x00028000... (91 %)
Writing at 0x0002c000... (100 %)
Wrote 265104 bytes (195084 compressed) at 0x00000000 in 17.4 seconds (effective 122.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

6. Power Reset

Source ==================================================
/*
  ESP8266 BlinkWithoutDelay by Simon Peter
  Blink the blue LED on the ESP-01 module
  Based on the Arduino Blink without Delay example
  This example code is in the public domain

  The blue LED on the ESP-01 module is connected to GPIO1
  (which is also the TXD pin; so we cannot use Serial.print() at the same time)

  Note that this sketch uses LED_BUILTIN to find the pin with the internal LED
*/

#define LED_BUILTIN 5

int ledState = LOW;
unsigned long previousMillis = 0;
const long interval = 500;

int ledState1 = LOW;
unsigned long previousMillis1 = 0;
const long interval1 = 500;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(4, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      ledState = HIGH;  // Note that this switches the LED *off*
    } else {
      ledState = LOW;  // Note that this switches the LED *on*
    }
    digitalWrite(LED_BUILTIN, ledState);
    digitalWrite(4, ledState);
  }  
}

2021년 12월 16일 목요일

2021년 12월 11일 토요일

3 + 5

 2 + 1 + 3 + 8 = 14

날개가 있다면 나는데 쓰는데 좀 어떤가?




2021년 11월 11일 목요일

ATxmega-B1 XPLAINED: USART TUTORIAL

 XMEGA USART | Embedded Tutorials (wordpress.com)

































void init_usart()
{
PORTC_DIR|=0x08; //set the direction of PC3 i.e. TXD0 as output and PC2 i.e. RXD0 as input
USARTC0.BAUDCTRLB = 0x60 + (3269 >> 8);
USARTC0_BAUDCTRLA=3269 & 0x00FF;
//USARTC0.BAUDCTRLB = ((0x03 & 0xf0f) >> 0x08);
//USARTC0.BAUDCTRLB |= ((-4 & 0x0F) << 0x04);
//USARTC0_BAUDCTRLA=0xc5;

USARTC0_CTRLB|=USART_RXEN_bm|USART_TXEN_bm; 
USARTC0_CTRLC|=USART_CHSIZE1_bm|USART_CHSIZE0_bm;
USARTC0.CTRLA = USART_RXCINTLVL_LO_gc;
USARTC0.STATUS |= USART_RXCIF_bm; // 0x80  0b10000000
}



Baud rate calculator for ATxmega

 Baud rate calculator for Xmega (dolman-wim.nl)

ATxmega128a1u /* System Clock Output Port */

 /* System Clock Output Port */

typedef enum PORTCFG_CLKOUT_enum

{

    PORTCFG_CLKOUT_OFF_gc = (0x00<<0),  /* System Clock Output Disabled */

    PORTCFG_CLKOUT_PC7_gc = (0x01<<0),  /* System Clock Output on Port C pin 7 */

    PORTCFG_CLKOUT_PD7_gc = (0x02<<0),  /* System Clock Output on Port D pin 7 */

    PORTCFG_CLKOUT_PE7_gc = (0x03<<0),  /* System Clock Output on Port E pin 7 */

} PORTCFG_CLKOUT_t;


/* Peripheral Clock Output Select */

typedef enum PORTCFG_CLKOUTSEL_enum

{

    PORTCFG_CLKOUTSEL_CLK1X_gc = (0x00<<2),  /* 1x Peripheral Clock Output to pin */

    PORTCFG_CLKOUTSEL_CLK2X_gc = (0x01<<2),  /* 2x Peripheral Clock Output to pin */

    PORTCFG_CLKOUTSEL_CLK4X_gc = (0x02<<2),  /* 4x Peripheral Clock Output to pin */

} PORTCFG_CLKOUTSEL_t;

ATxmega clock Initialize the PLL

  /*

Initialize the PLL

-> 48 MHz output frequency

-> 32 MHz internal oscillator as input

*/

OSC.CTRL |= OSC_RC32MEN_bm;

while(!(OSC.STATUS & OSC_RC32MRDY_bm));

OSC.PLLCTRL = OSC_PLLSRC_RC32M_gc | 0x06;

OSC.CTRL |= OSC_PLLEN_bm;

while(!(OSC.STATUS & OSC_PLLRDY_bm));


CCP = CCP_IOREG_gc; 

CLK.CTRL = CLK_SCLKSEL_PLL_gc;

ATxmega clock Initialize the internal 32 MHz oscillator

  /*

Initialize the internal 32 MHz oscillator

*/

OSC.CTRL |= OSC_RC32MEN_bm;

while(!(OSC.STATUS & OSC_RC32MRDY_bm));

CCP = CCP_IOREG_gc;

CLK.CTRL = CLK_SCLKSEL_RC32M_gc;

ATxmega clock Initialize the internal 2 MHz oscillator

  /*

Initialize the internal 2 MHz oscillator

*/

OSC.CTRL |= OSC_RC2MEN_bm;

while(!(OSC.STATUS & OSC_RC2MRDY_bm));

CCP = CCP_IOREG_gc;

CLK.CTRL = CLK_SCLKSEL_RC2M_gc;

ATxmega clock Initialize the external crystal oscillator

  /*

Initialize the external crystal oscillator

*/

OSC_XOSCCTRL = OSC_XOSCSEL_XTAL_16KCLK_gc | OSC_FRQRANGE_12TO16_gc; 

OSC.CTRL |= OSC_XOSCEN_bm; 

while(!(OSC.STATUS & OSC_XOSCRDY_bm)); 

CCP = CCP_IOREG_gc; CLK.CTRL = CLK_SCLKSEL_XOSC_gc;



/*

Configure the output for the system clock

-> Port C.7

*/

PORTC.DIRSET = (0x01 << 0x07);

PORTCFG.CLKEVOUT |= PORTCFG_CLKOUT_PC7_gc;

2021년 2월 1일 월요일

instance

          Bitmap bmp = (Bitmap)mOriginal.Clone();

        ImageProcessor imgproc = new ImageProcessor(null, fileName, bmp.Size, false);
        imgproc.LinePreview = true;
        imgproc.LineDirection = ImageProcessor.Direction.Vertical;
        imgproc.PreviewVector(bmp);

        pictureBox1.Image = null;
        pictureBox1.Image = bmp;