Praktika abgeschlossen
This commit is contained in:
parent
725e148e23
commit
6434405e8a
Binary file not shown.
@ -357,9 +357,9 @@ anf:
|
|||||||
out PORTB,r16 // Port B: Pull-up für Taster-Eingänge aktivieren
|
out PORTB,r16 // Port B: Pull-up für Taster-Eingänge aktivieren
|
||||||
lo1:
|
lo1:
|
||||||
sbis PINB,PB4 // Abfrage TASTER1, Skip Folgebefehl wenn nicht gedrückt
|
sbis PINB,PB4 // Abfrage TASTER1, Skip Folgebefehl wenn nicht gedrückt
|
||||||
jmp blue
|
rjmp blue
|
||||||
sbis PINB,PB3 // Abfrage TASTER2, Skip Folgebefehl wenn nicht gedrückt
|
sbis PINB,PB3 // Abfrage TASTER2, Skip Folgebefehl wenn nicht gedrückt
|
||||||
jmp green
|
rjmp green
|
||||||
rjmp lo1 // Sprung zum Schleifenbeginn
|
rjmp lo1 // Sprung zum Schleifenbeginn
|
||||||
blue:
|
blue:
|
||||||
sbi PORTB,0 // Einschalten der LED (blau)
|
sbi PORTB,0 // Einschalten der LED (blau)
|
||||||
@ -381,6 +381,7 @@ anf:
|
|||||||
ldi r16,0x18
|
ldi r16,0x18
|
||||||
out PORTB,r16 // Port B: Pull-up für Taster-Eingänge aktivieren
|
out PORTB,r16 // Port B: Pull-up für Taster-Eingänge aktivieren
|
||||||
ldi r17,0x01 // Zähler
|
ldi r17,0x01 // Zähler
|
||||||
|
ldi r18,0x01 // Vergleicher
|
||||||
lo1:
|
lo1:
|
||||||
sbis PINB,PB4 // Abfrage TASTER1, Skip Folgebefehl wenn nicht gedrückt
|
sbis PINB,PB4 // Abfrage TASTER1, Skip Folgebefehl wenn nicht gedrückt
|
||||||
rjmp up
|
rjmp up
|
||||||
@ -389,46 +390,53 @@ lo1:
|
|||||||
rjmp lo1 // Sprung zum Schleifenbeginn
|
rjmp lo1 // Sprung zum Schleifenbeginn
|
||||||
up:
|
up:
|
||||||
inc r17
|
inc r17
|
||||||
cmp r17, 0x07
|
ldi r18, 0x01
|
||||||
jnz blue
|
cp r17, r18
|
||||||
|
brne blue
|
||||||
ldi r17, 0x00
|
ldi r17, 0x00
|
||||||
rjmp blue
|
rjmp blue
|
||||||
down:
|
down:
|
||||||
dec r17
|
dec r17
|
||||||
cmp r17, 0x00
|
ldi r18, 0x00
|
||||||
jnz blue
|
cp r17, r18
|
||||||
|
brne blue
|
||||||
ldi r17, 0x06
|
ldi r17, 0x06
|
||||||
blue:
|
blue:
|
||||||
cmp r17, 0x01
|
ldi r18, 0x01
|
||||||
jnz cyan
|
cp r17, r18
|
||||||
|
brne cyan
|
||||||
sbi PORTB,0 // Einschalten der LED (blau)
|
sbi PORTB,0 // Einschalten der LED (blau)
|
||||||
cbi PORTB,1 // Ausschalten der LED (grün)
|
cbi PORTB,1 // Ausschalten der LED (grün)
|
||||||
cbi PORTB,2 // Ausschalten der LED (rot)
|
cbi PORTB,2 // Ausschalten der LED (rot)
|
||||||
rjmp lo1
|
rjmp lo1
|
||||||
cyan:
|
cyan:
|
||||||
cmp r17, 0x02
|
ldi r18, 0x02
|
||||||
jnz green
|
cp r17, r18
|
||||||
|
brne green
|
||||||
sbi PORTB,0 // Einschalten der LED (blau)
|
sbi PORTB,0 // Einschalten der LED (blau)
|
||||||
sbi PORTB,1 // Einschalten der LED (grün)
|
sbi PORTB,1 // Einschalten der LED (grün)
|
||||||
cbi PORTB,2 // Ausschalten der LED (rot)
|
cbi PORTB,2 // Ausschalten der LED (rot)
|
||||||
rjmp lo1
|
rjmp lo1
|
||||||
green:
|
green:
|
||||||
cmp r17, 0x03
|
ldi r18, 0x01
|
||||||
jnz yellow
|
cp r17, r18
|
||||||
|
brne yellow
|
||||||
cbi PORTB,0 // Ausschalten der LED (blau)
|
cbi PORTB,0 // Ausschalten der LED (blau)
|
||||||
sbi PORTB,1 // Einschalten der LED (grün)
|
sbi PORTB,1 // Einschalten der LED (grün)
|
||||||
cbi PORTB,2 // Ausschalten der LED (rot)
|
cbi PORTB,2 // Ausschalten der LED (rot)
|
||||||
rjmp lo1
|
rjmp lo1
|
||||||
yellow:
|
yellow:
|
||||||
cmp r17, 0x04
|
ldi r18, 0x01
|
||||||
jnz red
|
cp r17, r18
|
||||||
|
brne red
|
||||||
cbi PORTB,0 // Ausschalten der LED (blau)
|
cbi PORTB,0 // Ausschalten der LED (blau)
|
||||||
sbi PORTB,1 // Einschalten der LED (grün)
|
sbi PORTB,1 // Einschalten der LED (grün)
|
||||||
sbi PORTB,2 // Einschalten der LED (rot)
|
sbi PORTB,2 // Einschalten der LED (rot)
|
||||||
rjmp lo1
|
rjmp lo1
|
||||||
red:
|
red:
|
||||||
cmp r17, 0x05
|
ldi r18, 0x01
|
||||||
jnz violett
|
cp r17, r18
|
||||||
|
brne violett
|
||||||
cbi PORTB,0 // Ausschalten der LED (blau)
|
cbi PORTB,0 // Ausschalten der LED (blau)
|
||||||
cbi PORTB,1 // Ausschalten der LED (grün)
|
cbi PORTB,1 // Ausschalten der LED (grün)
|
||||||
sbi PORTB,2 // Einschalten der LED (rot)
|
sbi PORTB,2 // Einschalten der LED (rot)
|
||||||
@ -440,6 +448,9 @@ violett:
|
|||||||
rjmp lo1
|
rjmp lo1
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
Hinweis zur Verbesserung: das Prellen der Taster wird nicht berücksichtigt. Baue z.B. einen Delay ein.
|
||||||
|
|
||||||
|
\newpage
|
||||||
\subsection*{Aufgabe 2: Blinken der LED}
|
\subsection*{Aufgabe 2: Blinken der LED}
|
||||||
Das Programm soll die LED fortlaufend blinken lassen. Diese Funktion wird mit einem Zähler/Zeitgeber-Interrupt realisiert.
|
Das Programm soll die LED fortlaufend blinken lassen. Diese Funktion wird mit einem Zähler/Zeitgeber-Interrupt realisiert.
|
||||||
|
|
||||||
@ -494,110 +505,76 @@ tab: rjmp anf // Programmstart nach Reset ("Interrupt" 1)
|
|||||||
reti
|
reti
|
||||||
reti
|
reti
|
||||||
reti
|
reti
|
||||||
rjmp timer_compare // Timer 0 Compare A Interrupt (Interrupt 11)
|
rjmp i_11 // Timer 0 Compare A Interrupt (Interrupt 11)
|
||||||
reti
|
reti
|
||||||
reti
|
reti
|
||||||
reti
|
reti
|
||||||
reti // Tabellenende (Interrupt 15)
|
reti // Tabellenende (Interrupt 15)
|
||||||
|
|
||||||
// Initialisierungsteil und Hintergrundprogramm:
|
// Initialisierungsteil und Hintergrundprogramm:
|
||||||
anf: [...] // Weitere Initialisierungen
|
anf:
|
||||||
// Initialisierung von Timer/Counter 0
|
; LED config
|
||||||
ldi r16, high( 40000 - 1 )
|
ldi r16,0x07
|
||||||
out OCR1AH, r16
|
out DDRB,r16 // Port B: Richtungseinstellung
|
||||||
ldi r16, low( 40000 - 1 )
|
ldi r16,0x18
|
||||||
out OCR1AL, r16
|
out PORTB,r16 // Port B: Pull-up für Taster-Eingänge aktivieren
|
||||||
// CTC Modus einschalten, Vorteiler auf 1
|
; timer config
|
||||||
ldi r16, ( 1 << WGM12 ) | ( 1 << CS10 )
|
ldi r16, 0x00
|
||||||
out TCCR1B, r16
|
out TCCR0A, r16
|
||||||
// OCIE1A: Interrupt bei Timer Compare
|
ldi r16, (1<<CS00)|(1<<CS02)
|
||||||
ldi r16, 1 << OCIE1A
|
out TCCR0B, r16
|
||||||
out TIMSK, r16
|
sei
|
||||||
|
ldi r16, 0
|
||||||
|
out TCNT0, r16
|
||||||
|
ldi r16, 0x10
|
||||||
|
out TIMSK, r16
|
||||||
|
ldi r17, 0x00
|
||||||
|
ldi r18, 0x00
|
||||||
|
|
||||||
sei // Globale Interruptfreigabe
|
|
||||||
//ldi r16,0x10
|
|
||||||
//out TIMSK,r16 // Freigabe von Interrupt 11 (Timer 0 Compare A)
|
|
||||||
|
|
||||||
ldi r16,0x07
|
|
||||||
out DDRB,r16 // Port B: Richtungseinstellung
|
|
||||||
ldi r16,0x18
|
|
||||||
out PORTB,r16 // Port B: Pull-up für Taster-Eingänge aktivieren
|
|
||||||
|
|
||||||
ldi r17, 0x00 // Zähler
|
|
||||||
lo2:
|
lo2:
|
||||||
rjmp lo2 // Leere Hintergrundschleife
|
rjmp lo2 // Leere Hintergrundschleife
|
||||||
|
i_11:
|
||||||
// Interruptserviceroutine:
|
in r25, SREG
|
||||||
timer_compare:
|
cp r17, r18
|
||||||
in r25,SREG // Flags retten (weitere Rettungen nach Bedarf)
|
brne ledon
|
||||||
inc r17
|
ldi r17, 0x01
|
||||||
cmp r17, 0x02
|
cbi PORTB, 0
|
||||||
jnz on
|
rjmp end
|
||||||
off:
|
ledon:
|
||||||
ldi r17, 0x00
|
ldi r17, 0x00
|
||||||
cbi PORTB,0 // Ausschalten der LED (blau)
|
sbi PORTB, 0
|
||||||
rjmp close
|
end:
|
||||||
on:
|
out SREG, r25
|
||||||
sbi PORTB,0 // Einschalten der LED (blau)
|
reti
|
||||||
close:
|
|
||||||
out SREG,r25 // Flags restaurieren
|
|
||||||
reti // Routine beenden
|
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Alternativ
|
Alternativ
|
||||||
\begin{lstlisting}[basicstyle=\tiny]
|
\begin{lstlisting}[basicstyle=\tiny]
|
||||||
init:
|
.equ wait = 5000
|
||||||
; Modus 14:
|
ldi r25, HIGH(wait)
|
||||||
ldi r17, 1<<COM1A1 | 1<<WGM11
|
ldi r24, low(wait)
|
||||||
out TCCR1A, r17
|
; LED config
|
||||||
ldi r17, 1<<WGM13 | 1<<WGM12 | 1<<CS12
|
ldi r16,0x07
|
||||||
out TCCR1B, r17
|
out DDRB,r16 ; Port B: Richtungseinstellung
|
||||||
|
ldi r16,0x18
|
||||||
ldi r17, 0x6F
|
out PORTB,r16 ; Port B: Pull-up für Taster-Eingänge aktivieren
|
||||||
out ICR1H, r17
|
ldi r17, 0x00
|
||||||
ldi r17, 0xFF
|
ldi r18, 0x00
|
||||||
out ICR1L, r17
|
loop:
|
||||||
|
sbiw r24, 1 ; 16-bit Register dezimieren
|
||||||
; der Compare Wert
|
brne loop
|
||||||
ldi r17, 0x3F
|
cp r17, r18
|
||||||
out OCR1AH, r17
|
brne ledon
|
||||||
ldi r17, 0xFF
|
ldi r17, 0x01
|
||||||
out OCR1AL, r17
|
cbi PORTB, 0
|
||||||
|
rjmp end
|
||||||
; Den Pin OC1A auf Ausgang schalten
|
ledon:
|
||||||
ldi r17, 0x02
|
ldi r17, 0x00
|
||||||
out DDRB, r17
|
sbi PORTB, 0
|
||||||
main:
|
end:
|
||||||
rjmp main
|
ldi r25, HIGH(wait)
|
||||||
\end{lstlisting}
|
ldi r24, LOW(wait)
|
||||||
|
rjmp loop
|
||||||
Alternativ
|
|
||||||
\begin{lstlisting}[basicstyle=\tiny]
|
|
||||||
init:
|
|
||||||
LDI r16, 0x07
|
|
||||||
STS DDRB, r16
|
|
||||||
LDI r17, 0x18
|
|
||||||
OUT PORTB, r17
|
|
||||||
LDI r16, 0x00
|
|
||||||
STS TCCR1A, r16
|
|
||||||
RET
|
|
||||||
main:
|
|
||||||
LDI r16, 0xF0
|
|
||||||
STS TCNT1H, r16
|
|
||||||
LDI r16, 0xBC
|
|
||||||
STS TCNT1L, r16
|
|
||||||
LDI r16, 0x05
|
|
||||||
STS TCCR1B, r16
|
|
||||||
loop: LDS R0, TIFR1
|
|
||||||
SBRS R0, 0
|
|
||||||
RJMP loop
|
|
||||||
LDI r16, 0x00
|
|
||||||
STS TCCR1B, r16
|
|
||||||
LDI r16, 0x01
|
|
||||||
STS TIFR1, r16
|
|
||||||
COM r17
|
|
||||||
STS PORTB, r17
|
|
||||||
RET
|
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
\subsubsection*{Schritt b: Erweitertes Blinken}
|
\subsubsection*{Schritt b: Erweitertes Blinken}
|
||||||
@ -652,6 +629,7 @@ t2:
|
|||||||
RJMP loop
|
RJMP loop
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\newpage
|
||||||
\subsection*{Aufgabe 3: Einfaches Dimmen der LED mittels PWM}
|
\subsection*{Aufgabe 3: Einfaches Dimmen der LED mittels PWM}
|
||||||
Stelle die Helligkeit der LED mittels PWM (pulse width modulation, Pulsbreitenmodulation) auf wählbare Zwischenwerte ein.
|
Stelle die Helligkeit der LED mittels PWM (pulse width modulation, Pulsbreitenmodulation) auf wählbare Zwischenwerte ein.
|
||||||
|
|
||||||
@ -689,7 +667,7 @@ dly4:
|
|||||||
ret
|
ret
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\newpage
|
||||||
\subsubsection*{Schritt b: Helligkeitseinstellung mit Tastern}
|
\subsubsection*{Schritt b: Helligkeitseinstellung mit Tastern}
|
||||||
Nun sollen die beiden Taster als Bedienelemente zum Auf- und Abdimmen verwendet werden. Werte dabei die Dauer der Tastendrücke aus, nicht deren Anzahl. Die Helligkeit soll bei gedrückt gehaltenem Taster stetig zu- oder abnehmen. Bei losgelassenen Tastern soll die Helligkeit konstant bleiben.
|
Nun sollen die beiden Taster als Bedienelemente zum Auf- und Abdimmen verwendet werden. Werte dabei die Dauer der Tastendrücke aus, nicht deren Anzahl. Die Helligkeit soll bei gedrückt gehaltenem Taster stetig zu- oder abnehmen. Bei losgelassenen Tastern soll die Helligkeit konstant bleiben.
|
||||||
|
|
||||||
@ -733,8 +711,6 @@ dly4:
|
|||||||
\newpage
|
\newpage
|
||||||
\subsection*{Zusatzaufgabe: Fortlaufendes Auf- und Abdimmen der LEDs}
|
\subsection*{Zusatzaufgabe: Fortlaufendes Auf- und Abdimmen der LEDs}
|
||||||
Diese Aufgabe soll als Anregung für weiterführende Experimente nach eigenen Ideen dienen. Die Helligkeit der LED soll in einer geeigneten Geschwindigkeit stetig herauf- und heruntergeregelt werden, so dass ein ,,weiches Blinken'' entsteht. Dazu muss einen Mechanismus implementiert werden, der den Helligkeitswert nach einem geeigneten Zeitschema verändert.
|
Diese Aufgabe soll als Anregung für weiterführende Experimente nach eigenen Ideen dienen. Die Helligkeit der LED soll in einer geeigneten Geschwindigkeit stetig herauf- und heruntergeregelt werden, so dass ein ,,weiches Blinken'' entsteht. Dazu muss einen Mechanismus implementiert werden, der den Helligkeitswert nach einem geeigneten Zeitschema verändert.
|
||||||
Realisiere weitere Lichteffekte dieser Art, bei denen nun auch mehrere Leuchtfarben beteiligt sind.
|
|
||||||
Realisiere eine Umschaltung zwischen unterschiedlichen Lichteffekten.
|
|
||||||
Realisiere weitergehende Funktionen nach eigenen Ideen.
|
Realisiere weitergehende Funktionen nach eigenen Ideen.
|
||||||
|
|
||||||
\begin{lstlisting}[basicstyle=\tiny]
|
\begin{lstlisting}[basicstyle=\tiny]
|
||||||
|
Loading…
Reference in New Issue
Block a user