-
        

Ergebnis 1 bis 4 von 4

Thema: Probleme mit UART

  1. #1

    Probleme mit UART

    Anzeige

    Hallo
    Ich Programmiere momentan zum üben an einem RN-Control 1.4 Mega32 Board.
    Ich muss zum weiterkommen endlich die RN232 übertragung zum laufen zu bringen...
    Ich habe ein Modul geschrieben um das UART zu bedienen, allerdings bekomme ich am PC (Benutzte Linux und das MINICOM um etwas anzuzeigen)
    nur Datenmüll, sprich es wird etwas übertragen aber es kommt nur Müll an.
    Ich habe hier mal meinen Code, könnte sich den jemand mal anschauen?

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include "avr.h"
    #include "uart_cnf.h"
    #include "uart.h"
    #include "str_int.h"
    
    // local definitions -----------------------------------------------------------
    #define UART_UBRR_CALC ((F_CPU)/((UART_BAUD_RATE)*16L)-1)
    
    // global variables ------------------------------------------------------------
    uint8_t uartTxCount;
    
    // local variables -------------------------------------------------------------
    uint8_t* txData;
    
    // global function implementation ----------------------------------------------
    void uartInit(){
      UCSRB|=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //RX Complete Interrupt Enable
      UCSRC |= (1<<UCSZ1)|(1<<UCSZ0); //8-Bit
      UBRRH=(uint8_t)(UART_UBRR_CALC>>8); //set baudrate
      UBRRL=(uint8_t) UART_UBRR_CALC;
      uartTxCount=0;
      
      sei();
    }
    
    
    
    uint8_t uartTxBytes(uint8_t* data,uint8_t length){
      if(uartTxCount)
        return 0;
      txData=data;
      uartTxCount=length;
      UDR=*data;
      UCSRB|=(1<<UDRIE); //Data Register Empty Interrupt Enable
      return 1;
    } 
    void uartTxUint16(uint16_t i){
      uint8_t str[6];
      stringWord2Dec(i,str); //convert integer to string
      uartTxBytes(&str[1],str[0]); //send string
      uint8_t str2="\r\n";
      uartTxBytes(str2,2); //carriage return, new line
    }
    
    // interrupt routines ----------------------------------------------------------
    ISR(USART_UDRE_vect){ //USART TX Data Register Empty Interrupt
      if(--uartTxCount)
        UDR=*++txData;
      else{
      	UCSRB&=~(1<<UDRIE);  //Data Register Empty Interrupt Disable
      }
      /* This Interrupt do not disable him self. It neccesary do read UDR
       * or to disable it in the UCSRB Register.                          */
    }
    Danke Gruss Nils
    Achja die Variable UART_BAUD_RATE ist 38400 und F_CPU 16000000

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    * Wo wird uartTxCount initialisiert?
    * in uartInit erst das Low dann das high Register beschreiben oder besser direkt auf UBRR zugreifen
    * In der ISR wird per pre-Increment auf die Daten zugegriffen. Ist das Absicht?
    * Ist die CKDIV8 Fuse gesetzt?

    In den Datenblättern der ATMegas gibt es Beispielcode (in C) für die serielle Schnittstelle.

  3. #3
    1. Meinst du das?
    // global variables ------------------------------------------------------------
    uint8_t uartTxCount;

    Zu meiner schande muss ich gestehen, dass ich nicht alles Durchblicke, da es erstmals darum ging das ich schnell anfangen konnte, da es eine Projektarbeit wird.
    Deshalb hat mir bei dem Modul ein Kollege geholfen, und ich blicke es nicht ganz durch...
    Hättet ihr einen besseren /anderen UART Modul vorschlag, da ich ohne beim Programmieren nicht weiterkomme...
    Gruss Nils

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Hallo Nlis,

    wenn es eine Projektarbeit wird - und gut werden soll, wovon ich mal ausgehe - dann fange am Besten damit an, die Tutorials (hier im Wiki und auf mikrocontroller.net) durchzuarbeiten. Das hilft Dir ganz sicher mehr weiter als die Beantwortung von Detailfragen.

    So Du schon C Kenntnisse hast, helfen Dir die Tutorials m.E. super weiter, da finden sich auch jede Menge Codebeispiele.

Berechtigungen

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