INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Serial buffer
11.06.2015, 06:58
Beitrag #25
RE: Serial buffer
Die PWM funktioniert grundsätzlicj gut genug für die Anwendung, das habe ich trocken ohne massig Daten über die serielle Schnittstelle getestet. Für den 1 ms Interrupt benutze ich Timer 1, für die PWM Timer 2. Der Arduino muss nichts sonst könmem, das einzige Problem ist die serielle Schnittstelle. Eine höhere Auflösung wie vorgeschlagen benötige ich nicht, danke für den Hinweis trotzdem
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.06.2015, 08:25
Beitrag #26
RE: Serial buffer
Hi,
es bleibt noch die Frage, woran Du merkst, dass da was falsch läuft. Außerdem wäre der komplette Sketch interessant.
Gruß,
Thorsteb

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.06.2015, 08:31 (Dieser Beitrag wurde zuletzt bearbeitet: 11.06.2015 08:46 von Laura.)
Beitrag #27
RE: Serial buffer
(11.06.2015 08:25)Thorsten Pferdekämper schrieb:  Hi,
es bleibt noch die Frage, woran Du merkst, dass da was falsch läuft. Außerdem wäre der komplette Sketch interessant.
Gruß,
Thorsteb

Den kompletten Sketch gibts, sobald der PC um halb 12 in Reichweite ist. dass etwas falsch läuft merke ich, da ich den PWM Pin extern abtaste und Werte weit außerhalb der gesendeten vorkommen oder: Die gesendeten Werte enthalten immer 20 ähnliche im Sinne von Differenz betragmäßig kleiner 5 Werte und danach wieder 20 ähnliche Werte, aber weit entfernt von den vorherigen. Diese Intervalle dehnen sich zum Teil auf das 3 bis 100 Fache aus oder innerhalb dieser Intervalle sind die Werte nicht mehr ähnlich, also rauschen extrem.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.06.2015, 10:36 (Dieser Beitrag wurde zuletzt bearbeitet: 11.06.2015 10:38 von Laura.)
Beitrag #28
RE: Serial buffer
Wie versprochen der Code:

Code:
byte val = 0;
volatile bool flag = false;              

ISR(TIMER1_COMPA_vect)
{
  flag = true;
  }

void setup() {
  
  // -------- TIMER1 SETTINGS --------

  PRR0 &= B11110111; // Powerreduction für Timer1 deaktivieren
  TCCR1A &= B00000000; //Timer 1 Control Register A vollständig 0 setzen (S. 154f, S. 144f) Control Register sind initial auch genullt
  TCCR1B &= B00000000; //Timer 1 Control Register B vollständig 0 setzen (S 156)
  TCCR1B |= B00001000; // CTC Modus mit OCR1A als TOP, für ICR1 B00011000
  TCCR1B |= B00000001; // Prescaler 1 --> 16MHz (S.156f)
  
  TCNT1H = B00000000; // hohes byte des Counters 0 initialisieren (S.158f)
  TCNT1L = B00000000; // niedriges byte des Counters 0 initialisieren
  
  OCR1AH = B00111110; // Setzen des hohen bytes vom Output Compare Register (S.159f)
  OCR1AL = B01111111;  // Setzen des niedrigen bytes vom Output Compare Register --> hier insgesamt 15999
  
  TIMSK1 = B00000010; //Aktivieren des Output Compare A Match Interrupts (S.162)

  // -------- \TIMER1 SETTINGS --------

  // -------- TIMER2 SETTINGS --------
  
        TCCR2B &= B00000000;                  
        TCCR2B |= B00000001;
        
  // -------- \TIMER2 SETTINGS --------
  
  Serial.begin(115200);
  Serial.flush(); //Lösche Ausgangspuffer
  Serial.write(42); //Schreibe 42 zur Validierung der Verbindung
  
  int a = 1;
  while (a != 42)
  {
   a = Serial.read(); //Lese, bis Matlab 42 gesendet hat
   }

  Serial.write(32);
  while(Serial.available() == 0){}

pinMode(10, 'Output');
}
  

