Hi,
hier der Programmtext:
Code:
$regfile = "ATtiny2313.dat"
'Tell the compiler which crystal frequency was used
$crystal = 4000000 '4.000000 MHz
'############# LED´s
Config Portd.5 = Output
Config Portd.6 = Output
'#############PWM Ausgänge
Config Pinb.2 = Output
Config Pinb.3 = Output
'#############Eingänge
Config Pind.2 = Input 'Pin D2 als Eingang konfigurieren
Taster1 Alias Pind.2 'Taster1
Portd.2 = 1 'Interner Pull-Up Widerstand EIN
'################### Variablen
Dim Ein As Bit 'Variable "EIN" als Bit deklarieren
Dim A As Integer 'Variable "A" als Integer deklarieren
Dim B As Integer 'Variable "B" als Integer deklarieren
'#############Timer1 für PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Enable Timer1 'PIN 15 0CR1a PortB.3 >> PWM Ausgang!!!!!!!
'#############
'### Hauptroutine
'#############
Compare1a = 255 'lampe dunkel
Main1:
Do
If Taster1 = 0 Then
Waitms 2500
If Taster1 = 0 Then
Goto Schalten
End If
End If
If Ein = 1 Then 'Wenn "EIN" true
Goto Main2 'gehe zu "Main2"
End If
Loop
'###########################
'### Nebenroutine Auswahl Dimmstufe ###########################
Main2:
Do
If Taster1 = 1 Then 'wenn Taster wieder false
Select Case A
Case 0 : Goto Stufe0 'zu Stufe 0...2 springen
Case 1 : Goto Stufe1
Case 2 : Goto Stufe2
Case 3 : A = 0 'Variable "A" wieder auf 0
Goto Stufe0
End Select
End If
Loop
'#########
'### Softstart
'#########
Soft:
Do
Compare1a = 255 - B
Incr B
Loop Until B = 155
Goto Main2
'############
'### Einschalten
'############
Schalten:
Toggle Ein ' "EIN" auf true oder false
Compare1a = 255
A = 0
B = 0
Portd.5 = 0
Portd.6 = 0
If Ein = 1 Then ' "EIN" = true >> Soft
Goto Soft
End If
If Ein = 0 Then ' "EIN" = false >> main1
Goto Main1
End If
'###########
'### Stufe 0...2
'###########
Stufe0:
Do
Portd.5 = 1 'LED´s schalten
Portd.6 = 0
Compare1a = 100 'Dimmstufe
If Taster1 = 0 Then 'Wenn Taster betätigt
Waitms 50 'Taster entprellen
If Taster1 = 0 Then
Incr A 'A incrementieren
Goto Main1 'wieder in Hauptroutine
End If
End If
Loop
Stufe1:
Do
Portd.5 = 0
Portd.6 = 1
Compare1a = 50
If Taster1 = 0 Then
Waitms 50
If Taster1 = 0 Then
Incr A
Goto Main1
End If
End If
Loop
Stufe2:
Do
Portd.5 = 1
Portd.6 = 1
Compare1a = 0
If Taster1 = 0 Then
Waitms 50
If Taster1 = 0 Then
Incr A
Goto Main1
End If
End If
Loop
Das Programm ist noch nicht entgültig getestet.
Es soll eine Steuerung für eine Taschenlampe werden.
Einschalten durch 3S drücken des Tasters, Dimmstufenwechsel durch Tasten und Softstart. Zusätzlich soll der Status der Dimmstufe durch zwei LED´s angezeigt werden Portd.5 & Portd.6.
Hexfile erstellt durch Bascom-AVR:1,93kB
Hexfile erstellt durch Micro-IDE:1,54kB
Klar sucht man einen Kompromiss aus knappen Code und einfacher Programmierung. Doch bin ich mit Bascom-AVR schon am Limit des ATtiny 2313.
Wie kriege ich durch Änderung meines Programms den Quelltext noch schlanker?
Gruß
Daniel
Lesezeichen