-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Problem mit UART und Baudrate

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.06.2004
    Alter
    28
    Beiträge
    234

    Problem mit UART und Baudrate

    Hallo Leute,

    ich betreibe meinen AtMega16 an einem 4Mhz Quarzoszillator und wollte nun das ganze mal über RS232 mit dem PC verbinden.

    Jetzt habe ich schon oft gelesen, dass mit einer so geraden Mhz Zahl die Übertragung sehr schlecht funktioniert.

    Am PC kommen bei mir auch nur irgendwelche Hyroglyphen (wahrscheinlcih falsch geschrieben) an.

    Ich verwende zur Zeit 9600 Baud. Kann es sein, dass damit die Übertragung einfach nicht funktioniert?

    BTW: Wenn man den Quarzoszillator an XTAL1 anschließt stellt sich der Controller doch automatisch von intern auf externe Taktfrequenz um oder?

    -MfG, Rodney

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    26
    Beiträge
    1.461
    Hi Rodney.

    Also ich habe bei einer Atmel-Atmel UART Verbindung keine Probleme.
    Den Oszillator musst du aber vorher in den Fuse-bits umschalten.

    Der Mega16 ist standardmäßig von Atmel auf internen Oszillator eingestelt.
    Mit dem Internen R/C Glied lässt sich, nach avatar, keine Baudrate treffen.

    Die UART Geschichte hat bei mir auch erst nicht funktioniert, aber als ich auf den externen Quarz umgeschaltet habe, gings..

    Kannst du mir bei meinen Auslese-Problemen helfen?

    http://www.roboternetz.de/phpBB2/viewtopic.php?t=2572

    Hoffe, ich konnte dir helfen,

    liebe Grüße, Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.06.2004
    Alter
    28
    Beiträge
    234
    Zitat Zitat von tobimc
    Hi Rodney.

    Also ich habe bei einer Atmel-Atmel UART Verbindung keine Probleme.
    Den Oszillator musst du aber vorher in den Fuse-bits umschalten.

    Der Mega16 ist standardmäßig von Atmel auf internen Oszillator eingestelt.
    Mit dem Internen R/C Glied lässt sich, nach avatar, keine Baudrate treffen.

    Die UART Geschichte hat bei mir auch erst nicht funktioniert, aber als ich auf den externen Quarz umgeschaltet habe, gings..

    Kannst du mir bei meinen Auslese-Problemen helfen?

    http://www.roboternetz.de/phpBB2/viewtopic.php?t=2572

    Hoffe, ich konnte dir helfen,

    liebe Grüße, Tobi
    sorry ich kenne mich mit Basecom leider nicht aus, ich progge in C.

    Ich hab schon von mehreren Leuten gelesen die bei dem Versuch den Takt auf extern umzustellen, sich ihren Controller unbrauchbar gemacht haben.

    Was muss ich genau umstellen? Ich arbeite mit PonyProg 2.05a

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    26
    Beiträge
    1.461
    Hi Rodney!

    naja... egal.

    Du musst beim umstelen der Fusebits darauf achten,
    Dass du a) nicht die programming-sperre aktivierst,
    und b) beim Umstellen auf den externen Taktgenerator,
    dass der auch funktioniert, da du dass sonst nicht mehr rückgängig machen kannst. Ohne Takt, kein Prozessor.

    Wenn der Takt funktioniert, ist das kein Problem.
    Bei mir gab es da noch nie Probleme.

    Liebe Grüße, Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.06.2004
    Alter
    28
    Beiträge
    234
    ok ich hab das ganze jetzt umgestellt, hab grad noch nen paar Probleme mit der Stromversorgung...

    Ich glaub ich probiere morgen mal weiter und versuch das UART zum laufen zu kriegen.

    MfG, Rodney

  6. #6
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Wie bei Mega 16 die Fusebits bei PonyProg aussehen sollten sieht man hier


  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.06.2004
    Alter
    28
    Beiträge
    234
    ja der Controller an sich funktioniert ja, nur die Anschlussklemmen von Reichelt kann man sowas von in die Tonne kloppen...

    Nach der Zeit bilden sich kalte Lötstellen und man muss sie wieder neu anlöten...

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.06.2004
    Alter
    28
    Beiträge
    234
    so jetzt stehe ich vor einem weiteren Prob.
    Das Senden vom Controller aus funktioniert einwandfrei.

    Allerdings hab ich jetzt so meine Probleme beim Empfangen von Daten:

    Code:
    #define CPU_Frequency 4000000       // 4Mhz-Quarz
    #define UART_BAUD_RATE 4800 // 9600 Baud
    
    
    #include <avr/io.h>
    #include <stdarg.h>
    #include <ctype.h>
    #include <string.h> 
    #include <avr/interrupt.h>
    
    #include "bitdef.h"
    typedef unsigned char  BYTE;
    typedef unsigned short WORD;
    
    //************************************************************************************************************************
    
    void warten(int t) //ermöglicht Pausen
    {
    	 int h;
    	 for (;t>0;t--)
    	 {
    		  for (h=700;h>0;h--) {}
    	 }
    	 return;
    }
    
    void uart_init()
    {
    	outp( (CPU_Frequency / (UART_BAUD_RATE*16L))-1 , UBRRL );
    	outp( 0, UBRRH );
    	outp( (1 << URSEL) | (3 << UCSZ0), UCSRC);
    	outp( (1 << RXCIE) | (1 << TXEN) | (1 << RXEN), UCSRB);
    	
    	sei();
    } 
    
    
    void uart_nachricht(char* senden) {
    
    for (; *senden != '\0'; senden++) {
        loop_until_bit_is_set(UCSRA, UDRE);
    	UDR=*senden;
    	} 
    	loop_until_bit_is_set(UCSRA, UDRE);
    	UDR = 13;
    }
    
    Signal (USART_Receive_Complete)  {
    	uart_nachricht("Hab was emfangen!");
    }
    
    int main()
    {
    outp (0xFF, DDRA);
    uart_init();
    uart_nachricht("Initalisierung...");
    
    for (;;) {
    	warten(500);
    	PORTA = B00000101;
    	warten(500);
    	PORTA = B00000010;
    }
    
    }
    An Pin 0,1,2 sind Leuchtdioden angeschlossen die wie vorgesehn schön abwechselnd blinken. Wenn nun allerdings der Interrupt USART_Receive_Complete ausgelöst wird schmiert das ganze Programm ab, die Led´s blinken nicht mehr und die NAchricht "Hab was empfangen!" wird auch nicht übertragen.

    - MfG Rodney

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.06.2004
    Alter
    28
    Beiträge
    234
    hat niemand eine Erklärung

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    09.06.2004
    Ort
    Rhein-Neckar-Raum
    Beiträge
    504
    Die Baudrate wird ja durch herunterteilen der Quarzfrequenz erzeugt.
    Deswegen würde ich vorschlagen, mal einen anderen Quarz auszuprobieren, beispielsweise

    4915200
    6144000
    9830400

    Diese Frequenzen lassen sich jweils leicht auf 9600 herunter teilen indem man sie mehrfach halbiert. Wie hoch ist denn die maximale Taktfrequenz für deinen Prozessor ?

    Wenn die Baudrate nicht genau stimmt, wird eine Übertragung zum PC nicht möglich sein.

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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