www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Micro Wartezeiten


Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Microfans, ich benötige Hilfe:
Ich möchte mittels einer Fußtaste 4 Relais im Abstand von ca 50ms 
anziehen lassen, und beim loslassen der Fusstaste sollen diese Relais in 
umgekehrter Reihenfolge und in der gleichen Zeitverzögerung wieder 
abfallen.
Im Prinzip klappt es, aber die Zeit spielt mir einen Streich. Wenn ich 
taste, oder loslasse dauert es immer einen Moment, bis die Zeitkette 
startet.
Wie kann ich diesen Zeitfaktor umgehen?. Interrupts?
Hier der Quellcode:

'Prozessor: ATMega 8-8
'Bascom-Version: 1.11.8.7

'Hardware:
'Fusstaster an PINB.0
'4 Relais an Port : C0,C1,C2,C3
'Poti an Port C5
'******************************************************
'System-Einstellungen
'======================================================
'Definition für Mega 8
$regfile "m8def.dat"
$crystal = 3686300
'======================================================
'Konfigurationen
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portd = Output
Config Portb = Input
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portc.5 = Input
Portb = 255
'======================================================
'Initialisierungen
'======================================================
Fusstaste Alias Pinb.0
Relais1 Alias Portc.0
Relais2 Alias Portc.1
Relais3 Alias Portc.2
Relais4 Alias Portc.3
Portb = 255
Dim Zeit As Integer
Dim Poti As Integer 
'Zeitintervall
Portc.0 = 1
'======================================================
'Hauptprogramm-Schleife
'======================================================
Do
' Abfrage der Tasten
 'Analog Digital Wandler starten (Potiabfrage)
  Start Adc
   Poti = Getadc(5)

    If Poti <= 500 Then
      Zeit = 50
    Elseif Poti > 500 Then
      Zeit = 100
    End If

    Select Case Fusstaste
    Case 0 : Gosub Relais_ein
    Case 1 : Gosub Relais_aus

   End Select
Loop
'======================================================
' Unterprogramme
'======================================================
Relais_ein:

    Relais1 = 0

    Waitms Zeit
    Relais2 = 1

    Waitms Zeit
    Relais3 = 1

    Waitms Zeit
    Relais4 = 1
Return

    Relais_aus:

    Relais4 = 0
    Waitms Zeit
    Relais3 = 0

    Waitms Zeit
    Relais2 = 0

    Waitms Zeit
    Relais1 = 1
Return

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm den Capture-Eingang und warte auf eine fallende Flanke - diese löst 
dann einen Interrupt aus. So ist's zumindest beim PIC.

>Wenn ich taste, oder loslasse dauert es immer einen Moment, bis die Zeitkette 
>startet.

DAS ist irgendwie komisch. Was verstehst du denn unter einem Moment? 
Irgendwie riecht das danach, als ob der Microcontroller einen Reset 
macht. (BOR dann PUT bei POR). Poste bitte mal ein Layout wegen Relis + 
Microcontroller = muss man wissen wie.

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.