Gast
#271772
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!