Hallo,
bin neu hier im Forum und habe auch neulich erst mit der
AVR-Programmierung (in Assembler) angefangen.
Ich habe mich bis zum LCD-Tutorial
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD)
vorgearbeitet. Leider bekomme ich es nicht hin, dass "Test" auf dem LCD
erscheint. Wenn ich mit der C-Version
(http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung)
des Tutorials arbeite, dann funktioniert es sofort.
Dazu sei gesagt, dass ich den internen Oszillator von 1MHz benutze.
Deswegen musste ich die Delay5ms und Delay50us auf 1 MHz anpassen (sind
eigentlich für 4MHz). Diese habe ich mithilfe des Programms "AVR delay
loop generator"
(http://www.home.unix-ag.org/tjabo/avr/AVRdelayloop.html) erzeugt und
eingefügt. Ich habe dieses Programm benutzt, da ich nicht wirklich
wusste, wie ich die vorgebenen Werte umrechnen kann.
Ich weiß nicht was ich falsch mache. Könnt ihr mir vielleicht helfen und
evtl. Tipps geben?
µC: ATMega8A
Oszillator: 1MHz interner Oszillator
Software geschrieben mit: AtmelStudio 6 (erstelle auch die .hex-Datei
hiermit)
Flashing-Software: PonyProg2000
veränderte Stelle in der lcd-routines.asm:
1 | ; Pause nach jeder Übertragung
|
2 | delay50us: ; 50µs Pause (bei 1 MHz)
|
3 | ldi temp1, $10
|
4 | WGLOOP0: dec temp1
|
5 | brne WGLOOP0
|
6 | nop
|
7 | nop
|
8 | ret ; wieder zurück
|
9 |
|
10 | ; Längere Pause für manche Befehle
|
11 | delay5ms: ; 5ms Pause (bei 1 MHz)
|
12 | ldi temp1, $07
|
13 | WGLOOP1: ldi temp2, $ED
|
14 | WGLOOP2: dec temp2
|
15 | brne WGLOOP1
|
16 | dec temp1
|
17 | brne WGLOOP0
|
18 | nop
|
19 | nop
|
20 | ret ; wieder zurück
|
Mit freundlichen Grüßen
Maximilian
PS: Es tut mir leid, falls bereits ein ähnliches Thema existiert. Ich
konnte keine Lösung für mein Problem finden...