www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uart gibt keine Wert aus


Autor: Mathias K. (underworldgamer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo


Könnt ihr mir helfen


beim MAx232 hab ich jeweils 1 µF Kondensator und verwende ein Atmega 32 
gesendet wirds über ponyprog

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst du mit "gesendet wirds über ponyprog"? Du brauchst auf der PC 
Seite ein Terminalprogramm wie z.B. das Bray-Terminal, HTerm oder zur 
Not Hyperterminal...

Wo hast du TX vom µC und RX vom PC miteinander verbunden? Ein Schaltplan 
deines Aufbaus wäre nicht schlecht.

Aus main() kehrt man i.A. nicht zurück. Wenn der C-Startup-Code darauf 
nicht eingerichtet ist und z.B. keine eigene Endlosschleife vorsieht, 
rast dein µC direkt ins Nirvana.

Die Schnittstelleneinstellung habe ich nicht geprüft, du wirst das 
sicher anhand des Datenblatts geschrieben haben. Nur zwei Sachen - läuft 
der AVR sicher mit 4 MHz und weisst du, dass man mit dem ungenauen 
internen RC-Oszillator auch Pech bei der genauen Baudratengenerierung 
haben kann?

Hast du einen Oszi zur Überwachung der TX-Leitung bzw. eine einfache 
Low-Current-LED inkl. Vorwiderstand, die eine Sendetätigkeit auf TX 
zwischen C und MAX232 anzeigen kann?

Autor: Mathias K. (underworldgamer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier wärs mal


Verbindung über Nullmodemkabel 2-3 /3-2

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In 2.jpg hast du einen 16 MHz Quarz extern drin. Mit 4 MHz im Programm 
wird das nix. Wo du RS232 angeschlossen hast, sehe ich auf die Schnelle 
nicht. Du wirst das gescheckt haben, ob diese Pins von UART bedient 
werden.

In rs232.jpg ist C8 verkehrt gepolt eingezeichnet. Am V- ist die 
positivere Seite GND.

Beim käuflichen Nullmodemkabel sind mehr Leitungen verknotet als man 
denkt. Ich bevorzuge es die TX/RX Dreherei unter eigener Kontrolle zu 
haben z.B. zwischen MAX232 und DB-Sub9 Female und dann mit einem 1:1 
stinknormalen RS232 Kabel zu verbinden.

PS: Die Bilder sind gruselig schlecht ;-)

Autor: Jochen S. (jochen_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Blöde Frage aber vielleicht hilft es, hast du die Masse verbunden 
zwischen PC und ATMEL??


Jochen_s
www.rs485-hausbus.de.vu

Autor: Mathias K. (underworldgamer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das sind mal die Files in PCAD 2001


TXD wird mit RXD pc verbunden

RXD wird mit TXT pc verbunden

Autor: Mathias K. (underworldgamer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich das programm von avr programm atmega rauflade kummt etwas 
heraus
low high low ein wenig verzerrt dargestellt (oszi)

kann mit HTerm 0.6.5.b das file auslesen  es kommt mal was raus aber mit 
baund 600 statt 9600 ?? komisch

aber war gehts es nicht mit dem serial.c was ich schon gepostet habe

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sieht so aus, als ob der µC mit 1 MHz rennt (9600/600 = 16). 
Zufällig ist das die Werkseinstellung des internen R-Oszillators. Hast 
du die Fuses auch auf die externe Taktquelle (Quarz) gebrannt (Obacht 
vorher schlau machen!!!)?

Autor: Mathias K. (underworldgamer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das komische ist das nur \n\r richtig angezeigt wird ???
was kann das sein
Ich muss den Reset drücken das etwas gesendet wird

mfg Mathias

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, du hast jetzt den externen Quarz aussen vor gelassen und die 
gewünschte Baudrate auf den internen RC-Oszillator bezogen.

Du willst 9600 Baud einstellen und fütterst das Baudratenregister mit 
dem Wert 6.

Dieser Wert wird üblicherweise so berechnet (Atmega32 Datenblatt, 
Tabelle 60):

Baudratenwert = Uarthaupttakt / (Baudrate * 16) - 1

1'000'000 / (9'600 * 16) - 1 = 5,51

Wenn du auf 6 aufrundest, machst du einen Fehler von -7.0% (Tabelle 68). 
Das ist für UART schon happig. Zum Vergleich: Für den Empfängermodus 
gibt Atmel einen "Recommended Max  Receiver Error (%) von +- 2.0% vor 
(Tabelle 61)...

Wie sieht es mit den Bits überhaupt aus? Leider hast du die 
ASCII-Darstellung im Empfangsprogramm gewählt, die BIN-Darstellung wäre 
jetzt hilfreicher. Das blau unterlegte a kann ich so nicht zuordnen.

Gesendet  wird "1". In HEX ist das 0x31 und in BIN 0b00110001.
Empfangen wird "q". In HEX ist das 0x71 und in BIN 0b01110001.

Verdammt nah dran... ich schätze mit einem besseren UART-Baudratenwert 
mit weniger Fehlanpassung wird das was.

Ich würde zuerst mal eine Baudrate mit weniger Fehlanpassung versuchen 
und da springen 2400 und 4800 Baud sprichwörtlich ins Auge: 0,2% 
Fehler... Und höhere Baudraten dann später mit externem Quarz.





Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW. ich würde den µC mal auf "Dauerfeuer" einstellen:
// Quellcode wir dein serial.c nur main() anders:

int main(void)
{
    unsigned char c;
 
    while(1)    // für immer und ewig
    {
        // Alle möglichen Bytes inkl. solche mit gesetztem 8. Bit
        for (c = 0; c <= 255; c++)
        // Alternative z.B. nur Grossbuchstaben
        // for (c = 'A'; c <= 'Z'; c++)
        {
            uart_putc(c);
        }
    }
    
    return 0;   // wird nie erreicht
}


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm: uart_init(); vor dem while(1) noch einfügen.

Autor: Falk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Verdammt nah dran... ich schätze mit einem besseren UART-Baudratenwert
> mit weniger Fehlanpassung wird das was.

> Ich würde zuerst mal eine Baudrate mit weniger Fehlanpassung versuchen
> und da springen 2400 und 4800 Baud sprichwörtlich ins Auge: 0,2%
> Fehler... Und höhere Baudraten dann später mit externem Quarz.

Der interen RC-Oszillator ist für solide UART Kommunikation viel zu 
ungenau!
Also gleich nen Quarz benutzten (FUSE-Bits), dann klappts auch mit dem 
UART ohne Baudratenquarz.

MfG
Falk



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.