-
AVR Stromstoßschaltung
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:)
-
...suche mal in der Bascom-Hilfe nach "toggle"
-
Code:
if pinb.0 = 1 then toggle portc.0
-
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..
-
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
-
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
-
hi neutro,
das is auch keine wahre lösung der port wechsel immer von high auf low flackert quasi ..
-
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.
-
hi patti, das hast du richtig verstanden.
nur dein programm bekomm ich nicht complimiert:D
-
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