PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED mit Taster weiterschalten Einstellung im EPROM speichern



micha50
24.10.2007, 16:48
Hallo
ich bin Anfänger mit Bascom und möchte LEDs wie bei einem Lauflicht mit einem Taster weiter schalten. Bei jedem Tastendruck soll eine LED weiter geschaltet werden. Wenn ich bei LED Nr. 5 angekommen bin, soll beim nächsten Tastendruck wieder die erste LED angehen und so weiter.
Es soll immer nur eine LED an sein. Außerdem soll sich der µC die zuletzt eingestellte LED merken und bei Neustart diese wieder einschalten. Des weiteren soll eine weitere LED die zuletzt eingestellte LED als Blinkzeichen ausgeben, zum Beispiel: wenn zuletzt LED Nr. 3 an war, soll der µC beim Start 3 mal blinken.
Damit der µC nicht bei jeder Tastenänderung in den EPROM schreibt, sollte er erst 30 Sek. nach der letzten Änderung den Wert im EPROM abspeichen.
Ich habe es bis jetzt nur geschafft die LED's mit dem Taster über IF-Abfragen weiter zu schalten und das Schreiben in den EPROM. Jedoch nicht erst nach 30 Sek. sondern bei jeder Änderung der LED.
Der auskommentierte Code „EPROM Lesen“und „LED für die Blinkausgabe“ funktioniert aber dann kann ich die LEDs nicht weiter
schalten.

Mfg
Michael




' Prozessor Attiny26

' Schaltung : PA1-PA5 LED`s zur Anzeige - Taster an PA0
' PA7 LED für die Blinkausgabe

' Funktion : EEprom lesen und zuletzt eingestellte LED ansteuern

' Funktion :LED 1-5 mit Taster an PA0 von zuletzt eingestelter Position
' weiterschalten und eingestellte LED nach 30 sek im EEprom abspeichern
' Sprache : BASCOM

$regfile = "attiny26.dat"
$crystal = 4000000
'$Eeprom

Declare Sub Tastendruck

Ddra = &B11111110
Porta = &B11111111

'Dim Z As Byte
'Dim B As Byte
Dim X As Byte
X = 0

' * * * * * * * * * * * * * * * Eprom Lesen Und Entsprechende Led Ansteuern

'Readeeprom Z , 0
'Z = Z - 1
'Select Case Z
'Case 1 : Reset Porta.5
'Case 2 : Reset Porta.4
'Case 3 : Reset Porta.3
'Case 4 : Reset Porta.2
'Case 5 : Reset Porta.1
'End Select

'********************** LED für die Blinkausgabe

'For B = 0 To Z
'Reset Porta.7
'Waitms 500
'Set Porta.7
'Waitms 500
'Next B
'Stop

'**********************Led weiterschalten

Do
Debounce Pina.0 , 0 , Tastendruck , Sub


If X = 1 Then
Porta.1 = 0
End If
If X = 2 Then
Porta.1 = 1
Porta.2 = 0
End If
If X = 3 Then
Porta.2 = 1
Porta.3 = 0
End If
If X = 4 Then
Porta.3 = 1
Porta.4 = 0
End If
If X = 5 Then
Porta.4 = 1
Porta.5 = 0
End If
If X = 6 Then
Porta.5 = 1
X = 1
End If

Loop



'**********************Unterprogramm Tastenabfrage

Sub Tastendruck
X = X + 1
'Writeeeprom X , 0
End Sub

End

Windi
25.10.2007, 16:01
Definiere Dir halt einen Timer der immer dann neu gestartet wird wenn ein Tastendruck erkannt wird. Nach 30 Sekunden wird über den Timer ein Interrupt ausgelöst der den Wert in den Eprom schreibt.
Danach muss der Timer aber angehalten werden und darf erst beim nächsten Tastendruck gerstartet werden da er sonst (je nach Programmierung) alle 30 Sekunden den Eprom beschreibt.