mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega32 Seriell


Autor: Parker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Parker (Gast)
Datum:
Angehängte Dateien:

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

Danke
Parker

Autor: Kutschenegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Parker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.