Forum: PC Hard- und Software Wie funktioniert ein ACIA für RS232?


von peter bierbach (Gast)


Lesenswert?

Hallo, guten Tag.

Ich spiele mit dem Plus4 und dem ACIA für Rs232 im Vice.
Es hat eine Eigenart.
Es werden erst Daten vom Plus4 zurück gesendet zum Terminal wenn ich 
Daten zum  Plus4 sende. Das heisst ich sende immer zum Plus4 damit er 
aktiv wird zum zurücksenden.

Ich suche bitte mal eine Beschreibung wie der ACIA funktioniert in 
dieser Richtung. Vielleicht kann man mir das einmal erklären?

Danke.

von wendelsberg (Gast)


Lesenswert?

??????

wendelsberg

von Michael U. (amiga)


Lesenswert?

Hallo,

peter bierbach schrieb:
> Ich suche bitte mal eine Beschreibung wie der ACIA funktioniert in
> dieser Richtung. Vielleicht kann man mir das einmal erklären?

Deine ACIA dürfte ein MC6850 sein?
Datenblatt ist im Netz, der Chip macht da sehr wenig, Baudrate und 
Format setzen, feszlegen welche Interrupts aktiviert werden sollen und 
das war es eigentlich. Alles andere macht die Software, Statusregister 
lesen, Daten zum Senden reinschreiben oder angekommene Daten abholen 
usw. usw.
Zusätzliche Empfangs-/Sendebuffer hat er nicht, man muß also angekommene 
Bytes auch rechtzeitig abholen. Alles schon sehr lange her...

Gruß aus Berlin
Michael

von MaWin (Gast)


Lesenswert?

Michael U. schrieb:
> Alles schon sehr lange her...

So weit ich weiss war beim 6850 sehr übel, wenn der Transfer mitten im 
Byte durch Änderung der RTS/CTS abgebrochen wurde, war das Byte weg.

von Mario M. (thelonging)


Lesenswert?


von peter bierbach (Gast)


Lesenswert?

Danke.
Das ist der MOS 6551.

Gruss

von Peter B. (funkheld)


Lesenswert?

------------------------------------------------------------------------ 
--
Alles andere macht die Software, Statusregister
lesen, Daten zum Senden reinschreiben oder angekommene Daten abholen
------------------------------------------------------------------------ 
--
Da brauche ich mal bitte Info.
Welche Register werden benutzt usw : Senden und Empfangen ?

Wollte es mit dem 6502 in ASM.

Danke.

von Mario M. (thelonging)


Lesenswert?


von Peter B. (funkheld)


Lesenswert?

Ja , danke für die Info.

Gruss

: Bearbeitet durch User
von Peter B. (funkheld)


Lesenswert?

Hallo, guten Tag.

Wer kann mir dieses bitte einmal erklären für eine Programmerstellung 
mit ASM? Was muss bitte beachtet werden?

-------------------------
Driver for the 6551 ACIA chip built into the Plus/4. Supports up to 
19200 baud, hardware flow control (RTS/CTS) and interrupt driven 
receives. Note that because of the peculiarities of the 6551 chip 
transmits are not interrupt driven, and the transceiver blocks if the 
receiver asserts flow control because of a full buffer.
--------------------------

Danke.

von Peter B. (funkheld)


Lesenswert?

Ich habe hier das nochmal übersetzt, oben muss ein Fehler sein in der 
englischen Version.

-------------------------------------
Treiber für den im Plus / 4 eingebauten 6551 ACIA-Chip. Unterstützt bis 
zu 19200 Baud, Hardware-Flusskontrolle (RTS / CTS) und 
Interrupt-gesteuerte Empfänge. Es ist zu beachten, dass aufgrund der 
Besonderheiten des 6551-Chips Übertragungen nicht 
unterbrechungsgesteuert sind und der Transceiver blockiert, wenn der 
Empfänger aufgrund eines vollen Puffers eine Flusssteuerung aktiviert.
-------------------------------------

-unterbrechungsgesteuert  ??
-Flusssteuerung aktiviert ??

Wer kann mir das bitte einmal Erkären, ich verstehe es nicht.

Was muss ich da jetzt beachten wenn ich Daten austausche mit  ASM-Code ?

Wie bekomme ich das bitte in den Griff:
...wenn der Empfänger aufgrund eines vollen Puffers eine Flusssteuerung 
aktiviert.

Danke.

: Bearbeitet durch User
von Hermann G. (df2ds)


Lesenswert?

Heute heißt das UART und kann meistens etwas mehr als die ACIA 
(Asynchronous Communication Interface Adapter).

Such' mal nach UART, da solltest du mehr Glück haben...

: Bearbeitet durch User
von Peter B. (funkheld)


Lesenswert?

Danke für die Info.

