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!
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.
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?
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.
@Christoph: Ohne Interrupt geht es leider nicht, steht so in der Bascom Hilfe drin.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.