마이크로 컨트롤러에 UART가 없으므로 어떻게 추가 할 수 있습니까?


13

4 개의 배터리를 직렬로 연결하여 한 번에 하나씩 사용할 수있는 셀 밸런싱 기능이 있는 ATMEGA32HVB 마이크로 컨트롤러를 사용하고 있습니다. 전원 관리에 매우 유용하므로 다른 마이크로 컨트롤러를 사용할 수 없습니다. 직렬 장치에 쉽게 인터페이스 할 수 있도록 UART를 추가하는 방법을 제안하십시오.


11
user26129가 설명한대로 소프트웨어 UART 방식을 비트 뱅잉 이라고 합니다.
Johan.A

4
매우 주관적인 $ 0.02이지만, 일반적으로 별도의 전용 배터리 컨트롤러와 uC 통합 UART를 선호합니다. uC에 통합 된 배터리 관리가 필요한 이유는 무엇입니까?
Mels

태양 전지판을 사용하여 충전되는 충전식 배터리를 사용해야하므로 한 번에 하나씩 사용할 배터리 4 개가 필요합니다
user27475

4
한 가지 질문은 UART를 얼마나 사용하고 싶은지, 어느 방향으로 하는가입니다. 가끔씩 디버그 또는 상태 메시지를 생성하려는 경우 프로세서의 추가 요구가 적을 때 비트 뱅킹 직렬 출력이 매우 매력적으로 보일 수 있습니다. 입력 채널을 갖는 평균 부하를 줄일 수있는 핀 변환 인터럽트 사용과 같은 틱이 있지만 다른 실시간 커밋이있을 때 높은 전송 속도로 문자를 수신 할 것으로 예상되는 경우 이슈.
Chris Stratton

답변:


17

다른 사람들이 지적했듯이 UART 기능을 제공하기 위해 시스템에 추가 하드웨어를 추가하거나 소프트웨어에서 하드웨어를 에뮬레이션 할 수 있습니다. 전체 하드웨어 디자인을 제어하고 다른 IC를 추가하는 것이 옵션이라면 하드웨어 기반 접근 방식을 강력히 고려할 것입니다. bit-banging을 사용하여 소프트웨어 UART를 작동시킬 수는 있지만 필요한 타이밍을 생성하기 위해 CPU 리소스를 전용으로 사용하지 않을 수도 있습니다.

데이터 시트를 보면 마이크로 컨트롤러에는 SPI와 I2C (Atmel이 TWI (Two-Wire Interface)라고 함)가 모두있는 것으로 보입니다. 이들은 아마도 외부 UART를 연결하기 위해 사용할 수있는 가장 좋은 인터페이스 일 것입니다. 상기 장치는 다수의 제조사로부터 입수 가능하다. 몇 가지 예 :

  • Exar ( http://www.exar.com/connectivity/uart-and-bridging-solutions/i2c-spi-uarts )에는 ~ 1.6-를 포괄하는 SPI / I2C 1 및 2 채널 UART 장치 라인이 있습니다 3.3V 작동 범위. 나는 이러한 부분을 특별히 사용하지는 않았지만 과거에는 병렬 메모리 버스 인터페이스와 함께 Exar 장치를 사용했으며 잘 작동했습니다.

  • NXP ( http://ics.nxp.com/products/bridges/i2c.spi.slave.uart.irda.gpio/ )에는 SPI / I2C UART / IrDA / GPIO 장치 라인이 있으며 1 및 2에서도 사용 가능합니다. 몇 가지 전압 범위에 대한-채널 종류. 나는 과거에이 부분들 (특히 SC16IS762)을 광범위하게 사용 해왔다.

  • Maxim ( http://www.maximintegrated.com/datasheet/index.mvp/id/2052 )에는 SPI 연결 UART 인 MAX3110E 및 MAX3111E 디바이스가 있습니다. 이 장치의 고유 한 기능 중 하나는 RS-232 라인 드라이버가 통합되어 있다는 것입니다. 따라서 로직 레벨 (예 : PC) 대신 RS-232 라인 전압을 사용하는 장치에 인터페이스하기 위해 UART가 필요한 경우 보드에 다른 라인 드라이버 IC를 추가하지 않아도되므로 유용 할 수 있습니다.


와우, 맥심이 그런 아이템을 가지고 있다는 것을 전혀 몰랐다.
Tevo D


8

소프트웨어 UART 드라이버를 사용해야합니다. 이 UART에서 기대하는 바에 따라 AVR305 (초소형이지만 반이중 전송 / 수신 차단 이외의 기능은 없음), AVR274 (인터럽트 구동, 상당히 완전한 기능)를 사용할 수 있으며, 고유 한 소프트웨어 UART 드라이버를 작성할 수 있습니다. 인터넷에서 찾은 것을 사용할 수 있습니다 (예 : 인터넷 검색 'avr software uart')


3

소프트웨어 "UART"디자인에 대한 간단한 참고 사항 : 요구 사항에 따라 최소한 질적으로 다르게 접근 할 수있는 방법이 있습니다.

  • "모든 것을 인계"하는 비트 뱅 드라이버는 모든 인터럽트를 비활성화하고 사이클 카운트 코드를 사용하여 각 비트를 클럭합니다. "모든 것을 인계"드라이버를 사용하여 데이터를 수신하려면 데이터가 도착할 때 컨트롤러가 대기 중일뿐입니다.

  • "메인 루프 인계"비트 뱅 드라이버는 사이클 카운팅이 아닌 비트 타이밍에 타이머 리소스를 사용한다는 점을 제외하면 위와 비슷하게 동작합니다. 서비스에 너무 오래 걸리지 않은 인터럽트는 활성화 된 상태로 남아있을 수 있습니다. 직렬 전송의 경우, 고정 속도 타이머 자원은 다른 목적과 공유 될 수있다. 그러나 직렬 수신의 경우 비트 뱅 드라이버는 시작 비트가 도착할 때 타이머를 다시로드하여 각 수신 비트 시간의 중간에 만료되도록해야합니다.

  • 완전 인터럽트 구동 비트 뱅 드라이버는 고정 속도 타이머를 사용하여 데이터 속도의 일부 배수 (3 배와 5 배가 모두 4 배보다 낫다)로 실행되며 해당 타이머를 통해 모든 것을 수행합니다. 이러한 드라이버는 다른 모든 장치와 동시에 실행될 수 있지만 이전 드라이버 유형에 필요한 것보다 더 빠른 CPU가 필요합니다.

컨트롤러의 처음 두 가지 스타일이 절대로 올 수없는 데이터를 기다리지 않도록하려면 읽기 루틴에 시간 종료 값을 포함시키는 것이 일반적입니다. 만약 컨트롤러의 루프가 예를 들어 "100ms까지 기다리는 동안 바이트를 얻는다면, 아무것도 없으면 다른 일을하고 다음 바이트를 얻는다"등을 참고하십시오. "get"루틴이 시간 종료 된 시간과 컨트롤러가 다시 대기하기 시작하는 시간 사이에 바이트가 도착하면 해당 바이트가 손실됩니다. 통신하는 장치가 그 가능성을 예상해야합니다.

세 번째 스타일의 드라이버 만이 데이터 바이트가 전송되는 동안 데이터 바이트가 도착하기 시작하는 가능성을 처리 할 수 ​​있습니다. 그러나 처음 두 스타일은 컨트롤러가 말을 할 때만 말해야하는 경우 전속 전이중 통신 프로토콜에 사용될 수 있습니다. 트릭은 들어오는 시작 비트를 기다리는 "읽기 및 쓰기 데이터"루틴을 가지고 있으며, 감지 된 비트가 감지 될 때 컨트롤러가 들어오는 데이터를 검사 할 때마다 각 비트를 보내도록 읽기 및 쓰기가 겹칩니다. 컨트롤러가 들어오는 시작 비트를 감지하면 다음 8 데이터 비트와 정지 비트를 언제 찾아야하는지 정확하게 알 수 있으므로 자체 데이터를 출력하기 위해 사이의 시간을 안전하게 사용할 수 있음을 알게됩니다.

한 가지 참고 사항 : 데이터를 수신하기 위해 처음 두 가지 스타일의 비트 뱅 uart 중 하나를 사용하는 컨트롤러는 데이터 손실을 피하기 위해 다음 바이트 시작 비트의 하강 에지 전에 각 바이트의 데이터를 처리해야합니다. 컨트롤러가 처리에 최소 비트 시간이 절반이 걸린다는 것을 알고 있으면 중지 비트를 기다리지 않고 마지막 데이터 비트를 가져 오자마자 각 바이트를 수락하여 처리 가능한 시간을 최대화 할 수 있습니다. 그러나 컨트롤러에 더 많은 시간을 제공하는 추가 수단으로, 데이터를 제공하는 장치가 하나가 아닌 2 개의 정지 비트로 전송되도록하는 것이 도움이 될 수 있습니다. "마크 패리티"를 구성 할 수 있으면 비트 시간이 더 추가됩니다. 예를 들어 115200-8-M-2에서의 전송은 데이터가 1.6 배 이상 빠른 데이터를 공급하더라도 57600-8-N-1보다 더 많은 처리 시간을 허용합니다.


1

간단히 uC의 I / O 핀을 사용할 수 있습니다. 이 핀에서 데이터를 전환하거나 전송할 때만 핀 주파수가 보드 율로 두 배가되어야합니다. 이것이 UART가 정상적으로 작동하는 방식이며 중간에 비트 신호를 샘플링합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.