Forum: Compiler & IDEs Problem mit LCD


von Alex (Gast)


Lesenswert?

Hi,
ich komme seit Stunden nicht mehr weiter!

Also ich habe jetzt das LCD so an den 4433 angeschlossen, wie es im
tutorial steht.

Ich habe den µC vor gut zwei Wochen bekommen und bin gerade dabei mich
etwas in Assembler einzuarbeiten. Den I/O - Teil habe ich noch
wunderbar verstanden, naja, es funktionierte jedenfalls.

Ich benutze TAVRASM, aber ich bekomme bei dem im Tutorial vorgestellten
Testprogramm immer einen Fehler!

#####################################
### aus lcd-test.asm - fürn 4433 ####
#####################################
.include "4433def.inc"   <---------- anstatt des M8 hab ich meinen
                                     reingeschrieben, wie im I/O-Teil
#####################################
#### die folgende Zeile mag TAVRASM nicht!!!
#### bekomme immer einen Fehler
#### Error: undefined variable referenced in I/O port address
####        out SPH, temp1
#####################################
ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten RAM-Adresse
           out SPH, temp1
#####################################

was ist falsch?
ach ja, die datei lcd-routine.asm ist im gleichen Ordner vorhanden.


Kann mir jemand ein noch einfaches Testprogramm für den 4433 hier
posten - für die LCD-Initialisierung und mit einer einfachen Ausgabe,
als *.asm-Datei.
Die Pinbelegung hab ich wie im Tutorial.

von Alex (Gast)


Lesenswert?

So, jetzt habe ich mir avr-gcc geholt. Wie man eine *.c-Datei in *.hex
compiliert weiss ich jetzt. Assembler mochte ich noch nie und meine
ANSI-C Kenntnisse (lang ists zwar her) sollen auch nicht umsonst
gewesen sein.

Nur ist es ziemlich blöd für einen Anfänger, wenn man kein
funktionierendes Programm nachvollziehen kann. Kann mir hier jemand
weiterhelfen?

Habe einen at90s4433 und möchte wie im Tutorial einen Text ins Eeprom
schreiben und am 2x16 Display in der oberen Zeile als Laufschrift
ausgeben.

Vielleicht hat jemand gerade sowas - oder gern auch was ähnliches,
hauptsache es funktioniert mal mit dem 4433 - jemand schon mal
programmiert. Damit wäre mir echt geholfen.

von Berndt Brandes (Gast)


Lesenswert?

Für Deine 1. Frage:
Der 4433 hat gar keinen 16 bit Stackpointer, statt SPH und SPL gibt es
also nur das SP-Register. Die 4 Zeilen betreffend SPH/SPL also
rausnehmen und durch
           ldi temp1, RAMEND     ; oberste RAM-Adresse
           out SP, temp1
ersetzen.
Ich denke das Tutorial ist für einen AVR mit mehr als 256 Byte RAM?

Für die 2. Frage hab ich leider auch nichts

/Berndt

von Alex (Gast)


Lesenswert?

Das Assemblerprogramm läuft - aber das war es für mich auch schon mit
Assembler!

Schlechter scherz?

Links zu ähnlichen Projekten
LCDproc - zeigt Systeminformationen an
http://lcdproc.omnipotent.net/

This page is temporarily closed in protest against software patents.
Websites may soon be closed down regularly due to software patents.
Software patents can get you prosecuted for publishing texts you wrote
yourself!

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Wollte mal ein c-Programm schreiben, das einfach das LCD initialisiert:


#include <io.h>
#include <LCD.h>

void main (void) {
    LCD_Init();
}


bekomme aber einen Fehler. er kennt LCD_Init() nicht. Steht doch in der
LCD.h drinnen - was ist da falsch?

von Alex (Gast)


Lesenswert?

avr-gcc -g -Os -mmcu=at90s4433 -c LCD.c
->Meldung:Achtung!Keine neue Zeile am Ende der Datei

Die LCD.o erhalte ich trotzdem

avr-gcc -g -mmcu=at90s4433 -o LCD.elf LCD.o
->Meldung: LCD_Init() undefiniert

Hab gestern erst mit avr-gcc angefangen.....

LCD.c und LCD.h liegen bei mir auf C:\Ordner - ist dass der Fehler?
Aber in welches Verzeichnis muss ich LCD.h kopieren? Habs ausserdem
noch in das Verzeichnis kopiert wo io.h io4433.h liegen

mit
#include <avr/io.h> bzw. <avr/io4433.h>
funktioniert es auch nicht

Bin echt ratlos, sonst würde ich nicht eure zeit zum lesen in anspruch
nehmen!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Wie sieht denn die LCD.c aus?

von Alex (Gast)


Lesenswert?

#include <io.h>
#include "LCD.h"

void main (void) {
    LCD_Init();
}

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Woher soll der Compiler wissen was mit LCD_Init() gemeint ist? Die
H-Datei enthält nur den Funktionsprototyp, nicht die Definition.

von Alex (Gast)


Lesenswert?

aha, dann liegt der Fehler in der
LCD.h
oder?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Nein. Eine H-Datei alleine nützt dir aber normalerweise nur was, wenn du
auch die dazugehörige C-Datei oder Library hast. Warum probierst du
nicht die LCD-Lib von Peter Fleury aus?

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

meinst du die?

von Alex (Gast)


Lesenswert?

egal, ich probiers jetzt selber mal

muss ich die LCD.h dann zu den anderen .h dateien kopieren oder egal?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Nochmal: mit einer Header-Datei alleine kannst du nichts anfangen, du
brauchst die dazugehörige(n) C-Datei(en). Die H-Datei musst du nicht zu
den anderen kopieren, mach lieber in deinem Projekt ein
Unterverzeichnis "lcd" in das du die C- und H-Dateien aus der
LCD-Lib. reinkopierst. Dann bindest du die lcd.h mit #include
"lcd/lcd.h" in dein Hauptprogramm ein, kompilierst die lcd/lcd.c, und
linkst sie zu deinem Hauptprogramm. Also im einfachsten Fall

avr-gcc -Os -mmcu=at90s4433 -Wall -o meinprogramm.elf main.c lcd/lcd.c

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.