Hallo JanB,
Ich habe den Code für den Atmega8 angepasst,
und als Kontrolle für den Counter eine LED-Anzeige hinzugefügt.
Leider funktioniert das ganze nicht - ich habe an PORTD 6 und 7 jeweils
eine LED und beide leuchten,
mehr passiert nicht.
Das mit der Tabelle verstehe ich auch nicht so ganz--was und warum wird
damit erreicht, den alten Zustand mit 4 zu multiplizieren und zum neuen hinzuzufügen??
Was ist in den Spalten und Zeilen der Tabelle was ??
Hier mal der Code
Gruß, Hanno
Code:;Codebeispiel zur Auswertung eins Drehgebers ;für Atmel AtMega8 ;Signale A und B sind an PortD Bit2 und Bit3 angeschlossen ;Es wird 8 Bit weit gezählt mit dem Zähler cnt ;Hanno Monschan 12/2004 .NOLIST .INCLUDE "m8def.inc" .LIST .DEF temp = r16 .DEF cnt = r17 ;der Zähler .DEF ast = r18 ;alter Zustand Drehgeber .DEF temp2 = r19 dgstart: ldi temp,0b11000000 out ddrd,temp ;Portd 6/7 auf Ouput setzen, Rest Input in ast,portd ;einmal den aktuellen PortZustand holen andi ast,0b00001100 ;Drehgeber-Bits maskieren ldi temp2, 4 ;bei Zählerstand 4 soll LED leuchten-->anzeige dgloop: in temp,portd ;aktuellen PortZustand holen andi temp, 0b00001100 ;Drehgeber-Bits maskieren cp temp,ast ;mit altem Zustand vergleichen breq dgloop ;Keine Änderung -> nix machen lsl ast ;*2 lsl ast ;*2 add ast,temp ;alter Zustand mal 4 plus neuer Zustand ldi ZL,low(dgtab<<1) ;Zeiger Z auf Tabellenanfang setzen ldi ZH,high(dgtab<<1) add ZL,ast ;zum Zeiger Addieren clr ast adc ZH,ast lpm ;Tabelleneintrag holen add cnt,r0 ;auf Zähler draufaddieren mov ast,temp ;neuer Zustand wird alter Zustand cp temp2, cnt ;wenn Counter==4 breq anzeige ;Ausgabe rjmp dgloop ;fertig dgtab: .db 0,1,-1,0 .db -1,0,0,1 .db 1,0,0,-1 .db 0,-1,1,0 anzeige: ldi temp,0b10000000 ;Ausgabe an LED 7 out portd,temp rjmp dgloop ;Ende







Zitieren

Lesezeichen