-         

Ergebnis 1 bis 10 von 10

Thema: RP6 mit TTS256 und Speakjet

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2011
    Beiträge
    10

    RP6 mit TTS256 und Speakjet

    Anzeige

    Servus,

    Hab mir vor kurzen ein Platine mit TTS256 und Speakjet realisiert. Hab alle Eingänge richtig angeschlossen.
    Rx ---> Tx, Tx ---> Rx aber der TTS256 IC reagiert überhaupt nicht darauf wenn ich ein Befehl über die Serielle Schnittstelle übertrage. Wollte fragen ob jemand weiß was ich verkehrt mache oder was mir noch fehlt. Hab auch nach Beispielprogramm und Lib. gesucht aber fehlanzeige.

    Danke für eure Hilfe.

    MFG
    Roandl

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    Der TTS256 "spricht" mit 9600 Baud (Datenblatt). Hast du das deinem RP6 mitgeteilt? GND und 5V verbunden?

    Plan B: Chip richtig herum in den Sockel gesteckt?

    Für eine bessere Diagnose braucht man wohl das Programm und einen
    Anschlussplan.

    Gruß

    mic
    Geändert von radbruch (23.04.2013 um 19:21 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2011
    Beiträge
    10
    Klicke auf die Grafik für eine größere Ansicht

Name:	SpeakJetTTS.png
Hits:	6
Größe:	89,6 KB
ID:	25209

    Ja von der Spannung und der Chip ist alles in Ordnung hab mit dem Befehl

    #define BAUD_9600 9600
    #define UBRR_BAUD_9600 ((F_CPU/(16*BAUD_LOW))-1)
    UBRRH = UBRR_BAUD_9600 >> 8;
    UBRRL = (uint8_t) UBRR_BAUD_9600;

    die Baudrate auf 9600 eingestellt.

    Ich weiß nicht ob dem TTS256 ein writeChar('...') Befehl reicht. Noch ob ich ne zusätzliche Lib vom IC brauche.
    Wenn ich den RP6 anschalte bekomm ich schon ein Ready aus dem Lautsprecher. Wird aber wahrscheinlich der Speakjet selber sein weil er ein Reset Signal bekommt. ?

    Danke für die schnell Antwort.

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    #define UBRR_BAUD_9600 ((F_CPU/(16*BAUD_LOW))-1)

    BAUD_LOW stimmt sicher nicht, oder?

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2011
    Beiträge
    10
    Habs mal so reinkopiert aber jetzt seh ich es auch erst. Kannst du mir da bitte weiter helfen? bin mit so was doch leicht überfordert. Bin eher noch ein Einsteiger in der Materie. Wie ist des mit dem writeChar kann man denn TTS IC so ansteuern?

    MFG
    Roandl

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    Da BAUD_LOW in der Library des RP6 definiert wird kommt beim Kompilieren keine Fehlermeldung, aber der RP6 kommuniziert dann nicht mit 9600 sondern mit 38400 Baud. Richtiger wäre es so:

    Code:
    #define BAUD_9600		9600 // 9600 Baud
    #define UBRR_BAUD_9600	((F_CPU/(16*BAUD_9600))-1)
    
    UBRRH = UBRR_BAUD_9600 >> 8;	// Baudrate ist 9600
    UBRRL = (uint8_t) UBRR_BAUD_9600;
    (ungetestet)

    Mit writeChar() kannst du einzelne Zeichen (=Buchstaben) senden, mit writeSting() ist sogar ein ganzes Wort möglich:

    writeString("Hello");

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2011
    Beiträge
    10
    Servus

    Hab jetzt den Befehl umgeschrieben aber funktionieren tuts immer noch nicht. Hab mir mal des Datasheet von dem TTS256 durchgelesen und da bin ich auf was gestoßen.

    Operation:
    Communications parameters of the serial port are set to 9600 Baud N81. The host
    processors send up to 128 character the TTS256’s serial port on pin 18 (RX).
    Text is spoken when the TTS256 receives a new line character (0x0A)
    or the maximum number of 128 characters has been received.


    Wie soll ich des deiner Meinung nach als Befehl schreiben vielleicht so?

    writeString("Hello");
    writeChar(0x0A);

    Danke für die Antwort.

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Das sollte so funktionieren. Oder du hängst das Linefeed als Steuerzeichen direkt an die Zeichenkette:

    writeString("Hello\n");

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2011
    Beiträge
    10
    Komm nicht dahinter warum es nicht geht. Gibt es ne möglichkeit zu überprüfen ob der TTS256 überhaupt daten bekommt?

    Hab mal ein Beispielprogramm gefunden ist aber für arduino.

    Code:
    TTS256 Speakjet Interface Chip Demo Sketch
    Written by Ryan Owens
    SparkFun Electronics
    
    Uses the Voice Box Shield and the TTS256 Text To Speech Processor to turn text input on an Arduino to a voice output.
    
    A speaker can be plugged directly into the SPK+ and - pins on the shield. See the tutorial for more information on how to connect the TTS256 to the Voice Box Shield.
    
    SparkFun Product Links:
    TTS256:
    Arduino Duemilanove:
    Voicebox Shield:
    Speaker:
    */
    
    //Soft serial library used to send serial commands on pin 2 instead of regular serial pin.
    #include <SoftwareSerial.h>
    
    //Define the Pin Numbers for the sketch.
    #define E0  5
    #define E1  6
    #define E2  7
    #define E3  8
    #define E4  9
    #define E5  10
    #define E6  11
    #define E7  12
    
    #define RDY  13
    #define RES  3
    #define SPK  4
    
    #define txPin  2
    
    //Create a SoftSerial Objet
    #include "WProgram.h"
    void setup();
    void loop();
    void getMessage(char * message);
    SoftwareSerial speakjet = SoftwareSerial(0, txPin);
    
    //Create a message buffer to hold the ascii message to be converted to sound
    char message[128]="";
    
    void setup()  
    {
      //Configure the pins for the SpeakJet module
      pinMode(txPin, OUTPUT);
      pinMode(SPK, INPUT);
      
      //Set up a serial port to talk from Arduino to the SpeakJet module on pin 3.
      speakjet.begin(9600);    
      
      //Set up a serial port to get the ascii message from the host
      Serial.begin(9600);
      
      //Configure the Ready pin as an input
      pinMode(RDY, INPUT);
      
      //Configure Reset line as an output
      pinMode(RES, OUTPUT);
           
      //Configure all of the Event pins as outputs from Arduino, and set them Low.
      for(int i=E0; i<=E7; i++)
      {
        pinMode(i, OUTPUT);
        digitalWrite(i, LOW);
      }
      
      //All I/O pins are configured. Reset the SpeakJet module
      digitalWrite(RES, LOW);
      delay(100);
      digitalWrite(RES, HIGH);
      
    }
    
    void loop()
    {  
      //Get a message from the serial port
      getMessage(message);
      
      //Send the message to the TTS256
      speakjet.println(message);
      Serial.println(message);
      
      //Wait 12ms before checking the ready line
      delay(12);
      //Wait for the Speakjet to become 'ready' before sending more text.
      while(digitalRead(RDY)==0);
    }
    
    void getMessage(char * message)
    {
        char in_char=0;
        while(Serial.available() <=0);
        in_char=Serial.read();
        while(in_char != 0x0D){
            *message++=in_char;
            while(Serial.available() <=0);
            in_char = Serial.read();
        }
        *message++='\r';
        *message='\0';
        return;
    }
    
    int main(void)
    {
    	init();
    
    	setup();
        
    	for (;;)
    		loop();
            
    	return 0;
    }
    Werd aber nicht schlau drauß.

  10. #10
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    "Hab alle Eingänge richtig angeschlossen." Das behaupten immer alle!

    Und das ist auch sehr spannend:

    "(note: The correct character to append to the end of text is 0x0D and not 0x0A as listed)"

    Zu finden ist das auf der sparkfun-Produktseite bei "Documents" hinter "Datasheed": https://www.sparkfun.com/products/9811

    Der TTS256 sendet nach dem Einschalten/Reset seine Firmwareversion an den Host (=dein RP6). Das könntest du auswerten. Wenn ich mich recht erinnere, dann hat die RP6-Library ein Problem mit dem ReceptionBuffer. Hier ein Ansatz für den Empfang von 10 Zeichen, das kannst du sicher etwas "aufbohren" um eine unbegrenzte Anzahl von Zeichen (die Zeichen vom TTS256) zu empfangen. Vermutlich sendet der auch am Ende einen Zeilenvorschub \n oder ein Carrige-Return \r

    http://www.roboternetz.de/community/...l=1#post366767


    Aufbohren:

    char eingang[15];

    und

    }while((i<10) && (eingang[i-1] != '\n')); // oder \r

    wird zu

    char eingang[200];

    und

    }while((i<200) && (eingang[i-1] != '\n')); // oder \r

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. BTM222 mit RP6 und RobotLoader
    Von marvin2610 im Forum Robby RP6
    Antworten: 3
    Letzter Beitrag: 05.01.2013, 14:00
  2. BTM222 mit RP6 und RobotLoader
    Von marvin2610 im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 30.12.2012, 16:01
  3. Antworten: 13
    Letzter Beitrag: 28.06.2012, 16:31
  4. SpeakJet ausverkauft?
    Von Rio im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 08.06.2006, 12:16
  5. sprechendes IC - Speakjet
    Von avatar im Forum Elektronik
    Antworten: 30
    Letzter Beitrag: 05.09.2005, 14:53

Berechtigungen

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