PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Serialout



kryzzie
17.02.2006, 21:38
Ich habe mir das "AVR Mikrokontroller Lehrbuch" gekauft. Die darin beschriebene Testplatine mit dem ATmega8 habe ich mir zusammengebastelt. Soweit hat auch alles ganz gut geklappt. Ich habe jetzt ein wenig mit dem RS232-Anschluß rumgespielt.

Folgendes Beispiel lief einwandfrei:



$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

Dim i As Byte

Do
If Usr.rxc = 1 Then
I = Udr
Select Case i
Case "H"
Print "Hallo AVR"
Case "h"
Print "hallo avr"
Case Else
Print "Unbekannter Befehl"
End Select
End If
Loop
End


Wenn ich jedoch versuche den Outputpuffer zu aktivieren erhalte ich garkeine Daten mehr in AVRTerm. Das einzige was ich Hardwaremäßig geändert habe ist, dass ich PD5 mit dem Speaker verbunden habe. Ich höre nur ein gleichbleibenden Ton der sich für mein Ohr genauso hoch anhört, als wenn ich die If-Schleife weglasse.



$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

Config Serialout = Buffered , Size = 20

Ddrd.5 = 1

Do
If _rs_head_ptrw0 = _rs_tail_ptrw0 Then
Print "Dies ist ein Test."
End If
Portd.5 = Not Portd.5
Waitms 1
Loop
End


Für jedweden Tip wäre ich dankbar.

kryzzie

ruediw
17.02.2006, 22:05
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

Config Serialout = Buffered , Size = 20

Ddrd.5 = 1

Do
If _rs_head_ptrw0 = _rs_tail_ptrw0 Then
Print "Dies ist ein Test."
End If
Portd.5 = Not Portd.5
Waitms 1
Loop
End


Ich kenne zwar weder den ATMEGA8 noch dein Basic, aber anhand deines
Codes habe ich einen Verdacht:
1.Im 1.Code holst du das Zeichen aus dem Buffer.
2.Im 2.Code ist für mich nicht zu erkennen wo Du das Zeichen abholst.
3.Stattesen prüfst Du ob kein Zeichen im Buffer ist
(_rs_head_ptrw0=_rs_tail_Ptrw0) und gibst in diesem Falle etwas zum Terminal zurück. Nachher schaltest Du den Lautsprecher ein und wieder
aus. Das heisst, wenn Du den uC einschaltest, kommt kurz deine Meldung
zurück, nacher kriegst Du nichts mehr...

Einfach eine Vermutung ...

kryzzie
17.02.2006, 23:58
Die beiden Codes haben nicht die gleiche Funktion. Das erste Program erhält einen Input und gibt darauf basieren einen Output raus. Das zweite Program gibt einfach dauerhaft den selben Output raus, jedoch gepuffert.

Das Problem war, dass garkein Output zu sehen war, als ich das zweite Program laufen ließ. Die Lösung ist ein einfaches "Enable Interrupts" direkt vor der Do-Loop Schleife. Die ist im AVR-Buch leider nicht angegeben.

Trotzdem danke für deine Hilfe