-         

Ergebnis 1 bis 7 von 7

Thema: Taster / Timer / Relais ???

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2004
    Beiträge
    101

    Taster / Timer / Relais ???

    Anzeige

    Hallo,

    ich habe eine Platine, auf der 8 Relais drauf sind und 8 Taster

    Die Relais sollen alle unterschiedliche Zeiten anziehen.
    Also z.B.
    Taster 1 lässt Relais 1 = 1 sec. anziehen
    Taster 2 lässt Relais 2 = 2 sec. anziehen
    ...
    Taster 7 lässt Relais 7 = 7 sec. anziehen
    Taster 8 lässt Relais 8 = 8 sec. anziehen

    Das habe ich mal testweise probiert:
    Code:
    $regfile = "m16def.dat"
    $crystal = 8000000
    
    Config Portc = Output
    Config Portd = Input
    
    Taster1 Alias Pind.1
    Taster2 Alias Pind.0
    
    Do
    if Taster1 = 0 Then Gosub Relais1
    If Taster2 = 0 Then Gosub Relais2
    Loop
    
    Relais1:
    Portc.7 = 1
    Waitms 1000
    Portc.7 = 0
    Return
    
    Relais2:
    Portc.0 = 1
    Waitms 2000
    Portc.0 = 0
    Return
    Das klappt auch schonmal alles mit den 8 Relais.

    Nun zu meinem Problem:
    Wenn ich Taster 8 drücke und Relais 8 für 8 Sekunden anzieht, dann bleibt das Programm ja unter Label Relais8 für 8 sekunden hängen und ich kann dann keine anderen Relais anziehen lassen.

    Wie kann ich es anstellen, das ich alle Relais so wie ich will ansteuern kann, ohne das die sich gegenseitig blockieren.

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    15.06.2007
    Beiträge
    18
    wie wärs so du nimmst eine variable sagen wir mal zeit und einen timer der jede sekunde einen interrupt auslöst und so bald eine taste gedrückt wrde zieht ein relai an und der timer erhöht 1x pro sekunde die variable zeit und sobald diese die gewünschte "höhe" ereicht hat lässt du das relai weider abfallen(?? heist das so)

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2004
    Beiträge
    101
    Wenn ich wüsste, wie das geht, hätte ich es schon so gemacht...

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    15.06.2007
    Beiträge
    18
    hey hab mal n kleinen code geschrieben müsste eig relativ selbst erklärend sein wen was unklar ist einfach frage bitte fersuch mal ob es so funktioniert
    Code:
    $regfile = "M16def.dat"
    $crystal = 8000000
    
    Config Timer1 = Timer , Prescale = 1024                     'hier wird der timer configuriert
    Timer1 = 57722
    
    On Timer1 Ontimer1                                          'bei einem timerüberlauf springt der controller zu ontimer0
    
    
    Config Portd = Input
    Config Portc = Output
    Dim Zeit As Byte
    
    Taster1 Alias Pind.1
    Taster2 Alias Pind.0
    
    Hauptprogramm:
    Do
    If Taster1 = 0 Then Gosub Relais1
    If Taster2 = 0 Then Gosub Relais2
    Loop
    
    
    Relais1:
       Enable Timer1                                            'der timer wird eingeschaltet
       Enable Interrupts                                        'die interrupts werden eingeschaltet (hier nur der timer interrupt ist nötig dass der AVR interrupts zulässt)
       Portc.0 = 1
    
          Do
             If Zeit < 1 Then                                   ' wen die zeit Über 1 sekunde ist werden der timer und die interrupts wieder deaktiviert
                Disable Timer0
                Disable Interrupts
                Portc.0 = 0                                     'das relai fällt ab
                Goto Hauptprogramm                              'der controller verlässt die do loop schleife und kommt weider zum hauptprogramm zurück
             End If
          Loop
    Return
    
    
    Relais2:
       Enable Timer1
       Enable Interrupts
       Portc.1 = 1
       Do
          If Zeit < 2 Then
             Portc.1 = 0
             Goto Hauptprogramm
          End If
       Loop
    Return
    
    
    Ontimer1:                                                   ' hier der timer interrupt
       Zeit = Zeit + 1                                          ' zeit wird um eins erhöht
       Timer1 = 57722
    Return                                                      ' der timer bekommt einen wert dass er nicht die vollen 65535 takte zählen muss das würde länger als eine sekunde dauern
                                               ' der controller kehrt zum programm zurück
    müsste so eig funktionieren
    einfach für die anderen relais erweitern
    wen etwas unklar ist einfach fragen

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2004
    Beiträge
    101
    So - meine Platine läuft, so wie es sein soll, auch mit dem Timer...

    Nun habe ich noch ne Frage.
    Ich habe an meinem Mega 16 noch Pins frei und will meine Steuerung noch erweitern.

    Ich löse meine Relais so aus:
    Ich klemme die Masse an einen Taster und der Ausgang vom Taster geht an den AVR und verarbeitet die Masse dort.

    Jetzt habe ich aber nur +5V zur Verfügung zum schalten.
    Kann an der Platine leider nichts mehr ändern.

    Wie kann ich es machen, das ich auch 5V an den AVR als Eingang legen kann?

    Also Taster loslassen - nichts passiert
    Taster drücken - 5V gehen auf den Pin vom AVR

    Gruß
    Papsi

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    15.06.2007
    Beiträge
    18
    einfach
    if taster = 1 then goto
    1 steht für 5volt am eingang und null für 0 volt am eingang(bei einer versorgungsspannung von 5 volt)

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Zitat Zitat von chill-flo
    einfach
    if taster = 1 then goto
    1 steht für 5volt am eingang und null für 0 volt am eingang(bei einer versorgungsspannung von 5 volt)
    Das würde aber voraussetzen dass die Eingänge ohne gedrückten Taster 0 Volt haben. Das schafft man aber nur mit zusätzlichen Pull-Down-Widerständen. So hängen die Eingänge quasi in der Luft und können im Extremfall bei offenem Taster keinen definierten Zustand einnehmen oder sogar "schalten".

    Besser wäre es die Taster mit 0 Volt zu beschalten und die integrierten Pull-Up-Widerstände zu aktivieren.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •