Forum: Mikrocontroller und Digitale Elektronik Mega32 Seriell


von Parker (Gast)


Lesenswert?

Hallo,

Irgendwie komme ich mit dem Atmel Mega32 nicht so zurecht, wenn ich mit
Bascom folgendes Programm für einen 90S8515 teste dann klappt alles und
die Led schaltet ein wenn ich mit einem Terminal TEST sende. Wenn ich
das Programm aber nun in einen M32 flashe klappt das irgendwie nicht
mehr. Kann mir da jemand helfen? Hat das vielleicht was damit zu tun
das der Mega32 jetzt einen Buffer für einkommende Zeichen hat?
Der M32 scheint ansonsten zu funktionieren, also ich kann auch auf der
Seriellen Schreiben und das auch am Telnet sehen.
Hoffe mal das mir einer von euch helfen kann.

Danke schon mal
Parker


$regfile = "m32def.dat"
$crystal = 8000000
$baud = 19200


Ddrb = 255
Portb.0 = 0                                                 'Debug
LED
Portb.1 = 1                                                 'LED
Power_ON on
Portb.2 = 1                                                 'LED_2
off
Portb.3 = 1                                                 'LED_3
off

Const Cmaxchar = 40                                         'number of
characters

Dim B As Bit
Dim C As Bit
Dim E As Bit
Dim Bc As Byte                                              'byte
counter
Dim Buf_2 As String * 5
Dim Buf As String * Cmaxchar                                'serial
buffer
Dim D As Byte
B = 0
Buf = ""

On Urxc Rec_isr                                             'define
serial receive ISR
Enable Urxc                                                 'enable
receive isr
Enable Interrupts                                           'enable
interrupts to occur

Do
Portb.1 = 0                                                 'power LED
on
Print "Hallo Welt"                                          'to see
OSC and Compiler Settings are OK for Serial

  If B = 1 Then

       Buf_2 = Mid(buf , 1 , 4)
            If Buf_2 = "TEST" Then
               Portb.0 = 1
               Reset B
            End If
  End If

     Buf = ""
     Bc = 0
     Reset B                                                'reset
receive flag


Loop


Rec_isr:
  Toggle Portb.2
  If Bc < Cmaxchar Then                                     'does it
fit into the buffer?
     Incr Bc                                                'increase
buffer counter
         If Udr = 10 Then
            Buf = Buf + Chr(0)
            Bc = Cmaxchar
            B = 1
         Else

            Buf = Buf + Chr(udr)                            'add to
buffer

         End If

  End If

Return

von Parker (Gast)


Angehängte Dateien:

Lesenswert?

Die Formatierung ist nicht so gelungen darum nun im Anhang noch einmal
das File.

Danke
Parker

von Kutschenegger (Gast)


Lesenswert?

Erstmal würde ich, nur testweise mal auf
Interrupts verzichten und es einfach mal so testen.

Ich vermute aber mal, dass du das schon richtig
gebastelt hast. Deshalb Plan B: Wie stehts mit der
Taktung deines M32 ?? Die musst du natürlich kennen und
Bascom mitteilen. Sonst gibts einen falschen Wert im
UBRR. Das wäre schlecht.

Die Tatsache, dass du die Zeichen im Terminal siehst,
weist nur daruf hin, dass am anderen Ende jemand ist,
der fleißig die Zeichen aufnimmt. Ob er sie "versteht"
(aufgrund falscher Baudrate zB.) ist eine andere Frage.

Best regards

von Parker (Gast)


Lesenswert?

hi,

die Taktung ist ein externer Chrystl mit 8MHz was ich Bascom auch
mitgeteilt habe, auch die Fusebits sind richtig gesetzt. CPU läuft mit
8MHz und auch wenn ich eine LED toggle stimmt die gemessene Zeit mit
der errechneten überein.
Sonst würde Telnet auf dem PC mit einer einstellung von 19.200 wie in
Bascom die Zeichen auch nicht empfangen.
Die ISR würde ich nur ungerne umschreiben, zu viel arbeit.
Mein Programm soll ja später mal mit der ISR laufen.
Das gleiche Programm läuft ja auf einem 8515 ohne weitere Probleme.
Hat noch jemand eine Idee was ich noch probieren könnte?
THX

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.