-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: UART mit Atmega8535 Problem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    27.07.2007
    Beiträge
    10

    UART mit Atmega8535 Problem

    Anzeige

    Hallo!
    Ich habe mit dem programmieren von Mikrocontrollern erst vor kurzem angefangen, doch
    jetzt habe ich ein Problem. Ich benutze zum Programmieren das STK500 und den Mikrocontroller
    ATMEGA8535.
    Mit dem unten stehenden Programm möchte ich, den Buchstaben x über RS232 an den PC senden, doch da
    kommt nix an. Könnt Ihr mir anhand des Programmes sagen was ich falsch mache.
    Danke!




    #include <stdint.h>
    #include <avr/io.h>




    #ifndef F_CPU
    #define F_CPU 4000000
    #endif
    #define UART_BAUD_RATE 9600



    UBRR = F_CPU / (UART_BAUD_RATE * 16L) - 1;




    int main(void)
    {
    UCSRB |= (1<<TXEN);
    UCSRC |= (1<<URSEL)|(3<<UCSZ0);


    while (!(UCSRA & (1<<UDRE)));
    UDR = 'x';
    return 0;
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,
    Auf den ersten Blick(ohne in Dattenblatt geguckt zu haben) sieht es schonmal nicht schlecht aus, aber
    1. Bei dir fehlt eine Endlosschleife machmal vor return 0;
    while(1);
    2. Ich beobachte immerwieder, daß Leute Ausdrücke wie
    Code:
    UCSRB |= (1<<TXEN);
    toll finden.
    Irgendeiner hat damit angefangen, und alle machen das nach...
    UCSRB wird hier zum ersten mal angesprochen, und Du willst ja nur den Transmiter einschalten, lass diesen OR weg, welchen Wert hat UCSRB nach der Initialisierung?
    Ist er sicher 0?
    wenn nicht kommt nur Käse raus, ich hoffe, das ist verständlich...
    3. Wenn es immernoch nicht klappt
    3a. Läuft der Kontroller wirklich mit 4 Mhz ?
    3b. hat das Terminalprogramm am PC die gleichen Einstellungen, wie µC ?

    Schaumal, sonst nochmal melden

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    27.07.2007
    Beiträge
    10
    Danke für deine Antwort!
    Es funktioniert jetzt alles.
    Eine Frage habe ich noch. Wie sieht der Quellcode aus, wenn ich die ganze Sache per Interrupt auslösen möchte?

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Zitat Zitat von izaseba
    2. Ich beobachte immerwieder, daß Leute Ausdrücke wie
    Code:
    UCSRB |= (1<<TXEN);
    toll finden.
    Irgendeiner hat damit angefangen, und alle machen das nach...
    UCSRB wird hier zum ersten mal angesprochen, und Du willst ja nur den Transmiter einschalten, lass diesen OR weg, welchen Wert hat UCSRB nach der Initialisierung?
    Ist er sicher 0?
    Laut Datenblatt ist der Wert des Registers nach dem Start 0. Das sollte wohl genügen. Die werden das auch sicher nicht ins Datenblatt schreiben wenn es nicht so wäre.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,
    Es funktioniert jetzt alles.
    Schön woran lag es jetzt ? Endlosschleife ?
    Wie sieht der Quellcode aus, wenn ich die ganze Sache per Interrupt auslösen möchte?
    Schau mal hier
    hab ich schon was dazu geschrieben, eh, die 2 letzten Beiträge würde ich einfach ignorieren, sowas nennt man Spam

    @kater,
    Gut, ich meine aber, daß nach einem Softreset die Registerinhalte bleiben, es ist allgemein besser für klare Inhalte zu sorgen, mir persönlich ist es aber egal, wie die Leute das machen, nur bevor sowas als Fehlerquelle vorkommt...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Zitat Zitat von izaseba
    @kater,
    Gut, ich meine aber, daß nach einem Softreset die Registerinhalte bleiben, es ist allgemein besser für klare Inhalte zu sorgen, mir persönlich ist es aber egal, wie die Leute das machen, nur bevor sowas als Fehlerquelle vorkommt...

    Gruß Sebastian
    Ahja, da haben wir es schon. Ich bin von einem Reset über den Pin RESET ausgegangen. Also sozusagen ein Hardwarereset
    Was ist jetzt ein Softreset? Sowas hab ich noch nie gelesen.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Ja, also softwarereset wäre z.B. ein Sprung nach 0x0000

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Ah Ok. Ja ich denke, dass die wenigsten einen Softwarereset machen, aber wenn, dann sollte man sicher gehen, dass die Register geleert sind.

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Ja das stimmt, das ist ein ziemlicher Hack mit dem softreset, es ging sich aber darum, daß man die Register mal ruhig direkt beschreiben soll und nicht immer mit dem altem Inhalt verodern, es gibt da weitere Architekturen, wo es vielleicht nicht üblich ist daß die Register default 0 sind.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Wie sieht es denn aus, wenn der Wachdog den reset verübt? Ich würde wetten, dann sind die Register wieder per default alle auf 0

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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