PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : synchroner Datemempfang über UART mit Bascom



Nordi^
30.03.2008, 08:55
Hi, ich bin mit meinem Latein fast am Ende, ich versuche ein synchrones Modem mit Bascom über UART auszulesen.
Leider enthält der Datenstrom keine Paritätsbytes bzw. Stopbits.

Das Taktsignal ist an XCK angeschlossen, den UART initalisiere ich wie folgt:


Config Com1 = 1200 , Databits = 8 , Parity = None , Stopbits = 1 , Synchrone = 1 , Clockpol = 0
$baud = 1200

Ucsrc.umsel = 1

Config Serialin = Buffered , Size = 6

....

Do

Temp2 = Ischarwaiting()

If Temp2 <> 0 Then

_lcd_e = 128

Lcd " " ; Bin(temp2)

'Clear Serialin

End If

Loop
Dabei kommt alles nur kein Brauchbares Signal bei raus. Stelle ich "Synchrone = 0" bekomme ich Daten nur fehlen dabei einige Bits weil mir Paritätsbits und Stopbits fehlen.

Ich habe im Netz nur folgende Anleitung mit einem externen Sync to Async Bauteil gefunden. http://www.eetchina.com/ARTICLES/2002OCT/A/2002OCT15_ICD_NTEK_CT_ID_AN01.PDF?SOURCES=DOWNLOAD

Dazu müßte doch auch mein Atmega32 bei 16MHz in der Lage sein?

Was mache ich falsch?

Gruß Nordi

python_rocks
30.03.2008, 09:18
Hallo Nordi!

Du schreibst, dass du kein Stopbit bekommst, setzt aber trotzdem den Parameter ``Stopbits = 1``. ? Nur ein Schreibfehler?

mfg
Gerold
:-)

PicNick
30.03.2008, 09:44
Wenn dein Mega mit der UART synchrones Arbeiten nicht im repertoire hat, (also eine USART hat) bist du mit dem SPI, glaub ich, besser dran.
Oder eben zu Fuß.

Nordi^
30.03.2008, 10:16
@python_rocks: stopbit = 0 will Bascom nicht dann meckert er

@ PickNick: Zu Fuß ist es am laufen, ich wollte nur den Buffer, sowie den Empfangsinterrupt nutzen da ich mittlerweile mit dem Timing etwas Probleme bekomme.
Der Mega32 hat doch Usart, im Datenblatt kann ich doch die Register auf synchron setzen oder habe ich da etwas falsch verstanden?

Mit SPI hab ich es auch schon mal probiert, bekomme dort auch keine Brauchbaren Daten heraus. Habe es so gemacht wie es in der Bascom hilfe steht.
Achso, die länge des Datenpakets ist 64 Bit

PicNick
30.03.2008, 12:14
I see. Du mußt aber doch nicht mit Bascom Konfigurieren.
Hast du schon versucht, die USART direkt mit den Registern zu bearbeiten ? (UCPOL beachten)

Bei aller Liebe hab' ich den Bascom in Verdacht, dass er da irgendeinen Unsinn fabriziert.
Der Mega-Receiver ignoriert lt. DataSheet die Stopbit-Angabe (was sollt er auch damit anfangen). Also kann es nicht wirklich fehlen.

Btw: Geht's nur um "synchron" oder kriegst du vielleicht SDLC-Frames ?

python_rocks
30.03.2008, 12:28
@python_rocks: stopbit = 0 will Bascom nicht dann meckert er
Hallo Nordi!

Ich glaube, dann sollstest du das Caching lieber selber in die Hand nehmen und auf CONFIG COM1 und vielleicht auch auf CONFIG SERIALIN verzichten. Es kann schon sein, dass Bascom das nicht richtig macht (ist nur eine Vermutung).

Oder, hast du es schon mit OPEN statt mit CONFIG COM1 versucht? -- Ach so, ich lese gerade "stop bits can be 1 or 2" :-(

Wie ich das sehe, hat Bascom in den UART-HighLevel-Befehlen keine Unterstützung für USART mit drinnen. Also musst du die entsprechenden Einstellungen händisch setzen.

mfg
Gerold
:-)

python_rocks
30.03.2008, 12:38
Hallo!

Auszug aus dem ATmega32-Datenblatt:
"Supports Serial Frames with 5, 6, 7, 8, or 9 Data Bits and 1 or 2 Stop Bits"

Also muss ich Bascom damit wieder entlasten. Es unterstützt genau das was auch der ATmega32 unterstützt.

mfg
Gerold
:-)

PicNick
30.03.2008, 12:41
@python / Nordi

Bascom kannst du in Teilen verwenden
$BAUD setzt nur die Baudrate (und rechnet sie aus)
CONFIG serialin=buffered, size= nn
erzeugt "nur" einen tadellosen Ringbuffer mit der ISR

Die sind beide unabhängig (so wie ischarwaiting und inkey etc.)

Nur mit dem CONFIG COM wird es interessant

Nordi^
30.03.2008, 17:44
Die Register müßte ich ja dann wie folgt setzen:



UCSRA = &B100110??
UCSRC = &B11000110

$baud = 1200

Config Serialin = Buffered , Size = 6

Enable Interupts

....

Do

Temp2 = Ischarwaiting()

If Temp2 <> 0 Then

_lcd_e = 128

Lcd " " ; Bin(temp2)

'Clear Serialin

End If

Loop



Klappt nur leider nicht so wie gewollt, ich empfange damit keinerlei Daten.
Auf´m LCD kommen nur Nullen.

Ich verstehe auch nicht das man die Stopbits nicht einfach ausschalten kann.

MfG Nordi

Vitis
30.03.2008, 22:12
also so recht schlau werd ich aus deiner Beschreibung nicht ...
wills Du nun das Ding unter

http://www.eetchina.com/ARTICLES/2002OCT/A/2002OCT15_ICD_NTEK_CT_ID_AN01.PDF?SOURCES=DOWNLOAD"]http://www.eetchina.com/ARTICLES/2002OCT/A/2002OCT15_ICD_NTEK_CT_ID_AN01.PDF?SOURCES=DOWNLOAD

an Deinen Mega hängen oder haste n Synchrones Modem?

Wenn ersteres der Fall währe müsstest Du das Teil nur mit 2400 / 1200 Baud
anfahren und das währs dann schon (start- und stopbit gehören dann dazu)
im zweiten Fall währs vermutlich hilfreich nen Schaltplanauszug zu sehen
und / oder das Datenblatt von Deinem Modem um sinnvoll helfen zu können