Welcome to Schneider / Amstrad CPC Forum. Please login or sign up.

26. April 2024, 06:04:19

Login with username, password and session length

Shoutbox

TFM

2024-04-08, 20:42:44
Happy Sonnenfinsternis!  :)

TFM

2024-01-15, 17:06:57
Momentan billige Farbbänder auf Ebay für PCW

Devilmarkus

2023-07-09, 10:37:40
Zweiter 👋😂🤣

TFM

2023-06-13, 14:21:49
Sommerloch!

TFM

2023-05-30, 17:00:20
Erster ;-)

Recent

Members
  • Total Members: 221
  • Latest: scorp73
Stats
  • Total Posts: 11,713
  • Total Topics: 1,340
  • Online today: 235
  • Online ever: 1,724
  • (16. January 2020, 00:18:45)
Users Online
Users: 0
Guests: 196
Total: 196

196 Guests, 0 Users

LambdaSpeak FS

Started by LambdaMikel, 28. November 2020, 21:04:46

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

TFM

Der LS3 kann ja bis zu 625000 Baud nutzen.

Die einzelnen Werte waren...
2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600, 76800, 115200, 208333, 250000, 312500, 416667 und 625000 Baud.

Ich nehme an, die sind beim LSFS gleich geblieben? Richtig?
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

LambdaMikel

#91
Hallo TFM,

also alles über 115 kBaud funktioniert ohnehin nicht, und die superhohen Baudraten gingen wg. geringerer Taktfrequenz beim LSFS nicht mehr ( 16 Mhz t gegenüber den 20 Mhz beim LS3). Daher habe ich alles über 115200 gegen "klassische" aber funktionierende Baudraten ersetzt:



  switch (rate) {
  case 0 : UBRR0H = ( 416 >> 8) & 0xFF; UBRR0L = 416 & 0xFF; SERIAL_RATE = 2400; break; // 2400
  case 1 : UBRR0L = 207; SERIAL_RATE = 4800; break; // 4800
  case 2 : UBRR0L = 103; SERIAL_RATE = 9600; break; // 9600
  case 3 : UBRR0L = 68; SERIAL_RATE = 14400; break;  // 14400
  case 4 : UBRR0L = 51; SERIAL_RATE = 19200; break;  // 19200
  case 5 : UBRR0L = 34; SERIAL_RATE = 28800; break;  // 28800
  case 6 : UBRR0L = 31; SERIAL_RATE = 31250; break;  // 31250 MIDI ! NEW
  case 7 : UBRR0L = 25; SERIAL_RATE = 38400; break;  // 38400
  case 8 : UBRR0L = 16; SERIAL_RATE = 57600; break;  // 57600
  case 9 : UBRR0L = 12; SERIAL_RATE = 76800; break;  // 76800
  case 10 : UBRR0L = 8; SERIAL_RATE = 115200; break;  // 115200

  case 11 : UBRR0H = ( 3332 >> 8) & 0xFF; UBRR0L = 3332 & 0xFF; SERIAL_RATE = 300; break;  // 300
  case 12 : UBRR0H = ( 1666 >> 8) & 0xFF; UBRR0L = 1666 & 0xFF; SERIAL_RATE = 600; break;  // 600
  case 13 : UBRR0H = ( 1110 >> 8) & 0xFF; UBRR0L = 1110 & 0xFF; SERIAL_RATE = 900; break;  // 900
  case 14 : UBRR0H = ( 832 >> 8) & 0xFF; UBRR0L = 832 & 0xFF; SERIAL_RATE = 1200; break;  // 1200
 
  default :  UBRR0L = 103; SERIAL_RATE = 9600; // 9600
  }


Beim LS3 hatten wir:

  switch (rate) {
  case 0 : UBRR0H = ( 520 >> 8) & 0xFF; UBRR0L = 520 & 0xFF; SERIAL_RATE = 2400; break; // 2400
  case 1 : UBRR0H = ( 259 >> 8) & 0xFF; UBRR0L = 259 & 0xFF; SERIAL_RATE = 4800; break; // 4800
  case 2 : UBRR0L = 129; SERIAL_RATE = 9600; break; // 9600
  case 3 : UBRR0L = 86; SERIAL_RATE = 14400; break;  // 14400
  case 4 : UBRR0L = 64; SERIAL_RATE = 19200; break;  // 19200
  case 5 : UBRR0L = 42; SERIAL_RATE = 28800; break;  // 28800
  case 6 : UBRR0L = 39; SERIAL_RATE = 31250; break;  // 31250 MIDI ! NEW
  case 7 : UBRR0L = 32; SERIAL_RATE = 38400; break;  // 38400
  case 8 : UBRR0L = 21; SERIAL_RATE = 57600; break;  // 57600
  case 9 : UBRR0L = 15; SERIAL_RATE = 76800; break;  // 76800
  case 10 : UBRR0L = 10; SERIAL_RATE = 115200; break;  // 115200

  case 11 : UBRR0L = 5; SERIAL_RATE = 208333; break;  // 208333
  case 12 : UBRR0L = 4; SERIAL_RATE = 250000; break;  // 250000
  case 13 : UBRR0L = 3; SERIAL_RATE = 312500; break;  // 312500
  case 14 : UBRR0L = 2; SERIAL_RATE = 416667; break;  // 416667
  case 15 : UBRR0L = 1; SERIAL_RATE = 625000; break;  // 625000
    // case 15 : UBRR0L = 0; SERIAL_RATE = 1250000; break;  // 1250000

  default :  UBRR0L = 129; SERIAL_RATE = 9600; // 9600
  }


Also sind nur die Baudraten von 0 bis 10 identisch. Das sollte aber auch reichen...


TFM

Vielen Dank für die ausführlichen Informationen.  :smiley027:

Beim LSFS fehlt case_15. Tut das nichts?
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

Devilmarkus

Quote from: TFM on 03. February 2021, 18:13:00
Beim LSFS fehlt case_15. Tut das nichts?

Doch:

default :  UBRR0L = 103; SERIAL_RATE = 9600; // 9600
https://cpcwiki.de
Dein Deutsches CPCWiki!

TFM

default = 0 und nicht 15

Der LS3 hat case 15, der LSFS nicht. Deshalb meine Frage wurde es da vergessen, oder ist es vergessen worden?
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

LambdaMikel

Hi TFM und Markus,

ja, 15 ist default 9600 BAUDs, wie Markus schon sagte. Mir fiel keine weitere sinnvolle BAUDrate für 15 ein, sorry ;-)

TFM

Quote from: LambdaMikel on 04. February 2021, 17:17:00
Hi TFM und Markus,

ja, 15 ist default 9600 BAUDs, wie Markus schon sagte. Mir fiel keine weitere sinnvolle BAUDrate für 15 ein, sorry ;-)

Naja, mir irgendwie auch nicht... wobei 7200 wäre super - wegen Kompatibilität zu anderen Interfaces.

Meine Idee: Könnte man zwei LS via seriellen Anschlüssen als "Terminal" verbinden?
Das müsste doch in BASIC möglich sein (ok, nicht sehr schnell, aber wenn es läuft machen wir ein MC Programm draus).
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

LambdaMikel

Ja, kann ich mal schauen mit 7200 ob das möglich ist (es hängt immer von den Frequenzteiler-Verhältnissen in Verhältnis zum Basis-Takt ab).

Übrigens - ich habe gerade herausgefunden, wie man den MP3-Player "abfragt". Anscheinend gibt es doch eine Möglichkeit, den Status abzufragen.

Hier aus einem C-Treiber, den ich gefunden habe:



String SerialMP3Player::decodeMP3Answer(){
// Response Structure  0x7E 0xFF 0x06 RSP 0x00 0x00 DAT 0xFE 0xBA 0xEF
  //
  // RSP Response code
  // DAT Response additional data

  String decodedMP3Answer="";

   decodedMP3Answer=sanswer();

     switch (ansbuf[3])
     {
    case 0x3A:
      decodedMP3Answer += " -> Memory card inserted.";
      break;

    case 0x3D:
      decodedMP3Answer += " -> Completed play num " + String(ansbuf[6], DEC);
      break;

    case 0x40:
      decodedMP3Answer += " -> Error";
      break;

    case 0x41:
      decodedMP3Answer += " -> Data recived correctly. ";
      break;

    case 0x42:
      switch(ansbuf[6]){
        case 0: decodedMP3Answer += " -> Status: stopped"; break;
        case 1: decodedMP3Answer += " -> Status: playing"; break;
        case 2: decodedMP3Answer += " -> Status: paused"; break;
      }
      break;

    case 0x43:
      decodedMP3Answer += " -> Vol playing: " + String(ansbuf[6], DEC);
      break;

    case 0x48:
      decodedMP3Answer += " -> File count: " + String(ansbuf[6], DEC);
      break;


    case 0x4C:
      decodedMP3Answer += " -> Playing: " + String(ansbuf[6], DEC);
      break;

    case 0x4E:
      decodedMP3Answer += " -> Folder file count: " + String(ansbuf[6], DEC);
      break;

    case 0x4F:
      decodedMP3Answer += " -> Folder count: " + String(ansbuf[6], DEC);
      break;
     }


   ansbuf[3] = 0; // Clear ansbuff.
   return decodedMP3Answer;
}



Dies sollte zurückkommen über die serielle Schnittstelle / RX, wenn man die folgenden Query-Commands abschickt:


     // Query commands
     void qPlaying();   // Ask for the file is playing
     void qStatus();    // Ask for the status
     void qVol();       // Ask for the volumen
     void qFTracks();   // Ask for the number of tracks folders
     void qTTracks();   // Ask for the total of tracks
     void qTFolders();  // Ask for the number of folders


// Query Commands
#define CMD_PLAYING_N         0x4C // qPlaying();  // Ask for the file is playing
#define CMD_QUERY_STATUS      0x42 // qStatus();   // Ask for the status
#define CMD_QUERY_VOLUME      0x43 // qVol();      // Ask for the volumen. // Sometime board fails
#define CMD_QUERY_FLDR_TRACKS 0x4E // qFTracks();  // Ask for the number of tracks folders
#define CMD_QUERY_TOT_TRACKS  0x48 // qTTracks();  // Ask for the total of tracks
#define CMD_QUERY_FLDR_COUNT  0x4F // qTFolders(); // Ask for the number of folders



void SerialMP3Player::sendCommand(byte command, byte dat1, byte dat2){
  byte Send_buf[8] = {0}; // Buffer for Send commands.
  String mp3send = "";

  // Command Structure 0x7E 0xFF 0x06 CMD FBACK DAT1 DAT2 0xEF

  delay(20);
  Send_buf[0] = 0x7E;    // Start byte
  Send_buf[1] = 0xFF;    // Version
  Send_buf[2] = 0x06;    // Command length not including Start and End byte.
  Send_buf[3] = command; // Command
  Send_buf[4] = 0x01;    // Feedback 0x00 NO, 0x01 YES
  Send_buf[5] = dat1;    // DATA1 datah
  Send_buf[6] = dat2;    // DATA2 datal
  Send_buf[7] = 0xEF;    // End byte

  for(int i=0; i<8; i++)
  {
    Serial3->write(Send_buf[i]) ;
    mp3send+=sbyte2hex(Send_buf[i]);
  }
  if (_showDebugMessages){
     Serial.print("Sending: ");
     Serial.println(mp3send); // watch what are we sending
  }

  delay(1000);  // Wait between sending commands.
}


Die Filenamen vom MP3 kriegt man damit immer noch nicht zurück, aber zumindest die Filenummer etc.

Ich muss mal sehen, ob ich demnächst Zeit finde, das mal zum implementieren. Evtl. reicht die Info für Dich ja schon, TFM, um zu sehen, ob Du in Assembler nach Absenden eines CMD_QUERY_TOT_TRACKS  z.B. die Anzahl der Tracks zurückkriegst? Wie gesagt, die serielle sollte dann diese Bytes empfangen, wie in decodeMP3Answer oben gezeigt:


// Response Structure  0x7E 0xFF 0x06 RSP 0x00 0x00 DAT 0xFE 0xBA 0xEF


Ich weiß, Du sagtst immer, Du kannst kein C(++), aber eigentlich brauchst Du ja nur die Codes und wissen, wie man seriell empfängt mit LS-FS.

Wegen Terminal - klar, dass sollte gehen! Mal im LS3 BASIC Terminal Programm nachgucken.

TFM

#98
Das ist ja super! Den MP3 Player abfragen wäre sehr hilfreich.

Leider kann ich - sorry!  :flehan: - mit dem C echt nix anfangen, das verschwimmt mir vor den Augen, und ich versteh all das *- und :§ alles nicht.

Könnte man das in BASIC oder Z80 übersetzen?  :flehan:


EDIT: LSFS Systemsoftware Update auf meiner HP und hier:
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

Devilmarkus

Hab Meins heute bekommen, danke, lieber TFM!

Kritik / Anregung an Michael:
Ich finde die beiden Co-Platinen auf der Rückseite äußerst fragwürdig befestigt.
Wäre es da nicht möglich, diese noch zusätzlich mit Distanzmuttern / Schrauben zu befestigen?
Sie nur über die Lötanschlüsse zu Befestigen ist sehr kritisch, meiner Meinung nach.

So, nun fehlt mir nur mal massig Zeit, mich damit näher zu Befassen  :00008351: :00008351:
https://cpcwiki.de
Dein Deutsches CPCWiki!

