Kommunikation Rs232 <-> MAX3110 <-> SPI <-> PIC18F6585

OP #576991
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe folgendes Problem:

Aufgabe:
Ich möchte von einem PC (Programm funktioniert sicher, getestet per 
COM-Monitor) RS232 Daten am einen PIC18F6585 schicken.
Am PIC hängt über SPI ein MAX3110.

Pre:
Ich benutze die Entwicklungsumgebung PIC-C und das CSS ICD-U40 
Programmiergerät.

Problem:
Die Daten kommen am anderen Ende des RS232 Kabels an, allerdings bemomme 
ich sie nicht vom MAX3110 auf den PIC.
Folgende Funktionen sollten das ermöglichen:


1
void MAX_Init()
2
{
3
   spi_write(0xED09); //Address of MAX, Init-Sequence
4
/*
5
   Hiermit wird eingestellt:
6
•= Baudrate = 19200bps
7
•= 8 Bit Daten
8
•= kein Parity
9
•= 1 Stopbit
10
•= alle nötigen Interrupts erzeugen
11
•= Stromsparmodus aus (/SHTDN)
12
•= Polarität der CTS RTS Signale
13
•= FIFO enabled
14
*/
15
}
16

17
unsigned long build_data()
18
{
19
   int i, j;
20
   byte A_byte;
21
   unsigned long temp;
22

23
   for(i=0; i<64; i+=8)
24
   {                                                    // Loop for 8 rows
25
    for(j=0; j<8; ++j)                    // Loop for 8 columns
26
        {
27
            spi_write(0x0000);                                     
28
            A_byte = spi_read(0x0000);                 // Read byte from SPI
29
            spi_write(0xC609);                         // Reset the RX Int Bit
30

31
            LIN_Msg = LIN_Msg & A_byte;                 // Attach next Word
32
            LIN_Msg << 8;                               // 8Bits left
33
    }
34
  }
35

36
  temp = LIN_Msg;
37

38
  if ( ((temp << 6) == 0) && (LIN_Msg > 0) )
39
  {
40
    MessID = LIN_Msg >> 58;
41
    LIN_Msg = 0x00000000000;
42
  }
43

44
   return LIN_Msg;
45
}
46

47
#int_SSP
48
SSP_isr()
49
{
50
   test = build_data();
51
   spi_write(0x8000 | 0x11);//ACK
52
}
53

54
void main()
55
{
56

57
   unsigned char msg[8];
58

59
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
60
   setup_adc(ADC_OFF);
61
   setup_psp(PSP_DISABLED);
62
   setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_XMIT_L_TO_H);
63
   setup_wdt(WDT_OFF);
64
   setup_timer_0(RTCC_INTERNAL);
65
   setup_timer_1(T1_DISABLED);
66
   setup_timer_2(T2_DISABLED,0,1);
67
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
68
   setup_comparator(NC_NC_NC_NC);
69
   setup_vref(FALSE);
70
   enable_interrupts(INT_SSP);
71
   enable_interrupts(GLOBAL);
72
   setup_oscillator(False);
73

74

75
   CSWake();
76

77
   linWakeUp();
78

79
   MAX_Init();
80

81
   while (1)
82
   {
83
      linMessage(MessID, LIN_Msg, MessLen);
84
   }
85
}

Es sollen jeweils 8x8Bit Blöcke empfangen und zu einem 64 Bit Block 
zusammengefügt werden, aber wie gesagt, irgendwas passt net so wie es 
soll.

Kann mir jemand sagen wo ich den/die Fehler gemacht habe, bzw. wo ich 
ein Tutorial finde, wie man per SPI richtig mit dem MAX3110 
kommuniziert?

Danke schonmal für eure Antworten.

LG Klaus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren