mikrocontroller.net

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


Autor: Klaus Muster (messerjockll)
Datum:

Bewertung
0 lesenswert
nicht 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:


void MAX_Init()
{
   spi_write(0xED09); //Address of MAX, Init-Sequence
/*
   Hiermit wird eingestellt:
•= Baudrate = 19200bps
•= 8 Bit Daten
•= kein Parity
•= 1 Stopbit
•= alle nötigen Interrupts erzeugen
•= Stromsparmodus aus (/SHTDN)
•= Polarität der CTS RTS Signale
•= FIFO enabled
*/
}

unsigned long build_data()
{
   int i, j;
   byte A_byte;
   unsigned long temp;

   for(i=0; i<64; i+=8)
   {                                                    // Loop for 8 rows
    for(j=0; j<8; ++j)                    // Loop for 8 columns
        {
            spi_write(0x0000);                                     
            A_byte = spi_read(0x0000);                 // Read byte from SPI
            spi_write(0xC609);                         // Reset the RX Int Bit

            LIN_Msg = LIN_Msg & A_byte;                 // Attach next Word
            LIN_Msg << 8;                               // 8Bits left
    }
  }

  temp = LIN_Msg;

  if ( ((temp << 6) == 0) && (LIN_Msg > 0) )
  {
    MessID = LIN_Msg >> 58;
    LIN_Msg = 0x00000000000;
  }

   return LIN_Msg;
}

#int_SSP
SSP_isr()
{
   test = build_data();
   spi_write(0x8000 | 0x11);//ACK
}

void main()
{

   unsigned char msg[8];

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_XMIT_L_TO_H);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_SSP);
   enable_interrupts(GLOBAL);
   setup_oscillator(False);


   CSWake();

   linWakeUp();

   MAX_Init();

   while (1)
   {
      linMessage(MessID, LIN_Msg, MessLen);
   }
}


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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.