PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 868MHz ISM Transceiver I2C - Hat sich erledigt



jozefowicz
19.01.2006, 17:39
Hallo!

Ich habe ein Problem! Ich habe 2 von dem Oben genannten Funk Sender/Empfänger und bekomme es nicht zum laufen!

Ich habe auch ein Beispeil Prog, aber das ist in Pascal und ich bekomme es nicht Übersetzt!

Original Code:


// Erstellt mit AVR-Pascalcompiler
// Eine Testversion ist unter www.e-lab.de erhältlich

program ProgTDA5250;

{ $BOOTRST $00C00} {Reset Jump to $00C00}
{$NOSHADOW}
{ $W+ Warnings} {Warnings off}

// **** Compiler Schalter
//{$DEFINE ModNR_42200276}
{$DEFINE ModNR_42200425}

Device = mega8515, VCC=3.3;

Import I2Cport;

From System Import ;

Define
ProcClock = 7372800; {Hertz}
StackSize = $0060, iData;
FrameSize = $0050, iData;
I2Cport = PortB;
I2Cdat = 1;
I2Cclk = 2;

Implementation

function SendReg(Comand : Byte) : boolean; forward;
function TDAControlComplete : Boolean; forward;

{$IDATA}

{--------------------------------------------------------------}
{ Type Declarations }
type

{--------------------------------------------------------------}
{ Const Declarations }
const
{--------------------------------------------------------------}
{ Const Declarations }

// Voreinstellungen TDA5250
// Mit diesen Registereinstellungen sollte der Großteil der BasicTRx-Module funktionieren.

I2CChipAddr : Byte = $E0 shr 1;// die Chipadresse ist konstant $E0 -> shr 1 = compilerspezifisch

Reg00Default : Word = $40F9; // Power Down Mode

Reg01Default : Word = $1E1E; // Frequenz FSK Fine Tuning TX

Reg02Default : Word = $0028; // Frequenz FSK Fine Tuning RX

Reg03Default : Byte = $1A; // Datenfiltereinstellung RX -> für 9600Baud manchestercodiert
// $xA = 100kHz I/Q-Filter (bitte nicht verändern
// $1x = Datenfilter -> Cut Off Frequency = 7kHz (max. 14400Baud)

Reg04Default : Word = $FEC0; // ON-/OFF-Time-Reg. -> nicht benutzt
Reg05Default : Word = $F380; // ON-/OFF-Time-Reg. -> nicht benutzt

Reg06Default : Word = $0000; // Datenraten Threshold -> nicht benutzt
Reg07Default : Word = $0000; // Datenraten Threshold -> nicht benutzt

Reg08Default : Byte = $40; // RSSI - Threshold -> nicht benutzt

Reg0DDefault : Byte = $08; // Clock Divider -> nicht benutzt

Reg0EDefault : Byte = $01; // FSK Ramp Time -> nicht benutzt

// Modul spezifische Werte
// Diese Werte werden bei dem Test des Moduls ermittelet
// und werden Ihnen als EXCEL-Tabelle zur Verfügung gestellt.
AbglWertHi42200425 : Byte = 17;
AbglWertLo42200425 : Byte = 13;
AbglWertRx42200425 : Byte = 32;

AbglWertHi42200276 : Byte = 16;
AbglWertLo42200276 : Byte = 18;
AbglWertRx42200276 : Byte = 32;


{--------------------------------------------------------------}
{ Var Declarations }
var
{$PData}
// Sende- / Empfangsumschalter
SW_TXRX[@PIND, 0] : bit;
// Schalter für STANDBY
SW_PWDN[@PIND, 1] : bit;

// PORT - ENABLE = 1; Funkmodul EIN
ENABLE[@PortD, 2] : bit;
// PORT - TX_RX = 0; Funkmodul Rx-Mode EIN
// PORT - TX_RX = 1; Funkmodul Tx-Mode EIN
TX_RX[@PortD, 3] : bit;
// Port Reset
RESET[@PortD, 4] : bit;

{$IDATA}
// TDA5250 Register Variablen
REG00 : Word;
REG01 : Word;
REG02 : Word;
REG03 : Byte;
REG04 : Word;
REG05 : Word;
REG06 : Word;
REG07 : Word;
REG08 : Byte;
REG0D : Byte;
REG0E : Byte;

// TDA5250 Register 0 Bitdefinition
PeakDetector[@REG00, 15] : bit;
SoftPowerDown[@REG00, 14] : bit;
TDATestmode[@REG00, 13] : bit;
TDARegControlled[@REG00, 12] : bit;
TDAASKEnable[@REG00, 11] : bit;
TDARxTxEnable[@REG00, 10] : bit;
CKLON[@REG00, 9] : bit;
DataInv[@REG00, 8] : bit;
AlwaysDataOut[@REG00, 7] : bit;
ADCCont[@REG00, 6] : bit;
FreqCont[@REG00, 5] : bit;
LNAGain[@REG00, 4] : bit;
EnableRxMode[@REG00, 3] : bit;
Mode2[@REG00, 2] : bit;
Mode1[@REG00, 1] : bit;
PAHighPwr[@REG00, 0] : bit;


// Default Werte in Controller-Register laden
procedure SetTDADefault;
begin
Reg00 := Reg00Default;
Reg03 := Reg03Default;
Reg04 := Reg04Default;
Reg05 := Reg05Default;
Reg06 := Reg06Default;
Reg07 := Reg07Default;
Reg08 := Reg08Default;
Reg0D := Reg0DDefault;
Reg0E := Reg0EDefault;
end;


// einzelne Register an den TD5250 übertragen
function SendReg(Comand : Byte) : boolean;
var DArray : Array[0..1]of Byte;
begin
// I2Cout Ausgabe-Routine einer Software-I2C -> siehe E-LAB Pascal-Compiler
// function I2Cout(SlaveAdr, Command : byte[; Data]) : boolean;
// www.e-lab-de

case Comand of
$00: DArray[0] := Hi(Reg00);
DArray[1] := LO(Reg00);
return(I2Cout(I2CChipAddr, Comand, DArray));|
$01: DArray[0] := Hi(Reg01);
DArray[1] := LO(Reg01);
return(I2Cout(I2CChipAddr, Comand, DArray));|
$02: DArray[0] := Hi(Reg02);
DArray[1] := LO(Reg02);
return(I2Cout(I2CChipAddr, Comand, DArray));|
$03: return(I2Cout(I2CChipAddr, Comand, Reg03));|
$04: DArray[0] := Hi(Reg04);
DArray[1] := LO(Reg04);
return(I2Cout(I2CChipAddr, Comand, DArray));|
$05: DArray[0] := Hi(Reg05);
DArray[1] := LO(Reg05);
return(I2Cout(I2CChipAddr, Comand, DArray));|
$06: DArray[0] := Hi(Reg06);
DArray[1] := LO(Reg06);
return(I2Cout(I2CChipAddr, Comand, DArray));|
$07: DArray[0] := Hi(Reg07);
DArray[1] := LO(Reg07);
return(I2Cout(I2CChipAddr, Comand, DArray));|
$08: return(I2Cout(I2CChipAddr, Comand, Reg08));|
$0D: return(I2Cout(I2CChipAddr, Comand, Reg0D));|
$0E: return(I2Cout(I2CChipAddr, Comand, Reg0E));|
else
return(False);
endcase;
end;

// Alle Register an den TD5250 übertragen
function TDAControlComplete : Boolean;
var
fx : Byte;
begin
// Register 0..8 senden
for fx := 0 to 8 do
if not SendReg(fx) then
return(False);
endif;
endfor;
// Register $0D senden
if not SendReg($0D) then
return(False);
endif;
// Register $0E senden
if not SendReg($0E) then
return(False);
endif;
return(True);
end;

procedure RxInit;
begin
incl(ENABLE); // ENABLE = 1; Funkmodul EIN
// TDA-Register vorbereiten
incl(SoftPowerDown);
// TDA-Register programmieren
SendReg(00);

excl(TX_RX); // TX_RX = 0; Funkmodul Rx-Mode EIN
end;

procedure TxInit;
begin
incl(ENABLE); // ENABLE = 1; Funkmodul EIN
// TDA-Register vorbereiten
incl(SoftPowerDown);
// TDA-Register programmieren
SendReg(00);

incl(TX_RX); // TX_RX = 1; Funkmodul Tx-Mode EIN
end;

procedure TDAPowerDown;
begin
// TDA-Register vorbereiten
incl(SoftPowerDown);
// TDA-Register programmieren
SendReg(00);

excl(ENABLE); // ENABLE = 0; Funkmodul Standby
end;

procedure InitPorts;
begin
PortD := %00000011; // Pull-Up's für Umschalter setzen
DDRD := %00011100; // Ausgänge definieren
end;

{--------------------------------------------------------------}
{ Main Program }
{$IDATA}

begin
// Ports initialisieren
InitPorts;

// Default Werte in Controller-Register laden
SetTDADefault;

// Reset TDA5250
excl(RESET);
MDelay(200); // 200 ms Verzögerung
incl(RESET);

// Fine Tuning Values für Modul 4220276 einstellen
{$IFDEF ModNR_42200276}
Reg01 := Word(AbglWertHi42200276) * 256 + Word(AbglWertLo42200276); // Frequenz FSK Fine Tuning TX
Reg02 := Word(AbglWertRx42200276); // Frequenz FSK Fine Tuning RX
{$ENDIF}
// Fine Tuning Values für Modul 4220425 einstellen
{$IFDEF ModNR_42200425}
Reg01 := Word(AbglWertHi42200425) * 256 + Word(AbglWertLo42200425); // Frequenz FSK Fine Tuning TX
Reg02 := Word(AbglWertRx42200425); // Frequenz FSK Fine Tuning RX
{$ENDIF}

// Alle Register an den TD5250 übertragen
TDAControlComplete;

loop
// Schalter für STANDBY abfragen
if not SW_PWDN then
// Sende- / Empfangsumschalter abfragen
if SW_TXRX then
TxInit;
else
RxInit;
endif;
else
TDAPowerDown;
endif;

endloop;

end ProgTDA5250.



Ich habe auch schon Die datenblätter studiert komme aber nicht weiter!

http://www.ikhf.de/files/BasicTRX_Datenblatt_050902.pdf
und
http://www.infineon.com/upload/Document/cmc_upload/documents/046/676/TDA5250_V1.6.pdf

Meine Versuche????:
Sender:


$regfile = "m32def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 9600

'Definitonen der Variablen

Dim Chip As Word
Dim Reg00 As Word
Dim Reg01 As Word
Dim Reg02 As Word
Dim Reg03 As Byte
Dim Reg00adress As Byte
Dim Reg01adress As Byte
Dim Reg02adress As Byte
Dim Reg03adress As Byte
Dim Text As String * 15

'Declaration Sub's / Funktion


'Config der ports

Config Scl = Portc.0
Config Sda = Portc.1

Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.5 = Output
Config Pinc.6 = Output

'Variablen Setzten

Chip = $e0
Reg00 = $40f9
Reg01 = $0d10
Reg02 = $0020
Reg03 = $1a
Text = "Hallo Welt"
Reg00adress = $00
Reg01adress = $01
Reg02adress = $02
Reg03adress = $03

'Ports Schalten

Portc.3 = 1 'Modul aktiv Schalten
Portc.5 = 1 'Sendebetrieb


'Hauptprogramm

I2cstart
I2cwbyte Chip 'slave address
I2cwbyte Reg00adress 'asdress L of EEPROM
I2cwbyte Reg00 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

I2cstart
I2cwbyte Chip 'slave address
I2cwbyte Reg01adress 'asdress L of EEPROM
I2cwbyte Reg01 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

I2cstart
I2cwbyte Chip 'slave address
I2cwbyte Reg02adress 'asdress L of EEPROM
I2cwbyte Reg02 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

I2cstart
I2cwbyte Chip 'slave address
I2cwbyte Reg03adress 'asdress L of EEPROM
I2cwbyte Reg03 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

Do
Open "comc.2:9600,8,n,1" For Output As #1
Print #1 , Text
Close #1
Loop
End


Empfänger:


$regfile = "m32def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 9600

'Definitonen der Variablen

Dim Chip As Word
Dim Reg00 As Word
Dim Reg01 As Word
Dim Reg02 As Word
Dim Reg03 As Byte
Dim Reg00adress As Byte
Dim Reg01adress As Byte
Dim Reg02adress As Byte
Dim Reg03adress As Byte
Dim Text As String * 15

'Declaration Sub's / Funktion


'Config der ports

Config Scl = Portc.0
Config Sda = Portc.1

Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.5 = Output
Config Pinc.6 = Output

'Variablen Setzten

Chip = $e0
Reg00 = $40f9
Reg01 = $0d10
Reg02 = $0020
Reg03 = $1a
Text = ""
Reg00adress = $00
Reg01adress = $01
Reg02adress = $02
Reg03adress = $03

'Ports Schalten

Portc.3 = 1 'Modul aktiv Schalten
Portc.5 = 0 'Empfangbetrieb


'Hauptprogramm

I2cstart
I2cwbyte Chip 'slave address
I2cwbyte Reg00adress 'asdress L of EEPROM
I2cwbyte Reg00 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

I2cstart
I2cwbyte Chip 'slave address
I2cwbyte Reg01adress 'asdress L of EEPROM
I2cwbyte Reg01 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

I2cstart
I2cwbyte Chip 'slave address
I2cwbyte Reg02adress 'asdress L of EEPROM
I2cwbyte Reg02 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

I2cstart
I2cwbyte Chip 'slave address
I2cwbyte Reg03adress 'asdress L of EEPROM
I2cwbyte Reg03 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

Do
Open "comc.2:9600,8,n,1" For Input As #1
Input #1 , Text
Close #1
Print Text 'Ausgabe empfang an Terminal
Text = ""
Wait 2
Loop
End


Bitte um Hilfe! Dringend!!!

Mfg
Thorsten