ATMega128 UART Testen

Gast #429218
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
Angehängte Dateien:
Gast #429325
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
Gast #429334
>  // 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
Gast #429410
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
#429438
>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
Gast #429445
>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.
#429459
>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 ;)
Gast #430269
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
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.