Forum: Mikrocontroller und Digitale Elektronik Daten via RS232 nur senden wenn Daten verändert


von Mr. K. (kaktus-)


Lesenswert?

Hi,

Habe derzeit erfolgreich folgenden Bascom Code (Auszug) am laufen:

'-----------------------------------
' Ringbuffer für RX und TX Daten.
'-----------------------------------
Config Com4 = 256000 , Synchrone = 0 , Parity = None , Stopbits = 1 , 
Databits = 8 , Clockpol = 0
Config Serialin3 = Buffered , Size = 254 , Bytematch = 13
Config Serialout3 = Buffered , Size = 254


Do
  If Flag_zt = 1 Then
    Print #4 , "zt*" ; 1h ; Tz ; 1m ; Tz ; 1s ; Tz ;
  End If

 if Flag_....
    print....
 end if
Loop

Ok, wie man sieht werden ständig Daten gesendet, obwoh sich deren inhalt 
gar nicht ändert.

Ich bin am überlegen das umzustellen. Jetzt könnte ich alles in einen 
String packen, und beim nächsten Durchlauf den neuen String mit dem 
alten vergleichen. Braucht aber ne Menge Ram und Zeit

Bin am überlegen ob ich nicht alles immer in den selben String packe, 
und davon eine Prüfsumme mache und mir nur die Prüfsumme merke, nur wenn 
diese sich unterscheidet werden Daten gesendet, dann auch gleich mit 
Prüfsumme.

Was ich nicht sende muss der PC nicht auswerten.

???

von dude (Gast)


Lesenswert?

Wer ändert den die Daten? Liegt das nicht auch in deiner Kontrolle?

Dann könntest du einfach ein Flag setzen in dem moment wo dein Daten 
tatsächlich geändert werden. Das Flag brauchst du nur noch abzuprüfen in 
deiner Senderoutine.

von Mr. K. (kaktus-)


Lesenswert?

Es werden viele PORT Eingänge gelesen, die ändern sich, darauf habe ich 
keinen Einfluss. Auch von I2C Slaves. Aber da bekomme ich es mit wenn 
neue Daten kommen, da habe ich noch eine extra leitung für Interrupt 
verlegt.

Ja, was ist besser, immer wieder das selbe senden, auch wenn Daten nicht 
verändert, oder wie oben, ab in einen String und Prüfsumme erzeugen, 
merken, vergleichen?

von H.Joachim S. (crazyhorse)


Lesenswert?

Wem tut es weh, wenn du ständig sendest? Kostet nichts.

von Mr. K. (kaktus-)


Lesenswert?

mhhh. Auch was drann


Die serielle ist vom AVR gesehen eigentlich ein nadelöhr. Entlastet man 
den Prozessor, wenn man Daten reduziert, oder macht es alles nur 
schlimmer?

von Lukas K. (carrotindustries)


Lesenswert?

Mr Kaktus schrieb:
> Es werden viele PORT Eingänge gelesen, die ändern sich, darauf habe ich
> keinen Einfluss
Dann merk' dir zu Beginn der Schleife den Zustand des Ports und 
vergleiche ihn mit dem momentanen Zustand.
Mal ein unvollständiges und ungetestetes Beispiel:
1
while(1) {
2
 if(old!=PORT) {
3
  old = PORT;
4
  //hat sich geändert; Flag setzen o.ä.
5
 }
6
}

von Mr. K. (kaktus-)


Lesenswert?

Ok, muss über alles mal nachdenken.

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.