Forum: Mikrocontroller und Digitale Elektronik Kommunikation Rs232 <-> MAX3110 <-> SPI <-> PIC18F6585


von Klaus M. (messerjockll)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.