ESP8266 아날로그 방송 텔레비전 인터페이스
안테나를 gpio3/rx까지 연결하고 아날로그 TV를 채널 3에 조정하십시오.
이것은 ESP8266WS2812I2S 프로젝트와 같은 방식으로 I2S 버스를 사용합니다. 차이는 출력 보드를 80MHz로 크랭크합니다. 우리는 DMA 버퍼를 설정하고 한 번에 한 줄을 통과 할 때 CPU가 채우도록합니다. DMA 인터럽트는 한 번에 한 단어 씩 버퍼를 채우게됩니다. I2S 버스는 버퍼를 80MHz로 이동시킵니다!
"그러나 Nyquist는 샘플 속도의 1/2 (이 경우 40MHz)에서 주파수를 전송하거나받을 수 없다고 말할 수 있습니다. 어느 정도는 사실입니다. 어떤 사람들은 그것이 오버 톤이라고 생각했지만 어떻게 되는가 실제로 낯선 일이 발생합니다. 전송하는 모든 것은 실제로 샘플 속도 (40 MHz) 주위에 반영되어 60 MHz 비트 클록에서 60 MHz를 전송합니다. 20. 이것은 완벽하지 않습니다. 일부 주파수는 80MHz까지 일치하고 다른 주파수는 그렇지 않습니다.
"premodated_table"배열에 약간의 패턴을 저장합니다. 여기에는 "동기화"레벨 또는 "컬러 버스트"레벨과 같은 다양한 신호 또는 시각적 색상과 같은 다양한 신호에 대한 비트 스트림이 포함됩니다. 이 테이블의 컬러 당 1408 비트의 길이는 80MHz에서 한 번에 한 번에 한 번 보낸 경우 NTCS 크로마 주파수의 315.0/88.0 MHz 또는 3.5795455555MHz의 균일 한 승수로 전송되도록 선택되었습니다. 1408/80MHz = 17.6US * 3.579545 MHz = 63주기를 정확하게 취득하여이를 계산할 수 있습니다. 편리하게도, 채널 3의 루마 센터 인 61.25 MHz의 균일 한 승수로 작동합니다. 17.6us * 61.25 MHz = 1078 사이클, 정확히! 임의 주파수를 조절하면 때로는 사이클이 매우 고르지 않습니다.
루마 (흑백 부분)를 생성하기 위해 61.25 MHz를 조절합니다. 우리가 강한 신호를 생성한다면, 그것은 매우 "어두운"것으로 간주되고, 약한 신호는 매우 "밝다"입니다. 이것은 우리가 동기 펄스를 보내고 싶을 때, 우리는 가능한 한 큰 소리로 변조합니다 ... 흰색을 변조하고 싶을 때, 우리는 거의 어떤 신호도 내놓지 않습니다. 당신이 눈에 띄는 한 가지는 dot pour입니다. 우리가 보내는 신호가 너무 끔찍하기 때문입니다. 크로마 신호는 매우 더럽고 반복 강도 패턴이 있습니다. 크로마는 1408 비트 넓은 반복 패튼까지 줄이지만 화면의 총 픽셀 수는 그렇지 않습니다. 이로 인해 생성 된 패턴이 화면을 롤 다운합니다.
색상을 생성하려면 기본 대역 위의 3.579MHz 크로마 신호에서 변조해야합니다. 크로마는 각 라인의 시작 부분에서 컬러 버스트로 동기화됩니다. 이것은 또한 크로마의 레벨을 설정합니다. 그런 다음 선 중에 크로마 수준에서 높은 계수를 갖는 "색상"또는 낮은 것 중 하나를 선택할 수 있습니다. 이것은 색이 얼마나 생생한지를 결정합니다. 색상의 색조를 변경하기 위해 단계를 변경할 수 있습니다.
이것은 기본적으로 1 비트 디더링 DAC로, Nyquist 아래의 주파수에서 작동하여 루마와 색상을 동시에 인코딩하려고합니다. 품질이 끔찍하다는 사실에 놀라지 마십시오.
라인 버퍼 상태 머신을 처리하기위한 테이블은 maycbtables.h/c에 (생성/저장됩니까?)이며, 온 와이어 신호 인코딩을 생성하기위한 유사한 테이블은 synthtables.c에 있습니다.
기능 DMA 전송을 설정하고 버퍼가 비어있을 때 버퍼를 리필하고 Framebuffer 컨텐츠에 따라 Video_broadcast.c에있는 어떤 종류의 선을 전송 해야하는지 변경합니다. 이러한 기능은 모든 변조를 처리합니다. 이로 인해 DMA가 설정되고 DMA가 블록을 완성 할 때 (한 줄과 동일) 호출되는 인터럽트가 설정됩니다. 완료되면 CBTable을 사용하여 라인을 채우기 위해 호출 할 기능을 결정합니다. 인터럽트는 DMA의 다음 줄을 계속 작성하여 계속 진행됩니다.
Framebuffer는 user_main.c에 위치한 다양한 데모 화면으로 업데이트됩니다.
custom_commands.c에는 NTSC 별 측면에 사용되는 사용자 정의 명령이 포함되어 있습니다. 공통 Websockets 인터페이스를 사용하면 두 가지 추가 명령이 있습니다. 여기에는 작동 모드 (CO)를 설정하는 "CO"및 "CV"가 포함되며 사용자가 웹 인터페이스 (CV)에서 변조 테이블을 변경할 수 있습니다.
다음 데모 화면을 사용할 수 있습니다. 사용자가 웹 브라우저에서이를 비활성화하지 않는 한 일반적으로 차례가됩니다 (10 이후).
웹 인터페이스는 ESP8266WS2812I2S에서 웹 인터페이스를 빌리고 있습니다. ESP 전원을 켜고 연결하고 연결하고 웹 브라우저를 http://192.168.4.1에 가리 킵니다. 새로운 버튼 "NTSC"가 있습니다. 이렇게하면 데모가 화면에서 화면으로 계속하거나 특정 화면에서 동결 할 수있는 옵션이 제공됩니다. 화면을 지정할 수 있습니다. 또한 RF 테스트의 경우 색상을 사용 할 수 있습니다. 컬러 잼이 0 이상으로 설정 될 때마다 모든 라인 그리기 논리를 끄고 단순히 색상을 계속 출력합니다. 이렇게하면 TV 세트가 보지 못하지만 다른 RF 장비에서 볼 수 있습니다.
또한 대화식 JavaScript 웹 워크 워커 시스템이있어 새로운 색상을 만들기 위해 코드를 작성할 수 있습니다! 특정 색상이 맞을 때 전송 될 새 비트 스트림을 만들 수 있습니다. 코드를 편집 할 수 있으며 입력 할 때 효과적입니다. 웹 워크를 변경할 때마다 자동으로 다시 시작합니다.
모든 ESP가 출력 할 수있는 -1 또는 +1 만 출력해야합니다. 그런 다음 선택한 주파수 영역에 무작위 창이있는 DFT를 실행합니다. DFT 창을 늘리면 Q (또는 정밀도)를 증가시킵니다. 감소하면 Q를 줄입니다. 이것은 TV와 같은 수신기가 신호를 실제로 이해하고 이것이 얼마나 엉뚱한지를 설명하는 데 도움이됩니다.
http://cnlohr.github.io/channel3/web/page/index.html ntsc를 클릭하고 마을로 이동하는이 링크를 사용하여 자신의 브라우저에서 시도해 볼 수 있습니다.
3D 및 텍스트의 모든 것에 대해, 3D에는 3D에 "rawDraw"라이브러리 (http://github.com/cnlohr/rawdraw)의 새로운 수정 된 버전을 사용하고 있습니다. 하단 8 비트는 분수 구성 요소입니다.
PAL 방송을 허용하기 위해 Video_broadcast-Library (이전 NTSC_Broadcast)의 타이밍이 수정되었습니다. 나는 이것을 검은 색 흰색 TV와 함께 사용하고 싶었고 PAL 색상은 실제로 디지털 방식으로 복잡하기 때문에 Broadcast_tables (synthtables.c)를 수정하지 않았습니다. 따라서 라이브러리는 NTSC 색상 정보 (NTSC50과 같은 종류)로 B/W-Signal을 준수하는 PAL을 방송합니다.
PAL 방송을 활성화하려면 user.cfg에서 OPTS += -DPAL
활성화해야합니다.
이 프로젝트의 원래 YouTube 비디오는 다음과 같습니다.
다음은 새로운 비디오 (색상)입니다.