Kategorien
ATMega8

ATMega8 – LED 1 und 2 über Taster T1 und T2 schalten

Pollin_Board_kleinDie meisten elektronischen Geräte / Schaltungen / Projekte müssen in irgendeiner Form auf Eingaben reagieren.
Sei es wie hier dargestellt auch ‘nur’ auf einen Taster.
Das Pollin Board bietet mehrere Taster, LED’s, einen Piepser und weitere Hardware zum ansteuern.


In diesem Beispiel wird die LED1 und 2 über Taster 1 und 2 angesteuert.

Wie in der Grafik zu erkennen, sind alle LED’s und Taster mit dem PortD verbunden.
PollinBoard_ATMega8_Taster_LED_Beispiel_Vorschau

Für dieses Beispiel werden keine weiteren Bauteile rund um das Evaluationsboard benötigt.

Der hier abgebildete Assemblercode ist mit vielen Kommentaren versehen.
Ich habe den Source auf Grundlage dieser Beispiele von Mikrocontroller.net aufgebaut.

Quellcode des Assemblerprogramms:

; avrdude -p m8 -c stk500v2 -P /dev/ttyACM0 -U flash:w:LED1_und_2_mit_Taster1_und_2.hex
; 9.8.2013 Das Programm soll sobald der Taster1 gedrückt wurde, die LED1 an bzw. ausschalten und
; sobald der Taster2 gedrückt wurde, die LED2 an bzw. ausschalten
; Das Programm ist zum grossen Teil aus 
; http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen
; übernommen. Dort gibt es noch viel weitere Infos und Tipps
.NOLIST
;.INCLUDE "/home/henry/Dokumente/Mikrocontroller/AVR-Assembler/AVR_Definitionsfiles/m8def.inc"
.INCLUDE "m8def.inc"
.LIST
 
.def temp 	= R16
 
.equ Taster1 	= PD2
.equ Taster2 	= PD3
.equ LED1 	= PD5
.equ LED2 	= PD6
 
; Port D, LED Pins auf Ausgang und Taster Pins auf Eingang schalten
 
	ldi	temp, (1<<LED1) | (1<<LED2)							
	out	DDRD, temp					; LED1/2 Pollin Evaluationsboard ,, PD5/6 auf Ausgang schalten	
 
Tastenabfrage:
	sbic	PIND, Taster1
	rjmp 	LED1Schalten					; Wenn Taster1 auf High (gedrückt), dann rufe LED1Schalten
	sbic	PIND, Taster2
	rjmp 	LED2Schalten					; Wenn Taster2 auf High (gedrückt), dann rufe LED2Schalten
	rjmp	Tastenabfrage					; zurück zur Tastenabfrage
 
LED1Schalten:
T1entprellen:
	sbic	PIND, Taster1					; loope solange der Taster1 nicht wieder losgelassen wurde
	rjmp 	T1entprellen
	sbic	PORTD, LED1					; überspringe die nächste Instruktion, wenn die LED1 ausgeschaltet ist
	rjmp	LED1ausschalten
LED1einschalten:	
	sbi	PORTD, LED1					; Setze das LED1 Bit in PORTD
	rjmp	EndeLED1schalten				; springe zu EndeLED1schalten
LED1ausschalten:
	cbi	PORTD, LED1					; Lösche das LED1 Bit in PORTD
EndeLED1schalten:	 
	rjmp 	Tastenabfrage					; zurück zum Hauptprogramm
 
LED2Schalten:
T2entprellen:
	sbic	PIND, Taster2					; loope solange der Taster2 nicht wieder losgelassen wurde
	rjmp 	T2entprellen
	sbic	PORTD, LED2					; überspringe die nächste Instruktion, wenn die LED2 ausgeschaltet ist
	rjmp	LED2ausschalten
LED2einschalten:	
	sbi	PORTD, LED2					; Setze das LED2 Bit in PORTD
	rjmp	EndeLED2schalten				; springe zu EndeLED2schalten
LED2ausschalten:
	cbi	PORTD, LED2					; Lösche das LED2 Bit in PORTD
EndeLED2schalten:	 
	rjmp 	Tastenabfrage					; zurück zum Hauptprogramm

 

Video, zur Demonstration