Flackern beim Senden von COM

Gast #353539
Lesenswert?
• ▲
▼
Hallo alle miteinander,

Ich habe ein Problem mit meinem Programm (im Anhang). Und zwar hab ich
ein ganz einfaches Programm für eine RGB-LED geschrieben, wo jeder
Kanal über die serielle Schnittstelle dimmbar ist (PWM). Nun hab ich
das Problem, dass jedesmal wenn ich einen Wert sende, die LEDs
flackern. Das stört mich sehr, da das nicht schön aussieht.

Kann mir vielleicht jemand sagen, woher das kommt. Wäre euch sehr
dankbar!

Vielen Dank .. Andy
Angehängte Dateien:
Gast #353541
Lesenswert?
• ▲
▼
Ich habe zwar noch nie mit BASCOM programmiert, aber wenn ich meinen
Basickenntnissen trauen kann, machst du einiges falsch.
Die Interruptroutine wird aufgerufen wenn EIN Zeichen an der seriellen
Schnittstelle empfangen wurde. Warum liest du in der Interruptroutine
die folgenden Zeichen ein??? Dein Puffer Buf ist nicht im geringsten
gegen Überlauf geschützt, was machst du bei einer fehlerhaften
Übertragung? In der Interruptroutine machst du ein Print.
Mal zusammenrechnen, Annahme dein Befehl ist 6 Byte lang (Größe von
Buf)
wenn das erste Zeichen empfangen wird blockiert der Interrupt deine
SoftwarePWM. Da du versuchst im Interrupt die weiteren Zeichen zu
empfangen also für 6 Byte + 1 Zeichen Senden.
7Byte bei 2400 Baud (8 Daten ,1 Stopbit, N)(10Bit)
2400 Baud /10 =240 Byte /s
1/240(Byte/s)*7Zeichen
das macht ca 30ms die dein Interrupt blockiert.(+ Verarbeitungszeit) Da
kann es schonmal leicht flackern.
Gast #353542
Lesenswert?
• ▲
▼
Aha, das erklärt einiges!

Nun, ich bin noch ziemlicher Anfänger mit AVR und Bascom. Wie mach ich
das richtig? Gibt es dazu ein Bascom-Tutorial oder hat jemand ein
einfaches Beispielprogramm?

Danke für eure Hilfe!
Gast #353545
Lesenswert?
• ▲
▼
z.B.
der Interrupt wird bei jedem Zeichen das empfangen wird aufgerufen
wenn also ein Zeichen kommt füllst du den Puffer auf, wenn ein ganzer
Befehl da ist wertest du ihn aus und veränderst deine Statusvariablen.

also Interrupt ungefähr:
Hole das Zeichen
wenn der Puffer nicht schon voll ist, in Puffer
steht im Puffer ein kompletter Befehl?
wenn ja auswerten

da sind natürlich noch ein paar Feinheiten wie Überlauf, ungültiger
Befehl etc.

anderer Möglichkeit:
im Interrupt werden nur die Zeichen in einen Puffer geschoben und im
Hauptprogramm wird überprüft ob ein gültiger Befehl vorliegt.
Gast #353546
Lesenswert?
• ▲
▼
Vielen Dank zunächst einmal für eure rasche Hilfe.
Ich weiß, ich bin nervig, aber ich bräuchte ein kurzes Programmbeispiel
(in Bascom), damit ich das verstehen kann. Bin halt noch ein blutiger
Anfänger gg.

@Wolfram: Hast du vielleicht einen Programmcode, wo das vorkommt, oder
wo finde ich sowas?

Ich habe auch schon gegoogelt, aber nix ordentliches gefunden.

Danke!

mfg
Andy

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren