-         

Ergebnis 1 bis 2 von 2

Thema: EUSART mit PIC18F4580

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.09.2005
    Beiträge
    27

    EUSART mit PIC18F4580

    Anzeige

    Hallo zusammen,

    ich benütze die EUSART um Daten Seriell zwischen PIC und CAMERA zu versenden und empfangen.

    Nun habe ich folgendes Problem, ich sende ein SYNC- Paket von der Länge 6Byte an die Camera. Diese Antwortet solange ein ACK- Paket von der Länge 12Byte bis ich das ACKSYNC- Paket sende.

    Wenn ich nun z.B. 10 ACK- Paket empfange möchte sehen die Daten folgendermassen aus:

    0xff,0xff,0xff,0xff,Ack-Paket, 12x 0xFF , 12Byte Ack-Paket,
    12x 0xFF, Ack-Paket, usw.

    Leider kann ich nicht erklären warum immer die 0xFF Zeichen im Buffer sind, da die Kammera nie ein 0xFF versendet.

    tech. Daten
    PIC18F4580 Quarz 10MHz
    arbeite mit PLL -> 40MHz
    UART mit 115200 Baud oder mit 14400 -> gleiches Ergebniss

    mein Prog:
    Code:
    void main(void)
    {
    
             UINT8 ACKreceived;	
    
             init();                                     
    				 
             serialSetup14400();
    
             ACKreceived = false;
    	
             //send sync-packet
             while(ACKreceived == false)
             {
                      write2serial(0xAA);
                      write2serial(0x0D);
                      write2serial(0x00);
                      write2serial(0x00);
                      write2serial(0x00);
                      write2serial(0x00);
                      //brak->its only a break-routine
                      brak(70000);
                      //controll received data
                      if(      CAMERA_BUFFER[0] == 0xAA &&
                               CAMERA_BUFFER[1] == 0x0E &&
                               CAMERA_BUFFER[6] == 0xAA &&
                               CAMERA_BUFFER[7] == 0x0D )
                      {
                               ACKreceived = true;
                      }
             }
    
    	//send ACKSYNC-packet
    	write2serial(0xAA);
    	write2serial(0x0E);
    	write2serial(0x0D);
    	write2serial(0x00);
    	write2serial(0x00);
    	write2serial(0x00);	
    }
    
    //InterruptMethode:
    void interrupt MyInterrupt(void)
    {
    	if( (RCIF == true) )
    	{
    		CAMERA_BUFFER[gcounter] = RCREG;
    		gcounter++;
    		RCIF = 0;
    	}
    }

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.10.2004
    Ort
    Nordschwarzwald
    Alter
    34
    Beiträge
    506
    Ok, ich versuch mich mal deines Problems anzunehmen, auch wenn ich keine Ahnung habe, was du genau brauchst...

    Also, ich versuch das mal so zu beschreiben, wie ich es verstanden habe und du sagst mir, ob das soweit stimmt - vielleicht kommen wir ja so auf den Fehler.

    Du schickst 6 Byte an die Kamera (SYNC).
    Daraufhin fragst du, ob die ihre Antwort (ACK) geschickt hat.
    Wenn ja, dann hör auf - wenn nein, dann bleibe in der While-Schleife.
    <----
    1. Frage: könnte genau das dein Problem sein? - Also dass die Kamera ein bissle braucht, bis sie ein ACK schickt und du sie währenddessen "zumüllst" und sie daraufhin einfach irgendwas antwortet?
    ---->
    Danach schickst du das ACKSYNC-Paket, damit die aufhört ihr ACK zu schicken.
    <----
    Anmerkung zur Übertragungssicherheit: Das ganze ACK und ACKSYNC soll eine Fehlersicherheit darstellen, wenn einzelne Pakete verloren gehen. Dann solltest du aber auch abfragen, ob das ACKSYNC-Paket angekommen ist (also ob die CAM noch weiter ihr ACK schickt oder nicht).
    ---->
    Die Interruptmethode schiebt neue Daten einfach in ein (wohl global definiertes) Array und setzt danach das INT-Flag zurück.

    Überleg dir mal, ob ich das ganze richtig verstanden hab und ob meine 1. Frage vielleicht schon die Lösung deines Problems ist...
    Wenn nicht, dann poste bitte mal ein paar mehr Infos (welchen uC, was für eine CAM, evtl. Links zu Datenblättern, ...)

    MfG
    Stefan

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •