ATMega128 UART Testen

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

Antwort schreiben

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.

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.