- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 9 von 9

Thema: serielle Datenübertragung ohne vernünftiges Protokoll

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81

    serielle Datenübertragung ohne vernünftiges Protokoll

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe hier einen Controller der über eine serielle Schnittstelle verfügt. Allerdings werden die Daten ohne richtiges Protokoll übertragen, soll heißen es werden einfach nur 8Bit nacheinander ausgegeben.

    Da ich jetzt aber eine verbindung zum PC aufbauen möchte und da Start- bzw. Stop-Bits brauche habe ich ein kleines Problem.

    Kennt ihr eine Möglichkeit, wie ich das Start und Stop Bit evtl. über eine Schaltung generieren lassen kann? Es soll natürlich so wenig aufwendig wie möglich sein, es soll einfach nur schnell funktionieren.

    Danke...

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    35
    Beiträge
    1.461
    HI

    Was ists denn für einer (controller)?
    Normalerweise kann man das in den entsprechenden Registern einstellen...
    Ein UART ohne Start/Stopbits wär ja schlimm.

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81
    Tja, ist eben schlimm.

    Das ist ein Z80 Derivat - aka Gameboy. Ich versuch gerade ne Softwarelösung, bin allerdings gerade nicht allzu optimistisch und außerdem wird die wohl langsamer sein als ne Schaltung, was die Ausführung anderen Codes auf dem Gameboy anbelangt.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    35
    Beiträge
    1.461
    HI

    Hm. Kannst du die Signale via MAX232 am PC auslesen?

    Meines Wissens hat der Z80 keinen UART. Da brauchst du einen Erweiterungsbaustein...
    Meines Wissens ein SIO-Register...

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81
    Ja... also das läuft über ein Schieberegister am Gameboy. Ein Byte wird rausgeschoben und gleichzeitig von außen wieder rein. (Taktsignal kann man als intern oder extern auswählen)

    Den Pegelwandler hab ich mir schon zusammengelötet, nur würde ich nicht so gerne den PC an den GB anpassen sondern eher andersrum. Ich werds wahrscheinlich mal mit nem AVR probieren, der dem GB den Takt angibt und dann die 8Daten-Bits aufnimmt und anschließend über eine vernünftige Schnittstelle zum PC sendet. Allerdings wäre es mir lieber dafür nen speziellen IC nehmen zu können und keine programmierbare Logik (wegen dem geringeren Aufwand).

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    35
    Beiträge
    1.461
    Hi!

    ...aha...

    Dann schau mal nach dem Z80 SIO, das ist so eine vernünftige Schnittstelle...

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.04.2005
    Ort
    Weilburg
    Beiträge
    676
    Prostetnic Vogon Jeltz

    2B | ~2B, That is the Question?
    The Answer is FF!

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81
    Vielen dank für deine Mühen. Allerdings habe ich leider keinen GB-Advance sondern ein Uraltmodell zur Verfügung.

    Ich bin jetzt schonmal soweit, dass ich Daten über die Schnittstelle verschicken kann. Das läuft alles in einer Assembler-Routine, welche mir Start- und Stopbit generieren kann.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.04.2005
    Ort
    Weilburg
    Beiträge
    676
    Dann bist du am schreiben einer Software-UART ?

    Ich hab da mal was aus meinem Historischen Museum.
    Ist für einen 8080 ASM - sollte aber mit ein wenig Mühe auf Z80_ASM umzubauen sein.
    Code:
    ; Dokumentation zum Speakeasy I/O Board von George Morrow Mikro Stuff
    ;
    ;
    ;	THE SERIAL DATA INPUT ROUTINE WITH READER CONTROL AND ECHO OPTIONS:
    ;	Aufrufbedingungen:
    ;	(A) 	Die Speicherstelle SCON muss auf den richtigen wert ge-
    ;		setzt sein, vorzugsweise unter Benutzung der unten beschrie-
    ;		benen DETCT-Routine. Dies ist notwendig, damit die Länge
    ;		einer Bitzelle, wie sie von der Routine erwartet wird, mit
    ;		der Länge der Bitzelle der an das Interface angeschlossenen
    ;		Einheit übereinstimmt.
    ;	(B)	Register B dient als Optionsregister.
    ;		1. Ist Bit 0 eine Eins, so werden Echos an den Drucker
    ;		unterdrückt; anderfalls werden die Zeichen sofort nach
    ;		vollständiger Übernahme der zugehörigen Bits ausgedruckt.
    ;		2. Ist Bit 7 eine Eins, so wird ein eventuell am Interface
    ;		angeschlossener Lochstreifenleser eingeschaltet bis
    ;		ein Startbit auftritt und dann abgeschaltet.
    ;	(C)	Die Routine kehrt mit dem empfangenen Datenwort in Register
    ;		D in das übergeordnete Programm zurück.
    
    816f	78		INPUT	MOV A,B		;Conditionally -
    8170	07			RLC		;Turn ON -
    8171	D3 06			OUT READR	;the paper tape reader.
    8173	2A F3 83		LHLD SCON	;Get The Speed Constant -
    8176	E5		SWAIT	PUSH H		;and save on the stack.
    8177	1E FF			MVI E,-1	;initialize the shift reg
    8179	DB 05		SLOOK	IN SERAL	;get the input data -
    817b	1F			RAR		;and test it -
    817c	da 79 81		jc slook	;for a start bit.
    817f	cd a0 81		call delay	;wait half a -
    8182	e1			pop h		;bit time -
    8183	db 05			in seral	;and verify -
    8185	if			rar		;that a start -
    8186	da 76 81		jc swait	;bit is present.
    8189	16 ff			mvi d,-1	;initialize other of shift reg
    818b	af			xra a		;stop the -
    818c	d3 06			out readr	;reader.
    818b	e5		GTBIT	push h		;update the stack
    818f	29			dad h		;calculate the speed -
    8190	2b			dcx h		;constant for a full bit time.
    8191	db 05			in seral	;get the input
    8193	5f			mov e,a		;update the shift reg
    8194	cd a0 81		call delay	;delay 1 bit time and shift d-e
    8197	e1			pop h		;get the speed constant
    8198	da 8e 81		jc gtbit	;was the start bit shifted to carry?
    819b	3e 01			mvi a,1		;yes. leave with the -
    819d	d3 05			out seral	;printer in the space made.
    819f	c9			ret
    ;
    ;	Serial delay routine used in conjunction with the
    ;	serial input and output rotines.
    ;	calling conventions:
    ;	(A)	H-L is initialized with a value which
    ;		determines the time before the routine
    ;		returns to the calling program given
    ;		by 53(H-L) + 58 machine cycles.
    ;	(B)	Bits 0 of registers B and E are
    ;		initialized to values consistent with
    ;		these bits being ored together and
    ;		to the serial output device.
    ;	all timings assumed 1 wait state per fetch.
    81a0	7b		DELAY	mov a,e		;conditionaly -
    81a1	b0			ora b		;output bit 0 of e -
    81a2	d3 05			out seral	;to the serial device.
    81a4	2b			dcx h		;decrement -
    81a5	7c			mov a,h		;the h-l pair -
    81a6	b5			ora l		;and test -
    81a7	c2 a0 81		jnz delay	;for zero
    81aa	7a			mov a,d		;rotate d-e -
    81ab	1f			rar		;one -
    81ac	7b			mov a,e		;bit -
    81ad	1f			rar		;position -
    81ae	5f			mov e,a		;to the -
    81af	7a			mov a,d		;right -
    81b0	1f			rar		;with end around -
    81b1	57			mov d,a		;bit preserved.
    81b2	c9			ret
    
    ;	Serial output routine.
    ;	Calling conventions:
    ;	(A)	reg a is initialized to an 8-bit value
    ;		to be serially sent to the serial output device.
    ;	(B)	the on-board ram location SCON (serial
    ;		speed constant) must be initialized to
    ;		the proper value preferable using the
    ;		DETCT routine below. this is so that
    ;		the cell time assumed by the routine and
    ;		the cell time for the device connected
    ;		to the interface are compatible.
    ;	The routine starts by sending a zero for one cell
    ;	time to the serial device connected to the interface.
    ;	it next sends bit 0 of reg a, followd by bits
    ;	1 through 7. it then sends a one for two cell times
    ;	as rest bit and returns to the calling program.
    ;	all timing assumes 1 wait state per fetch.
    ;	including the return address of the calling program,
    ;	4 levels of the stack are used by the routine.
    ;	
    ;	Register Map:
    ;	A:	Serial Output Data.
    ;	B:	The Routine loads B with 2(A) to force
    ;		output when the delay routine is called.
    ;	C:	used as a bit counter and inittialized
    ;		to 11 decimal.
    ;	DE:	16-bit storage shift register for output
    ;		to the serial output device.
    ;	HL:	delay time count.
    
    81b3	87		SROUT	add a		;add a start bit
    81b4	47			mov b,a		;make bit 0 of b a zero
    81b5	5f			mov e,a		;shifted data to e
    81b6	3e 0b			mvi a,11	;this is the bit count & the rest bits
    81b8	4f			mov c,a		;count to reg c
    81b9	17			ral		;load d with the rest -
    81ba	57			mov d,a		;bits and high order data bit.
    81bb	2a f3 83	OLOOP	lhld SCON	;get the speed constant
    81be	2a f3 83		lhld SCON	;padding
    81c1	29			dad h		;adjust for output -
    81c2	2b			dcx h		;loop.
    81c3	cd a0 81		call delay	;output data bit and shift
    81c6	0d			dcr c		;decrement bit count
    81c7	c2 bb 81		jnz OLOOP
    81ca	c9			ret
    
    ;	Serial Device Speed Detection Routine:
    ; Diese Routine sollte benutzt werden wenn das Gesamtsystem ein-
    ; geschaltet wird. Die benutzte serielle Eingabeeinheit sollte an
    ; das Interface angeschlossen sein. Die serielle Einheit ist dann ein-
    ; zuschalten und danach die Routine zu starten.
    ; Dann sollte der Benutzer die Wagenrücklauftaste (return, carriage return)
    ; betätigen. Die DETCT-Routine erwartet den Empfang dieses ASCII-Zeichens 
    ; und kann damit die Baudrate der Einheit messen und den Speicherplatz SCON setzen.
    ; Die Routine bleibt dann auf dem dynamischen Halt stehen.
    
    81cb	31 e0 83		lxi sp,83e0h	;initialize the stack pointer
    81ce	16 06		DETCT	mvi d,6		;transition counter
    81d0	4a			mov c,d		;bit 0 of c is -
    81d1	0c		TLOOP	inr c		;the important bit here.
    81d2	21 01 00		lxi h,1		;offset for hl
    81d5	db 05		GETIN	in SERAL	;get the input
    81d7	d3 05			out SERAL	;echo
    81d9	a9			xra c		;compare with bit 0 of c
    81da	1f			rar
    81db	23			inx h
    81dc	d2 d5 81		jnc GETIN	;wait if no transition
    81df	e5			push h		;save the delay time
    81e0	15			dcr d
    81e1	c2 d1 81		jnz TLOOP
    81e4	e1			pop h		;get the 3 zero bits time
    81e5	e1			pop h		;get the 2 one bits time
    81e6	c1			pop b		;get the 1 zero bit time
    81e7	09			dad b		;add together
    81e8	c1			pop b		;get the 1 one bit time
    81e9	09			dad b		;add to previous subtotal
    81ea	c1			pop b		;discard the start bit -
    81eb	c1			pop b		;and the infinite string -
    81ec	16 03			mvi d,3		;of rest bits.
    81ee	af		SLOOP	xra a		;divide -
    81ef	7c			mov a,h		;the -
    81f0	1f			rar		;total -
    81f1	67			mov h,a		;by -
    81f2	7d			mov a,l		;eight -
    81f3	1f			rar		;to -
    81f4	8f			mov l,a		;calculate -
    81f5	15			dcr d		;half the -
    81f6	c2 ee 81		jnz SLOOP	;data bit time -
    81f9	2b			dcx h		;adjust for other -
    81fa	22 f3 83		shld SCON	;routines and save.
    81fd	c3 fd 81	STOP	jmp STOP	; dynamic halt
    
    ; 1975 - Bill Godbout and George Morrow (who would later build the Morrow Computer) 
    ; build the first 16-bit computer with RAM and a built-in cassette interface.
    ; An advertisement for the unnamed computer appears in the first issue 
    ; of Byte Magazine, but not one of the computers is sold.
    Das Bord steckt in so einem Computer (1975)
    Bild hier  
    Prostetnic Vogon Jeltz

    2B | ~2B, That is the Question?
    The Answer is FF!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen