www.mikrocontroller.net

Forum: Compiler & IDEs Problem mit LCD


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht denn die LCD.c aus?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <io.h>
#include "LCD.h"

void main (void) {
    LCD_Init();
}

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aha, dann liegt der Fehler in der
LCD.h
oder?

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
meinst du die?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
egal, ich probiers jetzt selber mal

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.