-
        

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: AVR Stromstoßschaltung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.05.2008
    Beiträge
    31

    AVR Stromstoßschaltung

    Anzeige

    Hallo,
    Ich möchte, wenn ich den Taster Pinb.0 auf High setze
    das sich Portc.0 high schaltet und auch eingeschalten bleibt, bis ich den
    Taster erneut drücke ........

    hört sich einfach an, ist es aber für mich nich also hat jemand eine idee?

    hier mal ne schaltung wo der ausgang syncron zum eingang ist

    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    
    $crystal = 16000000
    $baud = 9600
    
    Sound Portd.7 , 400 , 450                                   'BEEP
    Sound Portd.7 , 400 , 250                                   'BEEP
    Sound Portd.7 , 400 , 450                                   'BEEP
    
    Config Pinb.0 = Input                                       'Für Tastenabfrage
    Taster Alias Pinb.0
    
    Portb.0 = 1                                                 'Pullup Widerstand ein
    Config Pinc.0 = Output
    Relais4 Alias Portc.0
    
    
    
    Do
         If Taster = 0 Then
      Relais4 = 0
    
         Else
      Relais4 = 1
    
         End If
    
    
    Loop
    schon mal vielen dank

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556
    ...suche mal in der Bascom-Hilfe nach "toggle"
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Code:
    if pinb.0 = 1 then toggle portc.0
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    05.05.2008
    Beiträge
    31
    mit
    Code:
    Do
    If Pinb.0 = 1 Then Toggle Portc.0
    Loop
    ist der port immer high. wenn ich n paar mal den taster drück geht er aus aber auch nur solange wie ich ihn gedrückt halte..

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    38
    Beiträge
    642
    Versuche mal folgendes:

    portB.0 = 0
    PortC.0 = 0


    do
    If pinB.0 = 1 then
    wait ms 50
    toggle portc.0
    end if

    loop

    jetzt sollte der Ausgang portc.0 bei jedem Tastendruck seinen
    Zustand ändern.

    MfG

    Neutro
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    44
    Beiträge
    180
    Hallo,

    ich habe meine Stromstoßschalter (Eltakos) auch durch AVR's abgelöst.
    Zunächst ging es mir nur um die reine Stromstoßfunktion. Dann kam die Zeitschaltfunktion dazu und jetzt sind alle über einen CAN Bus vernetzt und vom PC aus programmierbar!

    Im angehängten Programm ist eine der ersten "funktionierenden" Versionen mit Eltako und Zeitschaltfunktion enthalten.

    Bei Bedarf kann ich dir weitere Unterlagen zukommen lassen

    Code:
    $regfile = "m8def.dat"
    $crystal = 7372800
    $baud = 4800
    
    '------------------------------------
    
    
    Config Pinc.0 = Input                                       ' Schaltport
    Config Pinc.1 = Input
    Config Pinc.2 = Input
    Config Pinc.3 = Input
    Config Pinc.4 = Input
    Config Pinc.5 = Input
    'Config Pind.5 = Input
    
    Config Portb.0 = Output                                     ' Schaltport
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portd.7 = Output
    Config Portd.6 = Output
    
    Config Portb.5 = Output                                     ' Kontrollport
    
    Dim T1 As Long
    Dim T2 As Long
    Dim T3 As Long
    Dim T4 As Long
    Dim T5 As Long
    
    
    Dim Rtime As Long
    Dim Minute As Long
    Rtime = 0
    Minute = 0
    
    Dim Ablaufzeit1 As Long
    Dim Ablaufzeit2 As Long
    Dim Ablaufzeit3 As Long
    Dim Ablaufzeit4 As Long
    Dim Ablaufzeit5 As Long
    
    Ablaufzeit1 = 0
    Ablaufzeit2 = 0
    Ablaufzeit3 = 0
    Ablaufzeit4 = 0
    Ablaufzeit5 = 0
    
    Dim Zeit1 As Long
    Dim Zeit2 As Long
    Dim Zeit3 As Long
    Dim Zeit4 As Long
    Dim Zeit5 As Long
    Dim Sz As Long                                              'Sendezeit
    
    Zeit1 = 30                                                  'Terasse
    Zeit2 = 240                                                 'Esstisch
    Zeit3 = 60                                                  '
    Zeit4 = 10                                                  'Treppenhaus
    Zeit5 = 30                                                  'Dachterasse / Treppe
    
    
    
    Dim Db1_ As Byte                                            ' db1 zur Aufnahme des Modulzustandes in Hex
    
    T1 = 0
    T2 = 0
    T3 = 0
    T4 = 0
    T5 = 0
    Sz = 0
    
    
    
    Config Debounce = 50
    
    Dim I As Byte
    Dim Key As Byte
    
    Dim S As String * 10
    Dim B(10) As Byte                                           'At S Overlay
    Dim N As Byte
    
    
    
    ' Protokoll ---------------------------------------------------------
    
    
    On Timer0 Ontimer0
    Config Timer0 = Timer , Prescale = 1024
    Enable Timer0
    
     '---------- Programm ----------
    
    
    Prog_start:
    
     N = 0
    
    Do
    
    
    
     If Portd.6 = 1 Then
       Ablaufzeit1 = Minute - T1
       If Zeit1 < Ablaufzeit1 Then
             Portd.6 = 0
             T1 = 0
    
    
    
       Else
       End If
     Else
     End If
    
    
    
     If Portb.0 = 1 Then
       Ablaufzeit2 = Minute - T2
       If Zeit2 < Ablaufzeit2 Then
             Portb.0 = 0
    
    
       Else
       End If
     Else
     End If
    
    
    
     If Portb.2 = 1 Then
        Ablaufzeit3 = Minute - T3
        If Zeit3 < Ablaufzeit3 Then
             Portb.2 = 0
    
    
    
       Else
       End If
     Else
     End If
    
    
    
     If Portd.7 = 1 Then
        Ablaufzeit4 = Minute - T4
        If Zeit4 < Ablaufzeit4 Then
             Portd.7 = 0
    
    
    
        Else
       End If
     Else
     End If
    
    
    
     If Portb.1 = 1 Then
        Ablaufzeit5 = Minute - T5
        If Zeit5 < Ablaufzeit5 Then
             Portb.1 = 0
    
    
    
        Else
        End If
     Else
     End If
    
    
    
    
    
     Debounce Pinc.0 , 0 , Key_o1 , Sub                         'Port 1.
     Debounce Pinc.1 , 0 , Key_o2 , Sub                         'Port 2
     Debounce Pinc.2 , 0 , Key_o3 , Sub                         'Port 3
     Debounce Pinc.3 , 0 , Key_o4 , Sub                         'Port 4
     Debounce Pinc.4 , 0 , Key_o5 , Sub                         'Port 5
    
    
    Loop
    
    End
    
    
       Key_o1:
       Toggle Portb.0                                           'Buchse 1
       If T2 = 0 Then
       T2 = Minute
       Else
       T2 = 0
       End If
       Return
    
       Key_o2:
       Toggle Portb.1                                           'Buchse 2
       If T5 = 0 Then
       T5 = Minute
       Else
       T5 = 0
       End If
       Return
    
       Key_o3:
       Toggle Portb.2                                           'Buchse 3
       If T3 = 0 Then
       T3 = Minute
       Else
       T3 = 0
       End If
       Return
    
       Key_o4:
       Toggle Portd.7                                           'Buchse 5
       If T4 = 0 Then
       T4 = Minute
       Else
       T4 = 0
       End If
       Return
    
       Key_o5:
    
       Toggle Portd.6                                           'Buchse 4
       If T1 = 0 Then
       T1 = Minute
       Else
       T1 = 0
       End If
       Return
    
       Key_o6:                                                  'Buchse 7 (Garagentor)
    
       Return
    
    
    
    '---------- Timer -----------
    
    Ontimer0:
    
    Rtime = Rtime + 1                                           ' variable wird bei jedem Interrupt um 1 erhöht
    
    Gosub Minutenzaehler
    
    
    Return
    
    
    
    
    ' ----Minutenauswertung -----------------------------------------
    
    
      Minutenzaehler:
    
    
      If Rtime = 1700 Then                                      ' Teilungsfaktor bei  7372800 Hz und Prescale um auf 1 Minute zu kommen
    
      Minute = Minute + 1
    
      Rtime = 0
    
      Else
      End If
    
      Return

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    05.05.2008
    Beiträge
    31
    hi neutro,
    das is auch keine wahre lösung der port wechsel immer von high auf low flackert quasi ..

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    hallo,

    sowie ich das verstehe will er auf knopf druck dass das Relai anzieht und bei erneutem drücke soll das wieder aus gehen.

    Code:
    do
    
    Debounce Pind.2 , 0 , Taster1      
    If Normal = 1 Then
    portd.6 = 1
    End If
    if normal = 2 then
    portd.6 = 0
    end if 
    loop
    end 
    
    Taster1:
    Normal = Normal + 1
    If Normal > 2 Then
    Normal = 0
    End If
    Return
    probier dasmal aus dies klappt.... vielleicht noch etwas unsauber aber es klappt.

    musst nur die ports ändern.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    05.05.2008
    Beiträge
    31
    hi patti, das hast du richtig verstanden.

    nur dein programm bekomm ich nicht complimiert

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    so läuft es durch Bascom musst halt deinen µC usw noch hinzufügen
    Code:
    Dim Normal As Byte
    
    do
    
    Debounce Pind.2 , 0 , Taster1
    If Normal = 1 Then
    portd.6 = 1
    End If
    if normal = 2 then
    portd.6 = 0
    end if
    loop
    end
    
    Taster1:
    Normal = Normal + 1
    If Normal > 2 Then
    Normal = 0
    End If
    Return

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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