www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega128 UART Testen


Autor: Andreas Kasper (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo

ich soll für mein studium eine software für den atmega128 entwickeln. 
ein teil davon ist den uart in betrieb zu nehmen. i hab jetzt mal einen 
code geschrieben. das problem is, dass i keine hardware zum testen habe. 
ich wollte nun im avr-studio das programm simulieren, aber auf dem Tx 
pin steht immer nur eine 1. - mache ich etwas falsch, oder kann man das 
im avr studio ned simulieren?? falls es dort ned zu simulieren geht und 
jemand einen mega128 hat dann würde es mir sehr weiter helfen wenn er 
das programm testet und mir sagt ob es geht oder ned.

vielen dank
andreas kasper

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mich nicht irre, sieht man im I/O-View von AVRStudio nie 
einen USART-Pin wackeln.

Code muss ich erst mal durchsehen...

Gruß,
Magnetus

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  // 8 DATA Bit
>  set_bit( UCSR0C, UCSZ00 );
>  set_bit( UCSR0C, UCSZ01 );
>  set_bit( UCSR0B, UCSZ02 );

Hiermit setzt du die Datenlänge nicht auf 8, sondern auf 9 Bits! Korrekt 
wäre an dieser Stelle:

// 8 DATA Bit
set_bit( UCSR0C, UCSZ00 );
set_bit( UCSR0C, UCSZ01 );
clear_bit( UCSR0B, UCSZ02 );

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>  // RX Enable
>  set_bit( UCSR0B, TXEN0 );

Der Kommentar passt nicht ganz zum Code ;-)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>  void uart_send( uint8_t zeichen )
>  {
>    while ( ! ( UCSR0A & ( 1 << UDRE0 ) ) )
>      UDR0 = zeichen;
>  }

Das ist Nonsense. Diese Funktion würde UDR0 erst beschreiben, wenn schon 
zu sendende Daten drin wären (klingt paradox... isses in dem Fall auch!)

Mach es lieber so:

void uart_send( uint8_t zeichen )
{
  while (!(UCSR0A&(1<<UDRE0));  // Warte, bis Puffer frei ist
  UDR0 = zeichen;               // jetzt das Byte ins UDR schreiben
}

Gruß,
Magnetus

Autor: Andreas Kasper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank!!

solche fehler sollten ja eigentlich nicht passieren wenn man sich 
richtig konzentriert.

so wie es aussieht kann i den code heute noch testen.

lg
andi

Autor: Tobi O. (der_ossi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>do
>{
>
>  uart_send( 'a' );
>} while ( 1 );

versuch hier lieber erstmal:

do
{

  uart_send( 'a' );
} while ( 0 );

dann wird es nur einmal ausgefuehrt... Das muesste ja reichen... Ich hab 
bei der Simulation immer wieder probs gehabt, wenn ich in einer schleife 
dauerhaft etwas gesendet habe

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>dann wird es nur einmal ausgefuehrt...
und was macht der Controller nach der Schleife? Rennt ins Nirvana!

Wenn man sich uart_send() genauer anguckt, und den Fehler, den Magnus 
Müller schon angemäkelt hat, beseitig, wird wunderschön regelmässig ein 
"a" übertragen.
Sonst kann eigentlich nur ein Hardware-Fehler vorliegen.

Es bietet sich aber auch an, die Register komplett neu zu beschreiben 
und nicht nur Bits zu setzen - es könnten (sollten aber eigentlich 
nicht) noch irgendwelche Bits in den Register gesetzt sein, die zu 
"wirrem" Verhalten des Controllers führen können.

Autor: Tobi O. (der_ossi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und was macht der Controller nach der Schleife? Rennt ins Nirvana!

na dann kann man ihn ja in eine einfach schleife setzen, die nix macht 
;)

zb. while( 1 );

kommt ja bei der simulation nich drauf an :)

aber hast natuerlich recht... wenn das 'a' regelmaessig ankommt is 
natuerlich auch gut ;)

Autor: Andreas Kasper (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
danke für die unterstützung.

leider konnte ich das programm immer noch nicht auf der hardware testen, 
da gestern alle plätze im labor belegt waren. also hab ich die software 
im avr studio erweitert und simuliert (dort funktioniert sie 
anscheinend). trotzdem würde es mir sehr helfen wenn trotzdem jemand das 
programm testen könnte und mir ein kurzes feedback geben.

vielen dank
andreas kasper

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.