RTC6705 Sender auf FatShark Frequenz?

Status
Nicht offen für weitere Antworten.

cesco1

Erfahrener Benutzer
#1
Die frequenzen von dem dipschalter gesteuerten RTV6705 chip und den FatShark modulen stimmt nicht überein. Gibt es da eine möglichkeit das anzugleichen? Hat schon jemand versucht den chip über SPI anzusteuern?

Eine andere sache ist audio. Stereo audio mit 6 und 6,5 mhz unterträgern. Voellig unnötig da ich kein audio brauche, und doch geht 10% der sendeleistung für audio drauf. Kann man diese unterträger abschalten ?
 
#3
Ich hab Module umgebaut und auch Code geschrieben um die Frequenz einzustellen mit nem Atmega328p. Test mit Video steht noch aus. Code ( in C) kannst von mir aus haben.

Hier im Bild sieht man wie ich die Widerstände geändert habe. Man muss nur einen Widerstand verschieben.


Code:
#include <avr/io.h>
#include <util/delay.h>
#include "spicom.h"

void spicom_init(void)
{
DDRB |= (1<<PINB2) | (1<<PINB3) | (1<<PINB5);
PORTB |= (1<<PINB2);
}

void set_frequency(uint16_t frequency)
{
uint32_t N=0;
uint16_t A=0;
uint16_t data0=0;
uint16_t data1=0;
uint8_t i=0;
if(frequency < 5956 && frequency > 5694)
{
N = (frequency-479)/64;
A = (frequency-479 - N *64)/2;
data0 |= (1<<0) | (1<<4) | ((A & 0x7F)<<5);

PORTB &= ~(1<<PINB5); //SCK
if(data0 & (1<<0))
PORTB |= (1<<PINB3); //MOSI
else
PORTB &= ~(1<<PINB3);
PORTB &= ~(1<<PINB2); //chipselect
_delay_us(1);
PORTB |= (1<<PINB5); //SCK
_delay_us(1);
PORTB &= ~(1<<PINB5); //SCK
//_delay_us(1);


for(i=1;i<25;i++)
{
if(i<12)
{
if(data0 & (1<<i))
PORTB |= (1<<PINB3); //MOSI
else
PORTB &= ~(1<<PINB3);
}
else
{
if(N & (1<<(i-12)))
PORTB |= (1<<PINB3); //MOSI
else
PORTB &= ~(1<<PINB3);
}

_delay_us(1);
PORTB |= (1<<PINB5); //SCK
_delay_us(1);
PORTB &= ~(1<<PINB5); //SCK
//_delay_us(1);


}

PORTB |= (1<<PINB2); //chipselect
_delay_us(1);
}


}
 
#5
Beim Sendermodul besteht das Problem darin, den SPI Pin1 des RTC6705 von Masse zu trennen, um ihn auf High zu bringen. Bei den alten TX-Modulen war das schwierig (Ausbohren der Durchkontaktierung), beim neuen Layout muss man nur den Widerstand am Pin1 (im Bild unter den beiden Lötjumpern) weglöten.
 
#6
Ich hab nen neuen Sender erwischt und hab einfach den Widerstand auf BX verschoben (ist im SPI Modus don't care und aufgeräumt).
Der Schild war bei beiden Modulen schlecht engelötet. Das war sehr vorteilhaft um ihn runterzulöten.

Ich hab auch schon ne Platine designed für Sender mit Atmega328p, Taster LEDs drauf. Zusätzlich hat die Platine ne fsk Modulation auf den Audio Kanal und Uart Eingang zum Einlesen von nem GPS Modul.
Platine ist aktuell beim Fertiger (braucht 2 Wochen).

Ein BMP180 Luftdrucksensor ist auch drauf, aber ich weiß noch nicht ob das Sinn macht. Ein gutes U-blox Modul ist ja schon relativ genau auch in der Höhe.

Platine hat 18x41mm.

Gruß Chris
 

cesco1

Erfahrener Benutzer
#7
den SPI Pin1 des RTC6705 von Masse zu trennen
Das hab ich voll vergessen!

Ich hab mir gedacht die SPI leitungen sind ja auf dem schalter und damit zugänglich, und dann das modul zugelötet, verklebt und angeschraubt. Das ding wird ohne kühlkörper dermassen schnell heiss.

Na vielleicht ist ja spi-se trozdem rausgeführt..
 

mkschorsch

Neuer Benutzer
#8
Hallo Chris,
hab mir das mal angesehn. Super Arbeit, hast du am Atmega328p auch einen Display Ausgang vorgesehn bzw auf dem Print?

Bin neugierig wie das ganze aussieht wenn es fertig ist. Bild wäre interessant.

mfg Georg
 
#10
Hab gerade mal nen Code für den RTC6705 geschrieben. Komischerweise musste ich auch das register 0 mit 400 beschreiben obwohl der Default Wert 400 ist.
Code:
void set_frequency(uint16_t frequency)
{
	uint32_t N=0;
	uint16_t A=0;
	uint32_t data0=0;
	//uint16_t data1=0;
	uint8_t i=0;
	if(frequency < 5956 && frequency > 5644)
	{
		
		data0 =  (1<<4) | (400<<5) ;
		
		PORTB &= ~(1<<SCK);
		PORTB &= ~(1<<CS);
		
		
		for(i=0;i<25;i++)
		{
			
			if(data0 & ((uint32_t)1<<i))
			PORTB |= (1<<MOSI);	//MOSI
			else
			PORTB &= ~(1<<MOSI);
			
			_delay_us(40);
			PORTB |= (1<<PINB5);	//SCK
			_delay_us(40);
			PORTB &= ~(1<<PINB5);	//SCK
		}
		
		_delay_us(10);
	
		N = ((uint32_t)frequency * 25)/64;
		A = ((uint32_t)frequency * 25 - N * 64);
		data0 = (1<<0) | (1<<4) | ((A & 0x7F)<<5) | ((N & 0x1FFF)<<12);
		
		PORTB &= ~(1<<SCK);
		PORTB &= ~(1<<CS);
		
	
		for(i=0;i<25;i++)
		{
			
			if(data0 & ((uint32_t)1<<i))
			PORTB |= (1<<MOSI);	//MOSI
			else
			PORTB &= ~(1<<MOSI);
			
			_delay_us(40);
			PORTB |= (1<<PINB5);	//SCK
			_delay_us(40);
			PORTB &= ~(1<<PINB5);	//SCK
		}
		
		_delay_us(10);
		
		PORTB |= (1<<CS);
		
	}
	
	
}
Gruß Chris
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten