Forum: Mikrocontroller und Digitale Elektronik LCD - AVR-Tutorial


von Preise Avr & Pic (Gast)


Lesenswert?

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

von Karl M. (Gast)


Lesenswert?

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 ?

von grundschüler (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

Welches Studio verwendest du?

MfG Spess

von Pascal W. (xizeru)


Lesenswert?

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.

von Mitlesa (Gast)


Lesenswert?

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.

von Pascal W. (xizeru)


Lesenswert?

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

von Pascal W. (xizeru)


Lesenswert?

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?

von Mitlesa (Gast)


Lesenswert?

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.

von Pascal W. (xizeru)


Lesenswert?

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

: Bearbeitet durch User
von Mitlesa (Gast)


Lesenswert?

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.

von Pascal W. (xizeru)


Lesenswert?

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

von Pascal W. (xizeru)


Lesenswert?

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

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
4
           out SPH, temp1

: Bearbeitet durch User
von Pascal W. (xizeru)


Lesenswert?

Bin ich schon durchgegangen, alles okay, ich selber hab einen atmega8A 
und habe dementsprechend oben die include auf "m8adef.inc" abgeändert

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

: Bearbeitet durch User
von Pascal W. (xizeru)


Lesenswert?

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?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

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.