반응형

저는 티스토리 뿐만 아니라 네이버 블로그도 운영했고 요새 정신이 없어서 포스팅을 그만 둔 상태였습니다. 

오랜만에 네이버 블로그를 들어 갔는데 아래와 같이 네이버측에 경고를 받았습니다.

하나가 아니라 여러 글에 대해서 경고를 받음...

네이버 블로그 서로 이웃을 추가해주는 프로그램을 버전 별로 정리해서 포스팅했는데 그걸 전부 비공개 처리가 된 것.

작년에 만든 프로그램이지만, 만들어 놓은게 아까워서 티스토리에 올리기로 했습니다.

 

 

네이버 블로그 서로이웃 추가 프로그램 ver1.2

로컬을 찾아보니 초기 버전을 찾을 수 있었음.

QT를 이용해 오밀조밀하게 한 레이아웃에서 전부 처리할 수 있게 만들었었음.

저 때는 사용안하는 네이버 계정으로 테스트했던 것을 알 수 있음.

 

 

네이버 블로그 서로이웃 추가 프로그램 ver2.0


2.0 버전이 최종 버전인 것 같음.

코드를 살짝 분석해보니, 1.2 버전과 다른 것은 총 네 가지임.

1. 코드 간략화

목적은 잘 모르겠으나, 프로젝트의 기능들을 객체화 하여 코드를 간략화 시킴. 아무래도 새로운 기능들을 추가하고 유지보수를 위해 그런 것으로 보임.

2. GUI 변경

테스트를 위해 블로거들에게 한 번 사용해보라고 했을 때, 어려워 함. 설명하기 귀찮아서 GUI를 좀 더 순차적으로 만들고 간략화 한 것으로 보임.

 

3. 쓰레드 추가

1.2 버전을 돌려보니 네이버 매크로가 기동중 일 때는 GUI가 멈추는 현상이 발생하여 쓰레드를 추가해 GUI가 멈추는 것을 방지함.

4. 랜덤 딜레이 추가

매크로를 돌리다 보면 반복적인 동작과 동일한 시간을 네이버가 이를 매크로로 감지하기 때문에 랜덤으로 딜레이를 추가한 것으로 추측함.

 

데모 영상

https://www.youtube.com/watch?v=9MyQLyCm4Qo 

 

728x90
반응형
반응형

3080ti를 싸게 아는 분께 구해와서 교체한 사진이다. 

기존에 쓰던 그래픽 카드를 대신해서 3080ti를 교체했다.

어차피 내가 하는 게임은 오버워치 밖에 없기 때문에 솔직히 2060도 충분하다.

하지만 컴퓨터를 좋아하는 사람들은 장비를 업그레이드 하는 손맛 때문에 멈출 수 없다.

200Hz 모니터를 이제 360Hz로 바꾸는게 목표이다.

이유는 모르겠지만 결국 게임 사양에는 변화가 없지만 티어가 1티어씩 오르긴 했다... 

 

2060 그래픽 카드는 당근에서 판매할려고 했는데 어머니 컴퓨터에 달아드렸다.

생각보다 케이스가 작아서 그래픽 카드를 넣는데 애 좀 먹었다.

단점 : 그래픽 카드가 기존보다 너무 열을 많이 발생한다. 모니터를 바꾸지 않는 이상 3080ti로 바꾼 의미가 없다...

다음 떡값 받을 때 360Hz 모니터를 구매할 생각이다.

728x90
반응형
반응형

마이크로컨트롤러에서 사용할 수 있는 범용 입출력 핀의 수는 많지 않으므로 직렬 통신이 사용된다.

직렬 통신은 1개의 입출력 핀을 통해 8개 비트를 8번에 나누어 전송하는 방식이다.

직렬 통신 중 가장 흔히 사용되는 UART로 진행한다.

UART 통신은 전이중 통신으로 송신과 수신을 동시에 진행할 수 있으며 이를 위해서 2개의 범용 입출력 핀이 필요하다.

