Hi, woran könnte es liegen dass währen meines Transfers ein Framing Error auftritt. ich verschicke 11 Datenbytes asynchron (UART) über die RS232 an meinem Mikrocontroller AT90S8515 --> heisst das mein Start und Stoppbit nicht richtig erkannt werden?? --> oder liegt es daran, dass zuviele Daten gesendet werden?? darf in einem Programm sowohl das UART als auch die SPI verwendet werden?? dankeschön
Hi Der 8515 kann eigentlich nur 8 oder 9 Datenbits.Wie verschickst du 11 Datenbytes? MfG Spess
@ manuete (Gast) >woran könnte es liegen dass währen meines Transfers ein Framing Error >auftritt. Framing Error bedeutet, dass das Stopbit nicht 1 ist. Richtige Baudrate und Format eingestellt? Läuft dein uC mit Quarz? http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART#Senden >darf in einem Programm sowohl das UART als auch die SPI verwendet >werden?? Ja, warum nicht? MFG Falk
hi Spess Über Docklight oder LabView steuere ich das ganze an...also mit beiden funkts net... In meinem Programm, speichere ich die Empfangenen Bytes einzeln auf dem Speicher die ich dann weiterverarbeite und über die SPI an Schieberegister weitersende
Spess53 wrote: > Der 8515 kann eigentlich nur 8 oder 9 Datenbits.Wie verschickst du 11 > Datenbytes? Bit != Byte...
Hi @Johannes: Richtig! Hoffe das der Sinn der Frage trotzdem verstanden wurde. Mfg Spess
Hi Das UART-Datenregister ist 8 Bit breit. Zusätzlich steht in einem anderen Register noch ein Bit zur Verfügung. Es können in einem Frame maximal 9 Datenbit gesendet oder empfangen werden. Wie hast du dein UART eigentlich initialisiert? MfG Spess
Framing Error heißt zunächst nur, dass mit dem Frame-Format etwas nicht stimmt, also dass z.B. kein Stopbit an der richtigen Stelle erkannt wird. Das hat aller Wahrscheinlichkeit nach damit zu tun, dass entweder die Takte von Sender und Empfänger nicht ausreichend gut übereinstimmen, oder dass der Sender ein anderes Frame-Format verwendet als der Empfänger. Hast Du vielleicht beim Sender die Parity aktiviert und beim Empfänger nicht? Oder erwartet der Empfänger 2 Stopbits, der Sender schickt aber nur eins? Check noch mal alle Einstellungen...
.EQU fbd = 9600 ; Baudrate des UART .EQU bddv = (fqu/(16*fbd))-1 ; Baudraten-Teiler .EQU fqu = 4000000 ; Quarzfrequenz des AVR ldi temp1,bddv ; Baudrate des UART einstellen out UBRR,temp1 sbi UCR,RXEN sbi UCR,TXEN Empfangen: ;Empfangsroutine (11Bytes) sbis USR,RXC rjmp Empfangen FrameError: sbic USR,FE rjmp Empfangen in temp1,UDR st X+,temp1 inc SchlZaY cpi SchlZaY,11 brne Empfangen
ja auch im Terminal alle Einstellungen vorgenommen also wenn ich mein Programm aufm STK500 teste dann tritt der Framming Error net auf...;)
ich verschicke: über Docklight z.B. dies 02 FF FF FF FF FF FF FF FF 00 03 (11Bytes) über meine Empfangsroutine müssten doch diese 11Bytes (1Byte = 10Bit inklusive 1Start-und 1Stoppbit) die für die Weiterverarbeitung dann bereitstehen
1 | .EQU bddv = (fqu/(16*fbd))-1 ; Baudraten-Teiler |
2 | .EQU fqu = 4000000 ; Quarzfrequenz des AVR |
Ich würde einen Bezeichner definieren, bevor ich ihn in einer weiteren Definition verwende...
@ manuete (Gast) >ja mit einem Quarz von 4MH >Baudrate 9600 8N1 Sind die Fuses richtig gesetzt, dass der auch verwendt wird? Sonst läuft dein Controller vielleicht mit dem interen RC-OSzillator mit 4 MHz. Sende mal viele Daten vom uC zum PC. Wenn da Aussetzer drin sind stimmt deine Baudrate nicht. MFG Falk
manuete wrote: > über meine Empfangsroutine müssten doch diese 11Bytes (1Byte = 10Bit > inklusive 1Start-und 1Stoppbit) > die für die Weiterverarbeitung dann bereitstehen Wenn sie richtig empfangen und weiterverarbeitet werden, dann ja.
Falk Brunner wrote: > Sind die Fuses richtig gesetzt, dass der auch verwendt wird? Sonst läuft > dein Controller vielleicht mit dem interen RC-OSzillator mit 4 MHz. > Sende mal viele Daten vom uC zum PC. Wenn da Aussetzer drin sind stimmt > deine Baudrate nicht. Der AT90S8515 hat so was tolles wie einen internen Oszi und die dazugehörigen Fuses noch nicht. Das ist ein Steinzeit-µC...
Wenn Du sagst, im STK500 klappts, in Deiner Schaltung aber nicht: Wie sieht die Treiberschaltung der selbstgebauten Schnittstelle aus? Ich würde einen Hardware-Fehler jedenfalls mal nicht ausschließen...
das müsste soweit ok sein da ich es nicht selbst gemacht habe;) die einzigste Abweichung von dem vorgegebenem Schaltplan ist, dass statt 100µF --> 1000µF für den MAX232 gelötet sind (5insgesamt)
Der MAX232 bekommt Kondensatoren von ~1 µF, und nicht 100 oder 1000 µF! Da braucht die Ladungspumpe viel zu lange, um die vollzukriegen.
ooohh sorry ich meinte 1µF gelötet statt die vorgegebenen 100nF auf meinem Schaltplan
@ Johannes M. (johnny-m) >Der MAX232 bekommt Kondensatoren von ~1 µF, und nicht 100 oder 1000 µF! >Da braucht die Ladungspumpe viel zu lange, um die vollzukriegen. Grössere Cs gehen bei Ladungspumpen fast immer. Das einzige was länger dauert ist das erstmalige Hochlaufen. Aber ob das nur 10 oder 1000ms dauert ist egal. Im laufenden Betrieb ist das auch egal. Mit 100 oder 1000uF würde der MAX auch super laufen, die sind nur ein wenig gross ;-) MFg Falk
@ Falk, sprich diesen Fall kann ich dann aussliessen, die 1000nF sind okay müsste dann nur noch nachmessen TX und RX richtig
@ manuete (Gast) >sprich diesen Fall kann ich dann aussliessen, die 1000nF sind okay Ja, so ziemlich alle heute verfügbaren MAX232 und Konsorten kommen mit 1uF aus. Nur ältere Typen bauchen 10uF. MFg Falk
mein UDR Register kann ja wie vorher erwähnt nur 8Bit empfangen (10 bit mit Stopp-und Startbit) und ich versuch ja 11Bytes zu empfangen...aber ja in einzelne Schritte.. senden tue ich aber auf einmal, aber muss doch trotzdem klappen, dafür gibts das Schieberegister des UARTs
könnte es vielleicht sein, das ich beim MAX232 TX und RX vertauscht habe oder so beim Löten auf die Platine und deswegen Framing Error, oder ein unendlicher Error als Antwort erhalte Wie kriege ich das raus, obs vertauscht ist
@ manuete (Gast) >könnte es vielleicht sein, das ich beim MAX232 TX und RX vertauscht habe >oder so beim Löten auf die Platine >Wie kriege ich das raus, obs vertauscht ist Mach ein Loop-back. Sprich, einfach jedes Zeichen was reinkommt gleich wieder ausgeben. Dann must du im Hypererminal deine eingegebenen Zeichen sehen. MFG Falk
danke werd es morgen dann probieren, da ich gerade meinen STK500 abgeschossen habe :)
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.