Hallo,
Ich programmiere im Moment einen Wecker mit einem Atmega 48. Dazu
benutze ich ein normales LCD, das auch schon mal funktionierte, und zwar
mit den fertigen Routinen von hier:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD
Doch in letzter Zeit gibt mir das AVR-Studio immer folgenden Fehler aus:
AVR Simulator: Invalid opcode 0xffff at address 0x00f400
Auch auf dem Mikrocontroller scheint das Programm in einer
Endlosschleife zu hängen, denn es passiert einfach gar nichts. Hier mein
Code:
ldi temp1, (1<<TOIE0) ; TOIE0: Interrupt bei Timer Overflow
34
sts TIMSK0, temp1
35
sei ; Interrupts allgemein aktivieren
36
37
; Initialisierungen:
38
rcall dcf77_init
39
rcall dcf_init_1
40
rcall lcd_init
41
rcall lcd_clear
42
rcall dcf_init_2
43
ldi modus,0
44
ldi temp1,0
45
sts STU,temp1
46
ldi temp1,0
47
sts MIN,temp1
48
ldi temp1,0
49
sts SEK,temp1
50
; Jetzt beginnt das Hauptprogramm:
51
;.....
Weiter als bis "rcall lcd_init" kommt das Programm gar nicht. Es springt
zwar dorthin, doch dann funktioniert i.was nicht mehr richtig. Der Code:
1
;.......
2
; Längere Pause für manche Befehle
3
delay5ms: ; 5ms Pause (bei 4 MHz)
4
ldi temp1, $21
5
WGLOOP0: ldi temp2, $C9
6
WGLOOP1: dec temp2
7
brne WGLOOP1
8
dec temp1
9
brne WGLOOP0
10
ret ; wieder zurück
11
12
; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
13
lcd_init:
14
ldi temp3,50 ;!!!!!Hier bleibt das Programm stehen?,
15
; es funktioniert nur, wenn man es nur max 5 mal
16
; wiederholt
17
powerupwait:
18
rcall delay5ms
19
dec temp3
20
brne powerupwait
21
ldi temp1, 0b00000011 ; muss 3mal hintereinander gesendet
22
out PORTC, temp1 ; werden zur Initialisierung
23
rcall lcd_enable ; 1
24
rcall delay5ms
25
rcall lcd_enable ; 2
26
rcall delay5ms
27
rcall lcd_enable ; und 3!
28
rcall delay5ms
29
ldi temp1, 0b00000010 ; 4bit-Modus einstellen
30
out PORTC, temp1
31
rcall lcd_enable
32
rcall delay5ms
33
ldi temp1, 0b00101000 ; 4Bit / 2 Zeilen / 5x8
34
rcall lcd_command
35
ldi temp1, 0b00001100 ; Display ein / Cursor aus / kein Blinken
36
rcall lcd_command
37
ldi temp1, 0b00000100 ; inkrement / kein Scrollen
38
rcall lcd_command
39
ret
40
;.......
Das Problem liegt denke ich bei der Stelle, die ich mit den Fragezeichen
markiert habe. Könnt ihr mir bitte sagen, was dort falsch sein könnte?
Ich habe auch nochmal das gesamte Projekt als rar-Archiv angehängt.
Danke
Hans
HI
Kein Wunder:
>timer0_overflow:> inc dcf_count1> cpi dcf_count1,196> breq dcf_count2hoch> rjmp timer_ende> ...>timer_ende:> pop temp1> pop temp2> pop temp3> reti
MfG Spess