ATMega328(아두이노 우노 칩에서 사용되는)에서는 PD0 핀과 PD1 핀이 사용된다. (아두이노 우노는 0, 1핀이다.)

/*
 * UART_TEST.c
 *
 * Created: 2023-06-20 오후 8:46:56
 * Author : Yoon
 */ 
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>

void UART_INIT(void)
{
	UCSR0A |= (1 << U2X0);   // 2배속 모드
	
	UBRR0H = 0x00;           // 9600bps
	UBRR0L = 207;          
	
	UCSR0C |= 0x06;          // 비동기, 8bit 데이터, 1bit start, 1bit stop, no parity
	
	UCSR0B |= (1 << RXEN0);  // 수신 가능
	UCSR0B |= (1 << TXEN0);  // 송신 가능
}

unsigned char UART_receive(void)
{
	while(!(UCSR0A & (1 << RXC0)));  // 데이터 수신 대기
	return UDR0;
}

void UART_transmit(unsigned char data)
{
	while(!(UCSR0A & (1 << UDRE0)));  // 송신 가능 대기
	UDR0 = data;                      // 데이터 전송
}

int main(void)
{
	unsigned char data;
	
	UART_INIT();             // UART 통신 초기화
    while (1) 
    {
		data = UART_receive();   // 데이터 수신
		UART_transmit(data);     // 수신된 문자를 에코백
    }
	
	return 0;
}

UART 결과

1. UCSR0A(USART Control and Status Register 0A) 레지스터 : UART 통신의 제어와 상태 체크

UX20 : 비동기 전송모드에서만 사용되며, 2배속 모드이면 1, 1배속 모드이면 0의 값을 가진다.

RXC0 : 수신 버퍼(UDR0)에 읽지 않은 문자가 있을 때는 1이 되고, 버파가 비어 있을 때는 0이 된다. UCSR0B 레지스터의 RXCIE0 비트와 함께 사용되어 수신 완료 인터럽트를 발생시킬 수 있다.

UDRE0 : 송신 버퍼(UDR0)가 비어 있어 데이터를 받을 준비가 되어 있을 때 1이 된다. UCSR0B 레지스터의 UDRIE0 비트와 함께 사용되어 송신 데이터 레지스터 준비 완료 인터럽트를 발생시킬 수 있다.

2. UCSR0B

RXCIE0 : 수신 완료 인터럽트를 발생을 허용한다.

TXCIE0 : 송신 완료 인터럽트를 발생을 허용한다.

RXEN0 : UART 수신기의 수신 기능을 활성화한다.

TXEN0 송신기의 송신 기능을 활성화한다.

3. UCSR0C : 데이터 형식 및 통신 방법을 결정한다.

4. UBRR0H, HBRR0L : 보율을 12비트로 표현한다.

5. UDR0 : 송수신된 데이터가 저장되는 버퍼 레지스터

 

C:\Program Files (x86)\Atmel\Studio\7.0\packs\atmel\ATmega_DFP\1.7.374\include\avr

 

#include <stdio.h>
#include <stdint.h>

void printBinary(uint8_t value) {
  for (int i = 7; i >= 0; i--) {
    if ((value >> i) & 1)
      printf("1");
    else
      printf("0");
  }
  printf("\n");
}

int main(void) {
  uint8_t UCSR0A = 0b00000000;
  uint8_t U2X0 = 1;
  uint8_t RXC0 = 7;
  uint8_t UDRE0 = 5;
  
  printf("UCSR0A in binary: ");
  printBinary(UCSR0A);

  UCSR0A |= (1 << U2X0);
  printf("[init] UCSR0A in binary: ");
  printBinary(UCSR0A);

  UCSR0A = !(UCSR0A & (1 << RXC0));
  printf("[RX] UCSR0A in binary: ");
  printBinary(UCSR0A);

  UCSR0A = !(UCSR0A & (1 << UDRE0));
  printf("[TX] UCSR0A in binary: ");
  printBinary(UCSR0A);

  UCSR0A = UCSR0A & (1 << RXC0);
  printf("[RX] UCSR0A in binary: ");
  printBinary(UCSR0A);

  UCSR0A = UCSR0A & (1 << UDRE0);
  printf("[TX] UCSR0A in binary: ");
  printBinary(UCSR0A);
  
  return 0;
}

728x90
반응형
반응형

ISP 장치 : AVRISP-MKII (IOT-ISP-MK2)

https://www.devicemart.co.kr/goods/view?no=1386293 

 

AVRISP-MKII AVR프로그래머 [IOT-ISP-MK2]

ISP전용 AVR 프로그래머 / AVRISP MKII 호환 / MS-Windows7,8,10 지원 / 사이즈:16mm*69mm

www.devicemart.co.kr

해당 ISP 장치 드라이버 : 

https://www.wch.cn/download/CH341SER_ZIP.html

아트멜 스튜디오  설치 경로 :

https://www.microchip.com/en-us/tools-resources/develop/microchip-studio#Downloads

[File] - [New] - [Project]

GCC C Executable Project 

Name : HelloWorld

ATmega328P 선택

 

테스트 코드 : 1초에 한 번 씩 LED 점멸

/*
 * HelloWorld.c
 *
 * Created: 2023-06-18 오후 11:09:05
 * Author : Yoon
 */ 
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
	DDRB = 0x20;
    /* Replace with your application code */
    while (1) 
    {
		PORTB = 0x00;
		_delay_ms(1000);
		PORTB = 0x20;
		_delay_ms(1000);
    }
	
	return 1;
}

위 코드를 이용해 프로젝트를 빌드한다.

빌드 성공 시, HEX 파일(기계어 파일)이 생성됨. (경로)

C:\Users\Yoon\Documents\Atmel Studio\7.0\HelloWorld\HelloWorld\Debug

Device Programming에서 Program으로 보드에 업로드.

위 퓨즈의 값과 같이 설정해야 16MHz 외부 클럭을 사용함.

'Device Programming' 다이얼로그에서 'Memories' 탭을 선택하면 플래시 메모리에 업로드할 실행 파일에 기본적으로 ELF 파일이 선택되어 있음. ELF는 Executable and Linking Format의 약어로 아트멜 스튜디오에서 사용하는 avr-gcc에서 컴파일의 결과로 생성하는 파일 형식을 나타냄. avr-objcopy 프로그램은 생성된 ELF 파일을 읽어 최종 HEX 파일로 변환함.

 

728x90
반응형
반응형

아두이노 우노에 USB-Serail 대신 ISP 장치를 이용해 업로드를 할 예정임.

ISP 방식은 ISP 장치가 별도로 필요하며, C 스타일 프로그래밍으로 레지스터를 직접 제어할 수 있음.

리셋 핀으로 직접 연결하여 SP 통신 방식을 사용함.

아두이노는 ATmega328을 기본으로 만들어진 보드로, 8bit CPU를 포함하고 있으며, 핀 8개를 묶어서 포트 단위로 입출력이 행해짐.

ATMega328은 1MHz 내부 클럭이지만, 아두이노 우노 보드는 외부 클럭 16MHz 크리스털을 사용함.

보드 : 아두이노 우노 

프로그래머 :  AVRISP MKII 

ISP 장치는 AVRISP MKII를 사용함.

ISP장치로 업로드할 경우, USB-Serial 방식을 사용할 수 없으므로 주의할 것.

(다시 아두이노 방식을 사용하기 위해선 부트로더를 다시 올려야 함.)

728x90
반응형

'임베디드 > AVR' 카테고리의 다른 글

[AVR] 아두이노 우노 UART 통신하기  (0) 2023.06.20
아트멜 스튜디오 시작하기.  (0) 2023.06.18

+ Recent posts