void loop()
{
  static int lastupdate = 0;
  if (flag == true)
  {

    val = Serial.read();
    analogWrite(10, val);
    lastupdate ++;
    flag = false;
  }
  
  if ((Serial.available() < 32) && (lastupdate > 20))
      {
      Serial.write(64-Serial.available());
      lastupdate = 0;
      }

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.06.2015, 11:34
Beitrag #29
RE: Serial buffer
Hi,
das einzige, was mir auffällt ist das hier:
Code:
pinMode(10, 'Output');
Das sollte so heißen:
Code:
pinMode(10, OUTPUT);
Allerdings erklärt das nicht das Verhalten.
Hast Du mal ausprobiert, das ganze ohne die serielle Schnittstelle zu machen? Also einfach mal hart codiert eine Folge von Werten auf den Pin geben und nachschauen, was wirklich rauskommt?

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.06.2015, 11:47 (Dieser Beitrag wurde zuletzt bearbeitet: 11.06.2015 12:12 von Bitklopfer.)
Beitrag #30
RE: Serial buffer
..ähm mal ne doofe Frage, habt ihr auch mal dran gedacht das das Betriebssystem auch Timer benutzt...nämlich da wo die Milli un Mikrosekunden enstehen ?
Das hatte ich dabei im Hinterkopf als ich die Aufzählung der Timer im Mega gepostet habe...Wink
Nur weiß ich aus dem effeff auch nicht genau welcher Timer da was macht...auf jeden Fall dürfte T0 und T1 da benutzt werden...eroiert doch das mal an der Ecke.
lg
bk

Nachtrag, hier habe ich was über Timer gefunden, leider ist mein Denglisch nicht so dolle...Blush

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.06.2015, 12:12
Beitrag #31
RE: Serial buffer
(11.06.2015 11:34)Thorsten Pferdekämper schrieb:  Allerdings erklärt das nicht das Verhalten.
Hast Du mal ausprobiert, das ganze ohne die serielle Schnittstelle zu machen? Also einfach mal hart codiert eine Folge von Werten auf den Pin geben und nachschauen, was wirklich rauskommt?

Hallo,

ja das habe ich, stumpf mit einem Array, die Werte die ausgegeben werden passen. Ich habe das Problem nun auch genauer eingegrenzt, indem ich statt dem empfangenen Wert die Rückgabe von Serial.available() auf den Pin gegeben hat. Dort sieht man schön, dass teilweise alles rund läuft und sich der Buffer weder überfüllt noch leert, dann aber doch überläuft oder leer ist.

Ich habe also überlegt, ob die Datenrate eventuell hier der Flaschenhals ist: Baudrate 115200 bei 8N1 ergibt 115200/10 = 11520 Datenbytes/s also 11,52 Datenbytes/ms, die Matlab an den Arduino übertragen kann abzüglich des einen Steuerbytes, dass der Arduino an Matlab sendet, wenn der buffer die untere Grenze unterschreitet. Soweit richtig?

Betrachtet man die Ausgabe von Serial.available() so wird deutlich, dass auch nach unterschreiten der Schwelle der Puffer bis zur vollständigen Entleerung weiter leert, oder erst deutlich verspätet wieder gefüllt wird, was dann zur Folge haben kann, dass die Prüfbedingung ein zweites mal wahr wird und weitere bytes von Matlab angefordert werden, was dann den Überlauf zur Folge hat.

Die Frage ist nun also, wo der Befehl zum neue Daten senden (Arduino schreibt die Anzahl an bytes auf die serielle Schnittstelle) hängen bleibt, bevor er gesendet wird.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.06.2015, 12:20
Beitrag #32
RE: Serial buffer
...was auch noch in betracht kommen sollte ist das der PC auf dem Matlab läuft auch Echtezitfähig ist...bei Windows ist das recht Zweifelhaft...für Linux weis ich das es dazu extra geprüfte Kernels gibt die das gewährleisten.
Wo ich keine Erfahrung habe ist der Umgang mit dem Zeichenpuffer...sowas würde ich jetzt wieder selber zu Fuß organisieren.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Ausgabe Serial Monitor zu viele Byt`s Hannes 0 98 12.11.2016 20:29
Letzter Beitrag: Hannes
  Speicher sparen bei serial.print?? DL1AKP 3 194 02.09.2016 13:32
Letzter Beitrag: hotsystems
  Serial Monitor ASCII 1 schreiben BennIY 11 581 01.08.2016 16:42
Letzter Beitrag: Mathias
  Serial.write Mathias 6 386 29.07.2016 17:06
Letzter Beitrag: Mathias
  Serial Monitor Rudi 5 636 02.06.2016 11:37
Letzter Beitrag: Bitklopfer
  Serial.printeln, Stellen verschwinden Mathias 6 261 27.05.2016 17:44
Letzter Beitrag: Mathias
  Kommunikation Serial Monitor --> Arduino BennIY 7 357 24.05.2016 07:48
Letzter Beitrag: hotsystems
  Serial Monitor Eingabe über Code Maxi290997 4 523 12.05.2016 18:57
Letzter Beitrag: SkobyMobil
  Buffer reservieren im SRAM vom DUE arduinopeter 1 300 28.03.2016 10:16
Letzter Beitrag: rkuehle
  SPI Buffer empfangen BennIY 5 718 17.03.2016 13:35
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste