Hallo,
ich bin gerade dabei das AVR-Tutorial durchzu arbeiten. Jetzt bin ich an
dem Punkt LCD angekommen und habe da ne Frage.
Bei dem Hauptprogramm wird unten die Datei lcd-routines.asm abgefragt.
Das wird das Programm vorher sein zum lcd initialieren und lcd lesen
lassen und so. Jetzt kann ich das Programm ja ganz normal in Atmel
Studio einhacken und unter dem namen lcd-routines.asm abspeichern. Aber
wohin muss ich das speichern? Der Rechner durchsucht doch nicht den
ganzen PC nach der Datei, das muss doch in einen bestimmten Ordner oder?
MfG
Xizeru
Dein Headline "LCD - AVR-Tutorial" hat nichts - aber auch gar nichts mit
deinem Problem zu tun.
Der Umgang mit solch eine Software muss man auch erlernen.
Gibt's dazu nicht ein Hilfesystem auf der Festplatte oder auch beim
Software Hersteller ?
Preise Avr & Pic schrieb:> Der Rechner durchsucht doch nicht den> ganzen PC nach der Datei, das muss doch in einen bestimmten Ordner oder?
Der Rechner hat einen Suchpfad, in den bestimmte Ordner aufgenommen
sind, die automatisch durchsucht werden. Dateien werden gefunden, wenn
ihr Ordner vom Suchpfad erfasst ist oder wenn sie mit pfad & Dateiname
genau spezifiziert werden.
Preise Avr & Pic schrieb:> Aber> wohin muss ich das speichern?
Da wo Du es auch wiederfindest.
Von dort kannst Du es in das Projekt kopieren, wo Du es gerade brauchst.
Preise Avr & Pic schrieb:> Der Rechner durchsucht doch nicht den> ganzen PC nach der Datei
Nein, er schaut nur im aktuellen Projekt nach, welches Du angelegt hast.
Du solltest Dir also für alle Deine Projekte und Daten eine für Dich
sinnvolle Ordnerstruktur überlegen, damit es auf Deiner Festplatte nicht
so aussieht, wie bei Hempels unterm Sofa.
Atmel Studio 7
habe gerade rechts bei meinem Projekt folgendes gemacht:
Rechtsklick, Add, New Item, Assembler File, als lcd-routines bezeichnet
und den ersten code beim Tutorial reingeschrieben, funzt aber nicht.
P. W. schrieb:> funzt aber nicht.
"funzt aber nicht" ist aber eine Fehlermeldung mit der hier
niemand was anfangen kann.
Und ich wette dass das Studio nicht diese Fehlermeldung
ausgibt sondern etwas aussagekräftigeres.
Vorher hat er immer gemeldet dass er lcd_data usw. nicht kennt, wollte
deshalb auch nicht in .hex umwandeln
Jetzt habe ich .include "lcd-routines.asm" oben hingeschrieben anstatt
unten. (Versteh ich auch nicht warum das im Tutorial unten steht, kenne
sowas eig nur oben)
Jetzt hat er umgewandelt, kann auch alles hochladen, meldet keinen
Fehler, nur das LCD zeigt in der oberen Reihe einfach nur komplett weiße
Balken an
Habe jetzt gemerkt, dass ich mich beim LCD wohl vergriffen habe. Habe
folgendes LCD: qc1602a v2.0
Dazu finde ich nur ein Datenblatt und da steht was von nem Controller
KAD066. Leider finde ich zu diesem Controller nichts, weiss da jemand
was?
P. W. schrieb:> Habe jetzt gemerkt, dass ich mich beim LCD wohl vergriffen habe. Habe> folgendes LCD: qc1602a v2.0
Das ist ein stinknormales LCD kompatibel zu allen was so
kreucht und fleucht.
Jedenfalls brauchst du deswegen nicht nochmal ein neues
Tutorial "durcharbeiten".
Aber an den Grundlagen hapert es noch erheblich. Was z.B.
daraus ersichtlich ist dass du glaubst dein Studio
"wandelt" den Text in ein Hexfile um.
Mitlesa schrieb:> P. W. schrieb:>> Habe jetzt gemerkt, dass ich mich beim LCD wohl vergriffen habe. Habe>> folgendes LCD: qc1602a v2.0>> Das ist ein stinknormales LCD kompatibel zu allen was so> kreucht und fleucht.>> Jedenfalls brauchst du deswegen nicht nochmal ein neues> Tutorial "durcharbeiten".>> Aber an den Grundlagen hapert es noch erheblich. Was z.B.> daraus ersichtlich ist dass du glaubst dein Studio> "wandelt" den Text in ein Hexfile um.
Dann halt Assemblieren bzw übersetzen...du weisst was gemeint ist :D
P. W. schrieb:> du weisst was gemeint ist :D
Ich weiss was gemeint ist aber du schaffst es nicht einmal
eine einfache Fehlermeldung wie sie das Studio ausspuckt zu
zitieren. Auch nicht auf Anforderung.
Mitlesa schrieb:> P. W. schrieb:>> du weisst was gemeint ist :D>> Ich weiss was gemeint ist aber du schaffst es nicht einmal> eine einfache Fehlermeldung wie sie das Studio ausspuckt zu> zitieren. Auch nicht auf Anforderung.
Wozu denn noch, ich bekomme doch keine mehr :D
P. W. schrieb:> Mitlesa schrieb:>> P. W. schrieb:>>> du weisst was gemeint ist :D>>>> Ich weiss was gemeint ist aber du schaffst es nicht einmal>> eine einfache Fehlermeldung wie sie das Studio ausspuckt zu>> zitieren. Auch nicht auf Anforderung.>> Wozu denn noch, ich bekomme doch keine mehr :D
Wie finde ich den Fehler den ich gemacht habe denn am besten? Fehlercode
zeigt er leider keinen an, wie schaue überprüfe ich das am besten?
Schaltplan und Programm hab ich schon 2 Mal durch gesehen, genauso wie
das Original....bis auf das das .include "lcd-routines.asm" oben steht,
aber das muss es ja auch
P. W. schrieb:> nur das LCD zeigt in der oberen Reihe einfach nur komplett weiße> Balken an
Gehe nochmal genau die Anschlussbelegung durch - der Tutorial Code
funktioniert nur, wenn du dich genau nach der Tabelle richtest. Der
Balken in der ersten Zeile ist schon mal ein Zeichen dafür, das der
Kontrast einigermassen stimmt und die Betriebsspannung auch. Nun Pin für
Pin überprüfen (mit dem Datenblatt deines speziellen LCD) das alles so
angeschlossen ist, wie es soll.
Ausserdem muss dein MC mit 4Mhz laufen, so hat Andreas das jedenfalls
codiert. Langsamerer Takt schadet nicht, schnellerer aber schon.
Huetzutage ist das etwas fremd, weil die meisten AVR heute mit 1Mhz
ausgeliefert werden und auf 8Mhz am einfachsten zum Laufen zu bringen
sind. Der Mega8 ist da etwas altbacken.
Übrigens darf das .include "lcd-routinen.asm" wirklich nicht direkt am
Anfang stehen, da der MC sonst als erstes darein springt. Das wird aber
schiefgehen, denn das Hauptprogramm beginnt bei
1
ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
2
out SPL, temp1
3
ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
Matthias S. schrieb:> Übrigens darf das .include "lcd-routinen.asm" wirklich nicht direkt am> Anfang stehen, da der MC sonst als erstes darein springt. Das wird aber> schiefgehen, denn das Hauptprogramm
Üblich ist es deswegen, am Anfang eines ASM Programmes den
Einsprungvektor zu belegen. Ganz am Anfang eines Programmes steht dann:
1
.include "m8adef.inc"
2
.CSEG
3
.ORG 0x0
4
rjmp RESET ; Reset Handler
5
; nun kannst du z.B. das include machen
6
.include "lcd-routines.asm"
7
; und nun beginnt das Hauptprogramm
8
9
RESET: ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
10
out SPL, temp1
11
ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
12
out SPH, temp1
13
; und so weiter
Das hat Andreas nicht deutlich gemacht.
Die Sprungtabelle für den AVR steht ganz am Anfang (0x0) und kann auch
noch andere Vektoren enthalten, RESET ist aber für dich erstmal
ausreichend.
Perfekt, jetzt läuft alles..hätte ich auch drauf kommen können, wird das
include zu früh aufgerufen dann springt er direkt uns ohne einen rjmp
Befehl ausm hauptprogramm da rein....steht es zu spät kann der Code
nicht übersetzt werden weil die variablen teilweise unbekannt sind oder?
P. W. schrieb:> steht es zu spät kann der Code> nicht übersetzt werden weil die variablen teilweise unbekannt sind oder?
Naja, eigentlich hat Andreas den Code schon so gemacht, das er
übersetzbar wäre. Aber so genau habe ich mir das jetzt nicht angesehen.
P. W. schrieb:> dann springt er direkt uns ohne einen rjmp> Befehl ausm hauptprogramm da rein
So isses. Er springt einfach in die erste Routine im include und stösst
dann irgendwann auf ein RET - und da es gar nicht als Unterprogramm
angesprungen wurde, hat der MC keine Ahnung, wohin er da zurückkehren
sollte -> schmiert ab, bzw. macht irgendwas ungewolltes, wie z.B. auf
die Adresse springen, die sich aus zufälligen Werten im Stack
zusammensetzt.