Forum: Mikrocontroller und Digitale Elektronik Maximale Geschwindigkeit des Hardware UARTs beim AT90S8515??


von Jakob (Gast)


Lesenswert?

Hi,

mal eine kurze Frage (bin im Datenblatt nicht fündig geworden): Wie
groß ist die maximale Empfangsgeschwindigkeit des Hardware-Uarts beim
AT90S8515?

Der Hintergrund ist folgender: Ich habe immer mit ATmega8 uCs bei 8/16
Mhz DMX Signale (250000 bit/s) empfangen. Das hat immer schön geklappt.
Jetzt versuche ich das Gleiche mit einem AT90S8515@8Mhz und bekomme nur
Wirsing aus der Schnittstelle raus. Kann das sein, dass der Hardware
Uart nicht schnell genug ist?

Hier mal der Code (Bascom):

$crystal = 8000000
$baud = 250000
Config Portb = Output


Dim Value As Byte

Dim Dmx_count As Word
Dim Dmx_count_temp As Byte
Dim Dmx_byte As Byte
Dim Dmx_adr As Word
Dim Dmx_buf As Byte
Dim Dmx_rxd As Byte
Dim Resetcount As Long
Dim Tmp_rst_cnt As Long
Dim Tmp_send_chnls As Word

Portb.0 = 0
Waitms 500
Portb.0 = 1


On Urxc Rec_isr
Enable Urxc
Enable Interrupts

Do

Dmx_adr = 2
If Value = 128 Then Toggle Portb.1

Loop

Rec_isr:
Config Watchdog = 512
Start Watchdog
$asm
.def Uart_status = R16
.def Uart_byte = R17
.def Uart_temp1 = R18
.def Uart_temp2 = R19

      IN Uart_status,USR
      IN Uart_byte,UDR

      SBRC Uart_status,FE
      RJMP  Asm_reset
      RJMP  Asm_Loop1

Asm_reset:
      LDI Uart_temp1,$00
      STS {Dmx_count_temp} , Uart_temp1
      STS {Dmx_byte} , Uart_byte
      RJMP Asm_exit
Asm_loop1:
      STS {Dmx_byte} , Uart_byte
Asm_exit:
$end Asm

   If Dmx_count_temp <> 0 Then
        Incr Dmx_count
           If Dmx_adr = Dmx_count Then
               Value = Dmx_byte
           End If
   Else
      Dmx_count = 0
      Dmx_count_temp = 1
   End If
Stop Watchdog
Return

Den Code selbst hat hier irgendjemand im Forum mal gepostet, und ich
hatte ihn auch erfolgreich bei mehreren uCs zum laufen gebracht (alles
Mega-Typen). Bei diesem Code scheint auch der Watchdog dauernd
anzuspringen, der uC verbleibt fast im Dauer-Reset. Weiß einer von euch
woran das liegen könnte?

Danke für Hilfe schonmal!

von Hanes (Gast)


Lesenswert?

Der 90s8515 ist ein Auslaufmodel, der Nachfolger/Ersatz ist der
mega8515. Es kann schon sein, dass dieser langsamer ist, als der mega8.
Müsste ich aber auch erst nachschauen.

von Christoph Kessler (Gast)


Lesenswert?

Wieviel Zeit hat der 8515 bei 8 MHz und 250kBd? 8*4= 32 Takte pro Bit
mal vermutlich 10 Bit/Byte sind 320 Takte, also am Abholen der Daten
kann es eigentlich nicht liegen.
Den Watchdog habe ich noch nicht benutzt, der könnte im ATMega anders
sein.
Wozu werden Interrupts enabled, wenn die UART-Abfrage dann im
Polling-Betrieb erfolgt? Löst der UART eventuell gleichzeitig einen
Interrupt aus?

von Jakob (Gast)


Lesenswert?

Hi,

erst mal danke für die Antwort. Ich weiß schon, das der 90s8515 nen
Auslaufmodell ist, aber der lag bei mir noch in der Grabbelkiste drin,
daher wollte ich den mal zu was sinnvollem verarbeiten. Bin inzwischen
schon ein gutes Stück weiter gekommen: Ich kann aus irgendwelchen
Gründen jetzt ein Signal empfangen, aber: Der uC macht ca. alle 3
Sekunden einen Reset (mit der Stopuhr gemessen). Die Zeitspanne ist
immer exakt gleich, das macht mich stuzig. Aber woran das liegt, keine
Ahnung.

von Jakob (Gast)


Lesenswert?

@Christoph: Ohne Interrupt geht es leider nicht, steht so in der Bascom
Hilfe drin.

von Jakob (Gast)


Lesenswert?

Erfolg! ;-)

Das mit dem Watchdog war ein guter Tipp. Wenn ich folgenden Code
verwende, geht es ohne Probleme:

Config Watchdog = 1024
Start Watchdog

'Code

Reset Watchdog
Stop Watchdog

Der Watchdog scheint sich bei den alten Typen immer weiter
aufzuaddieren, es sei denn, er wird resetet. So läufts ohne Probleme.

Danke nochmal!

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.