Forum: Mikrocontroller und Digitale Elektronik Takt testen (Led soll blinken)


von Johannes Permoser (Gast)


Lesenswert?

hi,

kann mir mal jemand schnell ein programm schreiben, das bei einem
internen takt von 1mhz (atmega8) so im sekunden abstand eine led
blinken lässt und bei höheren takten entsprechend schneller?
möchte testen, ob ich einen quarz richtig angeschlossen hab.

ist nicht so, dass ich kein assembler lernen möchte, nur wollte ich
zuerst sichergehn, dass wenigstens die hardware in ordnung und richtig
angeschlossen ist.

mfg,
johannes

von Conlost (Gast)


Lesenswert?

;------------------------------------------------------------
; timer1.asm
;------------------------------------------------------------
.include "m16def.inc"
.device ATmega16
.def temp = r16
.def leds = r17
.equ start = 65536 - 7812   ; 2 hoch 16 minus 7812
.equ highValue = high(start)
.equ lowValue = low(start)
.org $0000

; ***** INTERRUPT VECTORS *********************************
rjmp reset     ; Reset Handler
;.org INT0addr   ;= 0x0002  ; External Interrupt Request 0
;.org INT1addr   ;= 0x0004  ; External Interrupt Request 1
;.org OC2addr    ;= 0x0006  ; Timer/Counter2 Compare Match
;.org OVF2add    ;= 0x0008  ; Timer/Counter2 Overflow
;.org ICP1addr   ;= 0x000a  ; Timer/Counter1 Capture Event
;.org OC1Aaddr   ;= 0x000c  ; Timer/Counter1 Compare Match A
;.org OC1Baddr   ;= 0x000e  ; Timer/Counter1 Compare Match B
.org OVF1addr   ;= 0x0010  ; Timer/Counter1 Overflow
rjmp timer1
;.org OVF0addr   ;= 0x0012  ; Timer/Counter0 Overflow
;.org SPIaddr    ;= 0x0014  ; Serial Transfer Complete
;.org URXCaddr   ;= 0x0016  ; USART, Rx Complete
;.org UDREaddr   ;= 0x0018  ; USART Data Register Empty
;.org UTXCaddr   ;= 0x001a  ; USART, Tx Complete
;.org ADCCaddr   ;= 0x001c  ; ADC Conversion Complete
;.org ERDYaddr   ;= 0x001e  ; EEPROM Ready
;.org ACIaddr    ;= 0x0020  ; Analog Comparator
;.org TWIaddr    ;= 0x0022  ; 2-wire Serial Interface
;.org INT2addr   ;= 0x0024  ; External Interrupt Request 2
;.org OC0addr    ;= 0x0026  ; Timer/Counter0 Compare Match
;.org SPMRaddr   ;= 0x0028  ; Store Program Memory Ready

reset:

ldi temp,low(RAMEND)    ;Initialize stackpointer for parts with SW stack
out SPL,temp
ldi temp,high(RAMEND)     ;Commented out since 1200 does not have SRAM
out SPH,temp

ldi temp, 0xFF
out DDRB, temp     ; PORTB configured for output
ldi leds, 0xFF
out PORTB, leds   ; LEDs ausschalten
ldi temp, 1<<TOIE1   ; 1000 0000
out TIMSK, temp   ; Timer 1 interrupt ein
          ; Startwert des Timers einstellen:
ldi temp, highValue
out TCNT1H, temp
ldi temp, lowValue
out TCNT1L, temp
ldi temp, 0b00000101
out TCCR1B, temp   ; Timer 1 starten mit Vorteiler 1024
sei         ; interrupts generell aktivieren

main:
loop:
nop
nop
rjmp loop
          ;--------------------------------------------------
timer1:
com leds
out PORTB, leds
          ; Startwert des Timers neu einstellen:
ldi temp, highValue
out TCNT1H, temp
ldi temp, lowValue
out TCNT1L, temp
reti

von Johannes Permoser (Gast)


Lesenswert?

danke vielmals. habs sogar geschafft die geschafft die geschwindigkeit
zu erhöhen.

für wieviel mhz ist das programm denn ausgelegt udn wie lange soll dann
die led leuchten?

von Conlost (Gast)


Lesenswert?

Hallo,

das Programm ist für 8Mhz und 1 Sekunde Blinkinterval.

Taktfrequenz/Vorteiler/T1-Wert

8 000.000 /1024/7812 = 1

Es grüsst,
Arno

von andi (Gast)


Lesenswert?

wie kann man die taktgeschwindigkeit ändern??

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.