www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Lauflicht


Autor: Bazic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend.
Ich sitze nun schon seit vier Tagen vor diesem Dämlichen Programm hier:




$regfile = "2313def.dat" 'AT90S2313-Deklarationen
$crystal = 4000000 'Quarz: 4.0000 MHz

Dim A As Byte
Dim B As Byte
Dim I As Byte
Declare Sub Led1
Declare Sub Led2
Config Portb = Output
Config Portd = Input

On Timer1 Ontimer1
On Timer0 Ontimer0
Config Timer1 = Timer , Prescale = 8
Config Timer0 = Timer , Prescale = 1024
Enable Timer1
Enable Timer0
Enable Interrupts
'---------------------------------------------------------
Do 'Hauptschleife
If I = 15 Then
B = 0
If I <= 15 Then
A = 0
End If
End If
Debounce Pind.0 , 0 , Led1 , Sub
Debounce Pind.1 , 1 , Led2 , Sub
If I = 15 Then
Stop Timer0
End If
'--------------------------------------------------------- Lauflicht 1

If A = 1 Then
Portb.0 = 1
End If
If A = 10 Then
Portb.0 = 0
Portb.1 = 1
End If
If A = 20 Then
Portb.1 = 0
Portb.3 = 1
End If
If A = 30 Then
Portb.3 = 0
A = 0
End If
'--------------------------------------------------------- Lauflicht 2

If B = 1 Then
Portb.0 = 1
End If
If B = 10 Then
Portb.1 = 1
End If
If B = 20 Then
Portb.0 = 0
Portb.1 = 0
B = 0
End If
Loop
'--------------------------------------------------------- Sub Taster

Sub Led1
Start Timer0
End Sub

Sub Led2
I = 0
End Sub

'--------------------------------------------------------- Sub Taster


Ontimer0: 'Interrupt-Routine
Incr I
Return

Ontimer1:
Incr A
Incr B
Return



Pinb.0 und 1 sind miteinander verbunden und an einen Optokoppler
angeschlossen! Der Optokoppler ist Wiederum an die Festplatte
angeschlossen!
Wenn die Festplatte arbeitet dann sollte Lauflicht1 angehen! Wenn die
Festplatte nicht mehr Arbeitet dann sollte nach 1 - 2 sec. Lauflicht2
gestartet werden! Arbeitet sie Festplatte wieder geht alles von vorne
los!

Wäre echt nett wenn ihr mir helfen könntet!

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist immer sehr hilfreich Code einzurücken. Dann sieht man von wo bis
wo eine Schleife/Abfrage läuft. Ich hab den Code nicht weiter
überprüft, aber so wie das jetzt ist, wird A nie zu Null.

Werner
----------------
Do 'Hauptschleife
If I = 15 Then
   B = 0
   If I <= 15 Then
      A = 0
   End If
End If
Debounce Pind.0 , 0 , Led1 , Sub
Debounce Pind.1 , 1 , Led2 , Sub
If I = 15 Then
   Stop Timer0
End If
--------

Autor: Bazic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Werde ich mir mal Merken für spätere Programme und Postings!

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Werner schon meinte:
if I= 15 then
   B=0
   if I<= 15 then   ' das "<" kann man sich so schon mal sparen.
      A=0
   endif
endif

drei Zeilen tiefer:
if I=15 Then
   Stop Timer0
endif


Warum so umständlich?
Ich kenne Bähscom nun nicht, bin aber etwas basic-bewandert.
Beim Aufruf von "Sub LED1" und "Sub LED2" wird I nie so verändert,
dass I=15 sein könnte.

Nach meinen Berechnungen wird I alle 0,256ms um 1 erhöht.
Bei einer Teilung durch 15 kommt man auf 3,84ms.
Da ist dein Lauflicht aber schon komplett durchgelaufen!?
Dass Timer1 nie gestartet wird, macht nichts, oder?
Und damit A und B nie verändert werden?
Es wäre auch sinnreich, I vor der Hauptschleife irgendeinen vernüftigen
Wert zuzuweisen (z.B. I=0).

Kannst Du Dich jetzt vielleicht noch dazu äussern, warum Du zwei
Portpins dafür als Eingang ver(sch)wenden mußt?

Gruß Rahul

Autor: Bazic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil es bei mir nicht anders funktioniert hat, leider! Ich habe versucht
den timer über einen wechsel von low auf high auszulösen! Funktionierte
leider nicht! Also kam ich nach langen hiun und her auf die Lösung und
siehe da, es geht! Ausserdem reichen die Ports für meine Zwecke dicke!
Gruß Bazic

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.