mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 + Dimmerfunktion (Fehlersuche)


Autor: Alexander Schmidt (theredx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen.

Ich habe ein Problem mit einer RS232 Abfrage + Dimmerfunktion(mit 
Bascom).
Mein Programm soll sich über RS232 die Befehle 1-6 geben lassen und 
danach die Lampen dimmen.
CODE:
$regfile = "m8def.dat"                                      'Atmega8
$crystal = 3686400 
'Taktfrequenz
$baud = 9600

Dim Befehl As Byte
Dim A(8) As Byte
Dim I As Byte
Dim T As Byte

On Timer0 Ontimer                                          'Timer
On Urxc Onrxd

Ddrd = &B11111111

Tccr0 = &B00000001                               'Timergeschwindigkeit
Timsk.toie0 = 1

Sreg.7 = 1

Enable Urxc
Enable Interrupts

Do
Loop
End

Ontimer:                                       'Dimmvorgang (Interrupt)
   If I = 32 Then I = 0
      For T = 5 To 7
         If I < A(t) Then Portd.t = Not Portd.t
   Next T
Return

Onrxd:                                            'UDR-Empfang
   Befehl = Udr
   Select Case Befehl
      Case "1"
         A(5) = 0
      Case "2"
         A(6) = 0
      Case "3"
         A(7) = 0
      Case "4"
         A(5) = 32
      Case "5"
         A(6) = 32
      Case "6"
         A(7) = 32
      Case Else : Print "Error"
   End Select
   Befehl = ""
Return
CODE ENDE:

Ich kann soweit Eingaben über RS232 machen und die Werte werden auch 
richtig zugeordnet und angezeigt wenn ich sie Abfrage.
Wenn ich die Befehle 1-3 Nutze klappt alles super.
Wenn ich allerdings 4-6 nutze Dimmt sich die gewählte Lampe auf den 
gewünschten Wert, aber das Porgramm läst keine weiteren Eingaben mehr 
zu.
Erst wenn ich Reset gedrückt habe kann ich wieder neue Befehle 
übertragen.
Es scheint so, als würde sobald der Interrupt für die Dimmerfunktion 
seine Arbeit antritt die UDR abfrage Still stehen.

Bin noch relativ neu hier hoffe einer kann mir Helfen.

Gruß

Alex

Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm...

Scheint mir wohl keiner helfen zu können, schade.

Autor: Anselm 68 (anselm68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

   If I = 32 Then I = 0
      For T = 5 To 7
         If I < A(t) Then Portd.t = Not Portd.t
   Next T

If I = <- was ist mit diesem I ??
Später zählst du T hoch, aber I finde ich in deinem Code kein 2tes mal

Gruß Anselm

Autor: Alexander Schmidt (theredx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist der Zähler für die Helligkeit...
Wenn die Lampe 1 z.B. auf Helligkeit 16(50%) gestellt ist, Leuchtet die 
Lampe nur bis der Wert I = 16 ist.
Das läst die Lampe halt nur 50% der Gesammtzeit Leuchten.

Autor: Alexander Schmidt (theredx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ich merke gerade das ich I garnicht erhöhe...
Mal schauen ob es jetzt geht.

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.