반응형

 

 

 

 

 

NUCLEO-F746ZG 보들 사고 이제 테스트 해 본다.

Ethernet 부터 시작해 보았다. 우선은 UDP server 부터~

여기저기 블로그와 유튜브 자료를 검색해서 간단한 통신 완료.

 

 

Ping까지 되는 것을 확인하고 Hercules SETUP utility를 이용해서 연결.

통신까지 되는 것을 확인했다.

 

여기까지 하니 SW까지 하고 싶어져서...

C# UDP 자료를 검색하면서 간단히 만들어 보았다.

 

 

Echo server를 예제로 하여 구현했지만 약간 수정하여 1 >> a, 2 >> b 로 출력되도록 했다.

소스는 다음에 정리해야지~ ^^

STM32CubeMX, STM32CubeIDE 를 써 보았다.

여기서 지원하는 LwIP 적용 하였다.

 

 

 

 

 

728x90
반응형

'공부 > HW' 카테고리의 다른 글

211105 Cypress EZ USB GPIO 1  (0) 2021.11.05
211026 Lattice Diamond 설치  (0) 2021.10.27
210817 이탈리아형 전원 어뎁터  (0) 2021.08.18
210626 OrCAD Capture to PADS Layout import  (0) 2021.07.03
210626 PADS 부품 분산  (0) 2021.06.27
반응형

 

 

 

 

 

제품을 이탈리아에 수출할 일이 있어서 구매한 전원 어뎁터.

우리나라 전원 코드 끝에 연결하여 사용하면 된다.

이탈리아 전원이 이렇게 생겼는지도 이번에 처음 알았다.

 

그런데... 3개를 샀는데 그 중 1개가 불량.

그래서 교환을 했는데... 교환한 것도 불량.

접지가 되어야 하기에 접지 되는 것을 겨우 찾았는데... ㅡ.ㅡ;

 

 

접지 부분이 도통이 되지 않는다.

 

 

정상 제품은 위와 같이 도통이 된다.

 

제품 구매시 주의해야 하겠다.

 

참고) 구매한 제품명 

  SD-12A 전원변환 이탈리아 칠레 쿠바 돼지코 플러그 변환콘센트 (10~16A/250V)

 

 

 

 

 

 

 

 

728x90
반응형

'공부 > HW' 카테고리의 다른 글

211026 Lattice Diamond 설치  (0) 2021.10.27
210814 NUCLEO-F746ZG UDP Server  (0) 2021.08.19
210626 OrCAD Capture to PADS Layout import  (0) 2021.07.03
210626 PADS 부품 분산  (0) 2021.06.27
210324 멀티탭의 정격 사양 (AC250V 16A)  (0) 2021.03.25
반응형

 

 

 

 

 

OrCAD Capture에서 회로도를 그리고 

Netlist를 만든 다음

PADS Layout 에서 netlist 파일을 import 하여 artwork을 한다.

 

OrCAD Capture에서 Netlist는 pads2k.dll 을 선택하고 확장자 파일을 .ASC로 지정한다.

 

 

생성된 netlist는 아래와 같이 첫 줄이 *PADS2000* 으로 되어 있다.

 

 

이 파일을 PADS layout 에서 File - Import... 하면... (ex. PADS layout 9.5 버전)

 

Unspecified or unsupported version of ASCII file 의 경고 메시지가 뜬다. 

무시해도 되지만 찝찝해서 이것 조차 없애고 싶면 아래와 같이 한다.

 

*PADS2000* 을 아래의 것으로 대치한다.

!PADS-POWERPCB-V9.0-MILS-CP949! NETLIST FILE FROM PADS LOGIC V9.3

 

PADS Logic에서 netlist를 출력해 보면 제일 위에 이렇게 나오는데 이 부분을 복사한 것이다.

 

아래 링크의 내용에서 찾았다. ^^

 

 

ORCAD Capture to PADS Layout 하는 방법

회로는 ORCAD Capture CIS에서 그리고, Artwork은 PADS의 Layout에서 하는 방법을 기술한다...

