Hi,
hier der Programmtext:
Das Programm ist noch nicht entgültig getestet.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
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







Zitieren

Lesezeichen