Im Plus4 Vice macht der ACIA seine Unwesen.
Das normale RS232 funktioniert auf den anderen Geräten : C64 und VIC20.

Mir fehlt die Kenntnis wie das Senden und Empfangen abgestimmt werden 
muss.
Wenn ich Daten zum Plus4 sende kommt die Sendepflicht zurück die ich 
dort aktiviert habe um Daten auf den Notebook zu empfangen die ich haben 
möchte.
Das komische ist das ich den Empfang auf dem Plus4 noch nicht 
eingerichtet habe.

Ich muss den ACIA also Anschubsen vom Notebook sonst kommt nichts rüber 
vom Plus4.


Ich habe hier eine Demo gemacht.
Die Weile-Schleife kann immer laufen , es gibt beim ACIA kein Überlauf. 
Und  es wird auch nichts zum Notebook geschickt.
Wenn ich jetzt irgendwelche Daten rüberschicke pro Tastendruck (1 
Byte)vom Notebook zum ACIA , wird auch das ABCD... einzeln so 
zurückgeschickt vom ACIA wie ich es haben möchte.

Es kommt ein überlauf nach ca. 56 Tastendrücken auf dem Notebook.
Dann wird dauernd das ABC... zum Notebook geschickt als wer der ACIA 
irgendwie abgestürtzt.

Darum verstehe ich nicht wie das Ding arbeitet.
-------------------------
program main;

var
  i : byte;
  p : pointer;

procedure seriell_send();
begin
  asm("
  ldx #1
  jsr $ffc9
  lda $fd
  jsr $ffd2
  ");
end;

procedure seriell_open();
begin
  asm("
  lda #1
  ldx #2
  ldy #2
  jsr $ffba

  lda #2
  ldy #$c0
  ldx #$00
  jsr $ffbd

  jsr $ffc0
  ");
end;

begin
  definescreen();
  clearscreen($20, screen_char_loc);
  clearscreen(white, screen_col_loc);
  screenmemory := #screen_char_loc;

  poke(^$c000,0,22);
  poke(^$c000,1,5);
  seriell_open();

  i:=65;

  while (true) do
  begin
    wait(100);

    if(i =91) then
    begin
      i:=65;
    end;

    poke(^$fd,0,i);
    seriell_send();
    i:=i+1;
  end;

  loop();
end.
--------------------------------

Gruss

: Bearbeitet durch User
von peter bierbach (Gast)


Lesenswert?

Vom 30.03.2021 10:47 ist überfällig.

Unten mit dem Programm kann ich jetzt Daten senden zum PLus4 und auch 
Daten empfangen vom Plus4 mit 9600Baud

Ein kleines Problem ist , das beim Senden vom Plus4 immer das letzte 
Byte (Ascii) 2 mal gedruckt wird am Empfänger bevor das Neue erscheint.

Beispiel:
A - wird eingeben beim Plus4 und erscheint beim Empfänger
B - sende ich , muss es 3 mal senden damit es erscheint. Es wird dann 
erst 2mal das A gedruckt und dann das B usw.


hier möchte ich das B haben
   |  hier möchte ich das C haben
   |   |
   |   |
A AAB BBC CCD  DDE ....usw.

------------------------
program seriel;

const
  EMPTY = $20;
  SCREEN_ADDR = $0c00;

var
  i,y   : byte;

procedure seriell_open(); assembler;
asm {
  lda #1
  ldx #2
  ldy #2
  jsr $ffba

  lda #2
  ldy #252
  ldx #253
  jsr $ffbd

  jsr $ffc0
 };
end;

procedure seriell_send(); assembler;
asm {
  ldx #1
  jsr $ffc9
  lda $fe
  jsr $ffd2
};
end;

procedure seriell_empfang(); assembler;
asm {
  ldx #1
  jsr $ffc6
  jsr $ffe4
  sta $ff
};
end;

procedure seriell_close(); assembler;
asm {
   lda #$01
   jsr $ffc3
};
end;

begin
    FillChar(pointer(SCREEN_ADDR), 24 * 40, EMPTY);

    seriell_open;

    pause(10);
    i:=0;

    while True do begin
      seriell_empfang();
      poke($c00+i,peek($ff)-96);

      poke($fe,peek($ff));
      seriell_send();

      i:=i+1;
    end;

    seriell_close;
end.
--------------------------------

von peter bierbach (Gast)


Lesenswert?

Hallo Mario M.

Danke für den Tip.

Habe jetzt einfach mal diese KIM-DEMO raugenommen und für den Plus4 
umgesetzt mit den richtigen Adressen.
Das funktioniert.

Mit diesem OPEN/CLOSE usw war ich auf dem falschen Weg.

https://www.atarimagazines.com/compute/issue10/075_1_EXPERIMENTING_WITH_THE_6551_ACIA.php

Gruss

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
Noch kein Account? Hier anmelden.