ich wollte zuerst sowas hier vorschlagen
Bild hier
aber da du die taktfrequenz angezeigt haben willst, kannst du den atmega als signalgenerator verwenden. der kennt dann auch die frequenz und kann diese auf einem LCD anzeigen.
hier ein bespiel fürs AVR Studio:
Code:
.NOLIST ; List-Output unterdrücken
.INCLUDE <m8def.inc> ; das gibt es für jeden Controllertyp
.LIST ; List-Output wieder aufdrehen
.CSEG ; was nun folgt, gehört in den FLASH-Speicher
;------------------------------------------------------
; Start Adresse 0000
;------------------------------------------------------
RESET:
rjmp INIT ; springen nach "INIT"
;------------------------------------------------------
; ISR VECTORS
;------------------------------------------------------
; ..... hier kommen dann die Sprungadressen für die Interrupts rein
; dazu kommen wir noch
.ORG INT_VECTORS_SIZE ; dadurch haben wir für die Vektoren Platz gelassen
INIT:
;------------------------------------------------------
; INITIALIZE
;------------------------------------------------------
ldi r24,high(RAMEND) ;Stack Pointer setzen
out SPH,r24 ; "RAMEND" ist in m8def.inc (s.o.) festgelegt
ldi r24,low(RAMEND) ;
out SPL,r24 ;
;------------------------------------------------------
; eigene Initialisierungen
;------------------------------------------------------
LDI R24, 255 ; der wert "255" = FF ins allgemeine Register R24
OUT DDRB, R24 ; das kommt ins Controll-register f. PortC
; dadurch ist das Port auf OUTPUT gestellt
;------------------------------------------------------
; HAUPTSCHLEIFE
;------------------------------------------------------
Hauptschleife:
LDI R24, 255
OUT PORTB, R24
; =============================
; delay loop generator
; 1000000 cycles:
; -----------------------------
; delaying 999999 cycles:
ldi R17, $09
WGLOOP0: ldi R18, $BC
WGLOOP1: ldi R19, $C4
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 1 cycle:
nop
; =============================
LDI R24, 0
OUT PORTB, R24
; =============================
; delay loop generator
; 1000000 cycles:
; -----------------------------
; delaying 999999 cycles:
ldi R17, $09
WGLOOP3: ldi R18, $BC
WGLOOP4: ldi R19, $C4
WGLOOP5: dec R19
brne WGLOOP5
dec R18
brne WGLOOP4
dec R17
brne WGLOOP3
; -----------------------------
; delaying 1 cycle:
nop
; =============================
rjmp Hauptschleife ; immer wiederholen
;------------------------------------------------------
; ENDE
;------------------------------------------------------
Ende:
rjmp Ende
die warteschleifen musst du natürlich anpassen, hier schaltet er für 1 mio. takte (bei 1MHz 1Sekunde) den port auf HIGH, dann 1 mio. takte auf low.
bitte nicht über den code schimpfen, das war mein erstes asm proggie, zusammengestöpselt aus beispiel-code..
gruesse, die katz
Lesezeichen