Problem mit LCD

Gast #74987
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.
Gast #74988
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.
Gast #74989
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
Gast #74990
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!
Gast #74991
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?
Angehängte Dateien:
Gast #74992
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!
Admin Persönliche Seite #75000
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren