Mega32 Seriell

Gast #126633
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
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.