mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Flackern beim Senden von COM


Autor: Andy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir keiner von euch helfen??

Bin für jeden Tipp dankbar!!

mfg
Andy

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prinzipiell in der RS232-Interrupt-Routine nur die Zeichen in den Puffer
schreiben, die Auswertung im Hauptprogramm machen.
Die Software-PWM mit einem Timer-Interrupt machen.

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie mach ich das richtig?

Mit C.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.