blog.naver.com

 

예전에 알고 있었는데 몇 년만에 다시 아트웍을 해 보니 잊어 버렸었다.

이것을 자동으로 하는 프로그램도 만들었었는데... 잊어 버렸네... ㅡ.ㅡ;

 

그래서 간단히 이번에는 배치 파일을 만들었다.

 

P2KtoLower.bat
0.00MB

 

사용 방법은 

P2KtoLower xxx.ASC

를 하면 xxx_New.ASC 파일이 생성된다.

 

이 New 파일로 import를 하면 경고 메시지는 나오지 않는다. ^^

 

 

 

 

 

 

 

728x90
반응형

'공부 > HW' 카테고리의 다른 글

210814 NUCLEO-F746ZG UDP Server  (0) 2021.08.19
210817 이탈리아형 전원 어뎁터  (0) 2021.08.18
210626 PADS 부품 분산  (0) 2021.06.27
210324 멀티탭의 정격 사양 (AC250V 16A)  (0) 2021.03.25
210316 Serial EEPROM CAT24C32 (Byte read)  (0) 2021.03.23
반응형

 

 

 

 

 

PADS 부품 분산 방법

 

Netlist를 import 하면 부품들이 모두 모여 있다.

 

 

이대로 하나씩 찾아서 배치할 수도 있지만 보기 쉽게 하기 위해서 분산한다.

 

Tool - Disperse Component 

 

 

오랜만에 아트웍을 해 보니 기억이 나지 않아서 다시 찾아서 기록해 둔다. ^^

 

 

 

 

 

 

 

728x90
반응형
반응형

 

 

 

 

 

멀티탭에 전원을 많이 쓰는 장비들을 많이 물릴 경우가 있어서

멀티탭이 어느 정도 전류까지 사용할 수 있는지 전류 사양을 알아 보았다.

 

회사에 사용하는 구형 멀티탭으로 확인.

 

 

AC 250V 15A 라고 나와 있다.

검색해 보니 최근 멀티탭 들은 거의 AC 250V 16A 이다.

주의할 것은 개별이 아니라 전체 합한 용량이다.

이것 처럼 가끔 용량이 다른 멀티탭이 있으니 잘 확인해서 사용하자.

 

 

그리고 2,800 W 이하로 사용하라고 되어 있다.

6구 멀니탭 전체 사용 용량이 2,800 W 이하여야 한다.

 

 

가전제품과 장비들 전력사양을 잘 보고 같이 사용해야 하겠다.

 

더 자세한 내용은 아래 링크에 잘 나와 있다.

 

m.blog.naver.com/kwshop88/220303971626

 

10A와 16A, 멀티탭의 핵심은 케이블입니다. 그 다음이 접지 기능이구요.

오늘은 멀티탭 공부를 해보겠습니다. 멀티탭을 크게 두 부분으로 나누면 케이블, 콘센트 부분으로 나눌 수 ...

blog.naver.com

 

 

 

 

 

 

728x90
반응형
반응형

 

 

 

Serial EEPROM CAT24C32 (32kbit)

STM32F103을 이용한 I2C Byte read 기능 구현.

 

환경) Compiler : System Workbench, CMSIS library

 

Sequence는 아래를 참조하여 구현한다.

 

 

구현한 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
int EEPROM_i2c_readByte(uint8_t slaveAddr, uint16_t regAddr, uint8_t * retByte) {
 
    I2C_AcknowledgeConfig(I2C2, ENABLE);
 
    I2C_GenerateSTART(I2C2, ENABLE);
 
    int timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT)) {
        if((timeout--== 0) {
            return -1;
        }
        delay_us(1);
    }
 
    I2C_Send7bitAddress(I2C2, slaveAddr, I2C_Direction_Transmitter);
 
    timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) {
        if((timeout--== 0) {
            return -2;
        }
        delay_us(1);
    }
 
    // Register Address 15-8
    I2C_SendData(I2C2, (uint8_t)((regAddr >> 8& 0x00FF));
 
    timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) {
        if((timeout--== 0) {
            return -3;
        }
        delay_us(1);
    }
 
    // Register Address 7-0
    I2C_SendData(I2C2, (uint8_t)(regAddr & 0x00FF));
 
    timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) {
        if((timeout--== 0) {
            return -4;
        }
        delay_us(1);
    }
 
    I2C_GenerateSTART(I2C2, ENABLE);
 
    timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT)) {
        if((timeout--== 0) {
            return -5;
        }
        delay_us(1);
    }
 
    I2C_Send7bitAddress(I2C2, slaveAddr, I2C_Direction_Receiver);
 
    timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) {
        if((timeout--== 0) {
            return -6;
        }
        delay_us(1);
    }
 
    timeout = I2C_TIMEOUT;
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED)) {
        if((timeout--== 0) {
            return -7;
        }
        delay_us(1);
    }
 
    *retByte = I2C_ReceiveData(I2C2);
 
    I2C_AcknowledgeConfig(I2C2, DISABLE);
 
    I2C_GenerateSTOP(I2C2, ENABLE);
 
    timeout = I2C_TIMEOUT;
    while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY)) {
        if((timeout--== 0) {
            return -8;
        }
        delay_us(1);
    }
 
    delay_us(100);
 
    return 0;
}
 
 
void delay_us(int us)
{
    volatile u32 i;
 
    for(i = us; i > 0; i--// 72clock = 1us
    {
        asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
        asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
        asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
        asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
        asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
        asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
        asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
        asm("nop"); asm("nop");
    }
}
 
 
// Use example
uint8_t addr = 0xA0;    // Device address
uint8_t value = 0;
int  targetaddr = 0x00;
EEPROM_i2c_readByte(addr, targetaddr, &value);
 
cs

 

 

 

 

 

728x90
반응형

'공부 > HW' 카테고리의 다른 글

210626 PADS 부품 분산  (0) 2021.06.27
210324 멀티탭의 정격 사양 (AC250V 16A)  (0) 2021.03.25
210318 C data types (C99 Standard)  (0) 2021.03.18
210316 Serial EEPROM CAT24C32 (I2C 펌웨어)  (0) 2021.03.17
210316 Serial EEPROM CAT24C32  (0) 2021.03.16
반응형

 

 

 

 

 

STM32F103을 System Workbench compiler에서 코딩을 하다가 변수 타입이 궁금해서 확인해 보았다.

int8_t, int16_t, int32_t 등등...

변수명만 보아도 어떤 내용인지 잘 알겠는데 이것이 어디에 정의되어 있는 것일까?

 

아래의 위키에 이 내용이 아주 잘 설명되어 있다.

 

en.wikipedia.org/wiki/C_data_types

 

C data types

In the C programming language, data types constitute the semantics and characteristics of storage of data elements. They are expressed in the language syntax in form of declarations for memory locations or variables. Data types also determine the types of

en.wikipedia.org

 

The C99 standard includes definitions of several new integer types to enhance the portability of programs.

 

C99 표준에 이 새로운 타입의 정의가 포함되어 있다.

 

 All new types are defined in <inttypes.h> header (cinttypes header in C++) and also are available at <stdint.h> header (cstdint header in C++). The types can be grouped into the following categories:

 

inttypes.h 와 stdint.h 에 정의되어 있다고 하니 찾아봐도 되겠다.

 

intn_t : 정확한 너비의 integer type으로 n 비트와 같은 수의 정확한 너비를 보장한다.

나머지는 아래 내용 참고.

 

포인터형도 정의되어 있다. 

각 데이터 타입에 대해 MIN, MAX 값도 정의되어 있으니 참고하자. 

 

  • Exact-width integer types that are guaranteed to have the same number n of bits across all implementations. Included only if it is available in the implementation.
  • Least-width integer types that are guaranteed to be the smallest type available in the implementation, that has at least specified number n of bits. Guaranteed to be specified for at least N=8,16,32,64.
  • Fastest integer types that are guaranteed to be the fastest integer type available in the implementation, that has at least specified number n of bits. Guaranteed to be specified for at least N=8,16,32,64.
  • Pointer integer types that are guaranteed to be able to hold a pointer. Included only if it is available in the implementation.
  • Maximum-width integer types that are guaranteed to be the largest integer type in the implementation.

The following table summarizes the types and the interface to acquire the implementation details

(n refers to the number of bits : n이 비트 수 이다.):

 

 

 

 

 

 

 

728x90
반응형
반응형

 

 

 

 

 

 

Serial EEPROM CAT24C32를 I2C interface로 STM32F103를 이용하여 제어.

Compiler는 System WorkbenchCMSIS library를 사용.

 

Byte Write를 우선 구현. Sequence는 아래와 같다.

 

 

 

I2C 설정 부터 한다.

 

아래의 순서로 구현.

1. IO 설정.

2. I2C 초기화.

3. Serial EEPROM Byte write sequence 구현. 

 

아래의 코드 참고

1. IO 설정.

1
2
3
4
5
6
7
8
9
10
11
GPIO_InitTypeDef GPIO_InitStructure;
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 
// PORTB
// Alternate Output Push Pull
GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_AF_OD;
GPIO_InitStructure.GPIO_Pin    = PIN_I2C_SCL | PIN_I2C_SDA;
GPIO_Init(GPIOB, &GPIO_InitStructure);
 
cs

 

2. I2C 초기화.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void hal_i2c_init() {
    I2C_DeInit(I2C2);
 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
 
    I2C_InitTypeDef i2c_initStruct;
    I2C_StructInit(&i2c_initStruct);
 
    i2c_initStruct.I2C_Mode = I2C_Mode_I2C;
    i2c_initStruct.I2C_DutyCycle = I2C_DUTYCYCLE;
    i2c_initStruct.I2C_ClockSpeed = I2C_SPEED;
 
    I2C_Init(I2C2, &i2c_initStruct);
 
    I2C_Cmd(I2C2, ENABLE);
}
 
cs

 

3. Serial EEPROM Byte write sequence 구현. 

Device address는 0xA0로 하였다. A2, A2, A0에 모두 0 연결

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
int hal_i2c_writeByte(uint8_t slaveAddr, uint16_t regAddr, uint8_t byte) {
 
    I2C_AcknowledgeConfig(I2C2, ENABLE);
 
    I2C_GenerateSTART(I2C2, ENABLE);
 
    int timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT)) {
        if((timeout--== 0) {
            // Error
            return -1;
        }
        delay_us(1);
    }
 
    I2C_Send7bitAddress(I2C2, slaveAddr, I2C_Direction_Transmitter);
 
    timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) {
        if((timeout--== 0) {
            // Error
            return -2;
        }
        delay_us(1);
    }
 
    // Register Address 15-8
    I2C_SendData(I2C2, (uint8_t)((regAddr >> 8& 0x00FF));
 
    timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) {
        if((timeout--== 0) {
            // Error 
            return -3;
        }
        delay_us(1);
    }
 
    // Register Address 7-0
    I2C_SendData(I2C2, (uint8_t)(regAddr & 0x00FF));
 
    timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) {
        if((timeout--== 0) {
            // Error
            return -4;
        }
        delay_us(1);
    }
 
    I2C_SendData(I2C2, byte);
 
    timeout = I2C_TIMEOUT;
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) {
        if((timeout--== 0) {
            // Error
            return -5;
        }
        delay_us(1);
    }
 
    I2C_GenerateSTOP(I2C2, ENABLE);
 
    timeout = I2C_TIMEOUT;
    while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY)) {
        if((timeout--== 0) {
            // Error
            return -6;
        }
        delay_us(1);
    }
 
    delay_us(100);
 
    return 0;
}
 
 
cs

 

 

 

 

 

728x90
반응형

+ Recent posts