mikrocontroller.net

Forum: Compiler & IDEs UART


Autor: saschisch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Ich hab das Problem, das meine serielle Schnittstelle nicht senden
kann. Das Programm sollte "test" auf dem Display ausgeben uwenn UDRE
gesetzt ist. Das tut es aber nicht.WARUM?  Bitte um Hilfe.(ist
dringend)

main.c:

#include <stdlib.h>
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/pgmspace.h>
#include "lcd.h"
#include <lcd.c>
void sendeneinzeichen(unsigned char daten)
{
while (!(UCSRA & (1<<UDRE))); //Warten bis UDR leer ist
lcd_puts("test");
UDR=daten;
}

/*
** constant definitions
*/






int main(void)
{
    char buffer[7];
    int  num=13564;




    /* initialize display, cursor off */
    lcd_init(LCD_DISP_ON);


        /* convert interger into string */
        itoa( num , buffer, 10);


        /* put converted string to display */
        lcd_puts(buffer);

    //UART INIT

    //UBRR = 23
    UBRRH=0x00;
    UBRRL=23;
        //TXD einschalten
    UCSRB|=(1<<TXEN);
    //Frame Format 1SB 8DB 1STP 0PB
    UCSRC=(1<<UMSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    itoa( num , buffer, 10);
    for(;;)
    {

    sendeneinzeichen('x');

    lcd_clrscr();

    }





}

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das lcd_clrscr(); in der for-Schleife löscht dir das Disp schneller als
es anzeigen kann.
Es können aber noch andere Fehler drinnen sein.

Autor: saschisch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Vielleicht haben wir einfach nur Glück, denn auf unserem Display steht,
was wir sehen wollen. Das eigentliche Problem besteht einfach darin,
dass auf der anderen Seite der seriellen SChnittstelle einfach kein
Signal ankommt. Kannst du dir das vielleicht auch erklären?

MfG

saschisch

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende ein fertige UART-Routine und hatte das Glück das sie immer
so funktioniert hat wie ich es wollte und habe mir so eine Menge leere
Kilometer erspart.
Vom PC her einfach mal RxD und TxD verbinden und schauen ob das
Terminal das Echo anzeigt, im Terminal natürlich Echo ausschalten.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bist du sicher, dass deine Baudrate richtig eingestellt ist? Die 23
kommen mir etwas komisch vor (ausser du hast nen Quarz mit so ner
krummen Frequenz).
Hat denn die serielle schon mal funktioniert? Ansonsten: verdrahtung
checken...

Gruss

Autor: saschisch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Die 23 kommen bei einer Frequenz von 3,6864 Mhz exakt heraus ;)
Wir haben uns heute die komplette Verdrahtung angeschaut und wir sind
zu dem Entschluss gekommen, dass wir fehlerfrei gearbeitet haben :)
Wir haben bis heute außerdem mit einem USB - Serial Adapter gearbeitet
und vertrauen dem aber nicht. Also haben wir heute das ganze direkt zu
einer seriellen Schnittstelle geführt und schätzt mal..... es
funktioniert trotzdem nicht!!

Binamverzweifeln

MfG

Saschisch

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was tut es denn eigentlich?

Bist du dir auch sicher, dass du wirklich mit den 3,6864 Mhz
arbeitest (und nicht etwa mit den internen 1 MHz)?

Autor: saschisch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ein guter Hinweis!

Aber ich weiß ehrlich gesagt nicht wie ich das nachprüfen kann. Bitte
erklär es mir und sobald ich wieder zu meinem µC komme mache ich das !

MfG

Saschisch

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fusebits angucken.

Ich nehme dafür immer den Terminalmodus von avrdude.  Meine
Kollegen nehmen zuweilen dafür auch AVR Studio, aber die suchen
da doch meist länger 'rum als ich.

Anyway, falls du die Fuses noch nicht geändert hast, kannst du
erstmal davon ausgehen, dass du mit 1 MHz fährst.  Das geht mit
der UART sogar ganz brauchbar (zumindest bei Vcc = 5 V, für das
der RC-Oszillator bei den meisten AVRs kalibriert ist), sofern
man das U2X-Bit einschaltet (Oversampling von 16fach auf 8fach
reduziert).  Da ist der nominelle Baudratenfehler bei 9600 Bd
nur noch 0,2 %, damit kann jede RS-232-Verbindung eigentlich
leben.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber ich weiß ehrlich gesagt nicht wie ich das nachprüfen kann.

Schreib Dir ein Programm, dass eine LED im Sekundentakt (theoretisch)
blinken lassen soll. Ob die LED einmal oder dreimal in der
Sekunde´blinkt, siehst Du mit freiem Auge.

Autor: saschisch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK danke!

Ich habe mir schon mal so eine Art LED Lciht gebaut und das mit einer
Frequenz von theoretischen 1 kHz blinken lassen. Am Oszi waren das dann
aber 3, ... ms. Ich habe mir damals gedacht, dass das daher rührt, dass
die Befehle ein bisschen länger dauern beim Abarbeiten und habe dann
einfach die AVR Lib delay.h verwendet. Ist das schon ein Beweis dafür?

MfG

Saschisch

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das whrscheinlichste ist, dass der AVR mit einer
anderen Taktfrequenz arbeitet als Du glaubst.
Oder Du hast Dich bei der Berechnung der 1 kHz
vertan.

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.