LambdaMikel

#100
Quote from: Devilmarkus on 05. February 2021, 16:22:38
Sie nur über die Lötanschlüsse zu Befestigen ist sehr kritisch, meiner Meinung nach.

Hmm, vielleicht etwas Heißkleber oder so?

Ich denke, da müsstest Du schon massive Gewalt anwenden, um die Pins mit  0.64 mm Durchmesser (!) (und das x4 ) auch nur verbiegen zu können  ;)
Klar, besser wäre das, aber "notwendig" ist es m.E. überhaupt nicht. Das "Federn" ist natürlich vorhanden, aber Torsion sollte fast unmöglich sein (wie gesagt, es sei denn Du wendest massive Gewalt an). Das Federn sollte auch unschädlich sein, da keine Kurzschlüsse o.ä. passieren können dabei, selbst wenn das Motherboard berührt wird. Aber zur Sicherheit könntest Du ja ein Tesa-Pad o.ä. unterlegen. Sowas hier

https://www.amazon.com/Scotch-Indoor-Mounting-pounds-squares/dp/B000KKPHZ8


LambdaMikel

#101
Quote from: TFM on 05. February 2021, 15:54:43
Leider kann ich - sorry!  :flehan: - mit dem C echt nix anfangen, das verschwimmt mir vor den Augen, und ich versteh all das *- und :§ alles nicht.

Du versendest doch an 1. Linie an Leute, die was programmieren sollen / wolle / müssen  8) Einfach einen beauftragen = BEDINGUNG, den MP3-Player zu erweitern. BINGO! :bgdev: :smiley027: :birthday:

C sollte - gerade für Dich! - echt nicht so eine große Umstellung sein. Ich glaube, Du würdest viel gewinnen, wenn Du Dich ein bißchen mit C beschäftigen würdest... dann könntest Du z.B. CPC Trullalla oder wie heißt diese Framework für den CPC für Warmduscher noch für  Future OS portieren z.B.  ;) Nicht als Kritik gemeint, bitte nicht falsch verstehen - aber für Dich als Betriebssystem-Entwickler wo Du so nahe mit der Harware bist und Dich so gut mit den Interna der Maschinen auskennst (!) wäre das schon eine gute Sprache. Und Kern-C ist auch nicht viel... kleiner Sprachumfang. Also, würde ich empfehlen.     Im Ernst - K&R C ist eigentlich nur eine Sammlung von Makros für Assembler , da braucht und sollte man überhaupt nicht so viel Respekt vor haben, das ist fast so einfach wie Kindergeburstag  :D

LambdaMikel

#102
Quote from: LambdaMikel on 05. February 2021, 21:16:26
Quote from: Devilmarkus on 05. February 2021, 16:22:38
Sie nur über die Lötanschlüsse zu Befestigen ist sehr kritisch, meiner Meinung nach.

Hmm, vielleicht etwas Heißkleber oder so?
...
Aber zur Sicherheit könntest Du ja ein Tesa-Pad o.ä. unterlegen. Sowas hier

https://www.amazon.com/Scotch-Indoor-Mounting-pounds-squares/dp/B000KKPHZ8

Und hier noch was zum Lachen - ich könnte auch sagen, ich mach's wie mein großes Vorbild, Sir Clive Sinclair - passt doch, oder?  :winke0002:

Die fragliche Szene ist bei 28'16" :

[CPCEmulator]https://youtu.be/XXBxV6-zamM?t[/CPCEmulator]=1694

Mein Gesichtsausdruck war übrigens ähnlich wie der von Sir Clive als er das hörte...  :-X


Devilmarkus

Quote from: LambdaMikel on 05. February 2021, 21:16:26
Ich denke, da müsstest Du schon massive Gewalt anwenden, um die Pins mit  0.64 mm Durchmesser (!) (und das x4 ) auch nur verbiegen zu können  ;)

Beide Platinen waren krumm und schief, als das Päckchen ankam, daher ja meine Frage, ich musste sie erst wieder in Position biegen...
https://cpcwiki.de
Dein Deutsches CPCWiki!

TFM

Quote from: Devilmarkus on 05. February 2021, 23:21:18
Beide Platinen waren krumm und schief, als das Päckchen ankam, daher ja meine Frage, ich musste sie erst wieder in Position biegen...
Bitte nichts verbiegen! Biegen ist nie gut IMHO.
Die kleinen und großen Platinen sollen alle parallel zu einander sein.
Die MP3 Player Platine darf ruhig ein bisschen (10 Grad ca.) abstehen, um das Kabel besser einstecken zu können.
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)