mikrocontroller.net

Forum: Projekte & Code BASCOM: große Zahlen über alle 4 Zeilen eines 4-Zeiligen L


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

Bewertung
0 lesenswert
nicht lesenswert
In der Anlage habe ich eine BASCOM-Funktion (LCDBig) beigelegt mit der
"große" Zahlen, über alle 4 Zeilen eines 4-Zeiligen LCD angezeigt
werden können.
Diese Funktion habe ich meiner AVR-ATMega8-Haussteuerung entnommen. Ich
verwende diese Funktion zur Anzeige der Uhrzeit, Temperatur und
sonstigem, wie z.B. Anzeige/Einstellen der LCD-Helligkeit,
RS485-Adresse, Anruflisten, Fehlerspeicher usw.

In der Anlage habe ich auch einige Bilder der Anzeige beigefügt.
Ich verwende das LCD-Modul 4x20 EA DIP204-4 (Kontroller KS0073) von
Conrad, dieses LCD hat die Abmessungen 68 x 27 mm und ist somit ideal
für den Einbau in eine Blindabdeckung (normale Schalterdose) geeignet.

Sollte Interesse an weiteren BASCOM-Funktionen bestehen so könnte ich
Beispiele zu RS485, TWI/I2C, LCD-Ansteuerung usw. liefern.

Autor: stromi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ATMega8Tester:
ich wäre an den routinen interssiert.
i2c und 485. besonders über die haussteuerung würde ich info's haben
wollen. hast du verdrillte leitungen oder telefonkabel genommen, wie
sind die aktuatoren aufgebaut (Verteilung oder dezentral)
tschaui

Autor: fiction (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hätte auch an deinen konzept der haussteuerung interesse.
danke für die infos

kai

Autor: stromi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@at_mega@tester
auch wenn es nicht fertig oder dir nicht gut genug erscheint. es ist
immer interessant für andere.
melde dich doch mal.
mfg
stromi

Autor: pa1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo mega8tester

wäre auch an deiner Haussteuerung interessiert

Autor: DL7SEP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ATMega8Tester:
Ich habe mir vor kurzem auch das Display EA DIP204-4 gekauft.
Leider muss ich feststellen das es mit Bascom AVR nicht richtig
läuft. Die Zeilen und Zeichen erscheinen versetzt zur Orginalposition.
Das gleiche Programm mit gleichem Prozessor aber anderem Display
(HD44780) läuft ohne Probleme.
Wer kann mir bei diesem Problem weiterhelfen??


mfg Sepp

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

Bewertung
0 lesenswert
nicht lesenswert
Was ich noch vergessen habe, ich möchte das Display im vier - Bit
Modus betreiben.


mfg Sepp

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

tja die Zeilenadressen sind bei dem Display(Controller:KS0073) anders.

Ich hab fuer das Display Routinen geschrieben, aber nur fuer HW SPI. Es
spart ein paar Leitungen. Liegt hier in der Codesammlung.... ansonsten
musste alle Routinen selber schreiben ....


Mfg

Dirk

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

Bewertung
0 lesenswert
nicht lesenswert
@DL7SEP:

Ich habe im Dateianhang meine LCD Library für KS0073 EA DIP204-4
angehängt. Diese ersetzt die internen Bascom-LCD-Funktionen:
 _Init_Lcd
 _Write_lcd
 _Lcd_control
 _CLS

Einfach die .LIB in Dein Bascom-LIB Verzeichnis kopieren
und wie im Beispiel der beigelegten .BAS verwenden.

Achtung, ggf. musst Du die Belegung der Ports und die Taktrate (auch
bei den ASM-Delayfunktionen im meiner .LIB) anpassen.

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

Bewertung
0 lesenswert
nicht lesenswert
@ATMega8Tester:
Erstmal vielen Dank für Deine Hilfe,jetzt läuft alles bestens.
Jetzt habe ich nur noch ein Problem.
Das Layout für Prozessor und Display habe ich schon fertig,
allerdings gibt es bei mir folgende Belegung:
RS  = PC5
E   = PC4
DB4 = PC3
DB5 = PC2
DB6 = PC1
DB7 = PC0
RS

RS und E habe ich schon angepasst, aber gibt es in Assembler eine
möglichkeit den Nibble PC0-PC3 an die Display-Pins anzupassen??
Leider habe ich von Assembler keine Ahnung,ein kleiner Tipp währe
für mich hier bestimmt sehr hilfreich.


Nochmals vielen Dank


mfg Sepp

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

Bewertung
0 lesenswert
nicht lesenswert
@DL7SEP:

Ich habe im Dateianhang eine auf Deine Belegung überarbeitete LIB
angehängt.

Die Änderungen habe ich wie am folgenden Beispiel ersichtlich
kommentiert ("Jürgen","Sepp"):

;ldi R24, &B00100100 ;Jürgen 4 Bit-Datenlänge, extension Bit RE=1
 ldi R24, &B01000010 ;Sepp   4 Bit-Datenlänge, extension Bit RE=1

Bitte beachte, ich habe die geänderte LIB nicht getestet, sie sollte
aber funktionieren.

Jürgen

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

Bewertung
0 lesenswert
nicht lesenswert
@ATMega8Tester:
Hallo folgendes Problem stellt sich bei dieser Lösung ein:
Auf dem Display erscheinen andere Zeichen wie ausgegeben.
Ich denke das hat folgenden Grund:
Der Befehl _Write_lcd ist von der Assemblerroutine aktiv,
d.h. die Daten stehen immer gespiegelt an den Portpins.
Die Initsialisierung müsste zwar funktionieren, aber der eigentliche
Datenstrom eben nicht.
Ich habe scho mal versucht folgendes auszukommentieren:
;[_Write_lcd]
;----------------------------------------------------------
 ;_Write_lcd:
 ;sbi   PortC, 5
 ;rjmp  _Write_lcd_Byte

Ich dachte, dass dieses dann von der Orginalroutine übernommen
wird.
Aber leider kommt beim compilieren dann der Fehler
Label not found LCD_DELAY_5MS

Ich weis zwar nicht was die Delay Routine mit dem _Write_lcd
Befehl zu tun hat, aber wie gesagt meine Assemblerkenntnisse....

Kann man vielleicht die .LIB nicht mit dem WordPad Editor bearbeiten?

Aber trotzdem vielen Dank und ich werde noch nicht aufgeben.

Übrigens in Basic könnte ich ein Byte schon spiegeln.
Das Beispiel im Anhang


mfg  Sepp

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nachdem ich Assemmbler nicht verstehe,habe die HomeCon Sepp2.Lib
versucht in Basic nachzubilden.
Das LCD Display wird nun erst mit Bascom AVR und dann mit der
eigenen in Basic geschriebenen Initialisierung initialisiert.
Jetzt funktioniert alles so weit,nur Zeile 2 und 3 sind vertauscht,
aber damit kann ich leben.


mfg Sepp

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

tja weil der Locate Befehl die falschen Adresszeilen anspringt ...

Sub Gotoyx(byval Y As Byte , Byval X As Byte)
Local Dat As Byte
Select Case Y
Case 0 : Dat = &H00
Case 1 : Dat = &H20
Case 2 : Dat = &H40
Case 3 : Dat = &H60
End Select
Dat = Dat + &H80                                            '+ 128
Writecmd Dat
Dat = Dat + X
Writecmd Dat
'Dat = 0
End Sub


Kann sein das du den Stack veraendern musst.

Mfg
Dirk

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,

vielen Dank für Dein Beispiel,aber natürlich gibt es wieder fragen.
Bascom AVR kennt bei mir den Befehl Writecmd nicht.Ist das etwa eine
eigene Routine von Dir?

Wie übergibt man eine Variable von Bascom AVR an eine eigene
Assemblerroutine und wie liest man sie wieder zurück?
Welche Register werden von Bascom verwendet?
Ich habe in der Help darüber nichts gefunden.
Vielleicht könnte mir ein kleines Beispiel auf die Sprünge helfen..


mfg Sepp

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ups wie immer war ich zuschnell .... writecmd ist mein Befehl um ein
Kommando an mein LCD zusenden. Bei dir musste es DAT durch Disp aendern
und Writecmd durch LCDControl.


Wie das mit Bascom ASM hab ich auch nicht kapiert .... deshalb habe ich
alle Routinen in Basic programmiert.
Eigentlich auch nur zuverstehen wie so ein LCD angesteuert wird. Danach
bin ich auf GCC umgestiegen.

Mfg

Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich sollte nochmal die Grundschule besuchen mein Deutsch ist richtig
schlimm :/

Mfg

Dirk

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,

es hat auch mit dieser Änderung nicht geklappt.Aber das ist
nicht schlimm, denn es ist ja nur die LCD-Zeile 2 und 3 vertauscht.
Man kann das ja mit dem Locate-Befehl entsprechend regeln.
Aha Du bist vermutlich auf einen C-Compiler umgestiegen,ich bin
froh wenn ich es mit Bascom schaffe....


mfg Sepp

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nun habe ich es endlich geschafft, die HomeCon.Lib so zu verändern,
damit die Daten gespiegelt an den Pin PC0-PC3 stehen.
Es ist somit viel leichter ein Layout zu erstellen,ohne mit den
Datenleitungen zu kreuzen.
Meine Belegung:
PC0   DB7
PC1   DB6
PC2   DB5
PC3   DB4
PC4   E
PC5   RS
GND   RW
Es ist übrigens mein erster Versuch in Assembler, ich hoffe die
"freaks" möchten es mir verzeihen...:-)

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

Bewertung
0 lesenswert
nicht lesenswert
Hi.
Ich habe auch ein 'EA DIP204-4'.
Ich mache gerade meine Ersten Experimente damit am AT90S2313.

Ich habe also die HomeCon.lib in den Lib-Ordner von Bascom kopiert und
die dazugehörige bas-Datei geöffnet.
Die .lib-Datei hatte ich vorher so abgeändert, dass es zu meines
Kontaktbelegung passt:
PortB.0  =  D4
PortB.1  =  D5
PortB.2  =  D6
PortB.3  =  D7
PortD.0  =  RS
PortD.2  =  E

Auch die Bas-Datei habe ich angepasst.

Auf dem LCD wird aber nichts ausgegeben.

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
die Belegung der HomeCon.Lib stimmt nicht mit dem
was Du geschrieben hast überein.
Ich habs mal abgeändert,kanns aber Hardwaremäßig nicht testen.
Überigens bei Config Lcd 20 * 4a nicht vergessen,sonst
sind die Zeilen vertauscht.

Viel Erfolg

Sepp

Autor: TheME (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.
Ich habe immernoch Probleme mit der BAS-Datei:

Error: 10  Line: 13   Unknown LCD Type [20x4a] , in File (blablabla)

Aus diesem Grund hatte ich auch das 'a' entfernt.

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe die HomeCon_1.2.bas bei mir ohne Fehler compiliert.
Die Version von Bascom AVR ist 1.11.7.3

Oftmals ist der Fehler auch in anderen Zeilen versteckt, als
blabla endeckt.

Viele Grüße Sepp

Autor: TheME (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich ahe genau die gleiche Version.
Unter Options > Complier > LCD kann ich unter 'LCD-Type' außer den
normalen Größen nur '16 * 1a' auswählen.
Aber 20 * 4a gibt es da nicht!

Woher kommen diese Einträge? Wieso fehlt es bei mir?

PS: Der Rest des Codes funktioniert Prima, außer das eben die 2. und 3.
Zeile vertauscht sind!

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bei den Sampels steht:'16 * 1a is intended for 16 character displays
with split addresses over 2 lines.
Wenn man aber in seinem Programm Config Lcd = 20 * 4a schreibt,
funktioniert das eben auch mit einem Vierzeiligen Display(ein kleiner
Trick).
d.h.Programmcode hat vorrang vor Options Compiler Lcd..
Verwende doch mal das Beispiel das in Dip_lcd_1.2.zip enthalten ist.
Ich kann es ohne Fehler Compilieren.


Mfg Sepp

Autor: TheME (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber bei mir funktioniert das eben nicht!

Ich öffne einfach die Beispieldatei aus der Disp_Lcd_1.2.zip
und versuche es dann zu compilieren.

Und dann bringt er mir den oben genannten Fehler.

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann kann ich Dir leider auch nicht mehr weiterhelfen :-(


Viel Erfolg trotzdem Sepp

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal: Danke "Tester" fuer die Zeichen-Muster.

Wird fuer die hier "versammelten" Bascom-Anhaenger wohl weniger
interessant sein, aber sozusagen als "was zurueckgeben fuer
genommenes": Eine "simple" Uhr welche die Zeichen-Muster benutzt.
Implementiert in C (avr-gcc). Code aendert sich wahrscheinlich anfangs
eh noch etwas, also Link statt Attachment:
http://www.siwawi.arubi.uni-kl.de/avr_projects/lcdclock/

Martin

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

Bewertung
0 lesenswert
nicht lesenswert
Hi.
Ich habe mein LCD jetzt an ein 8515 angeschlossen.
Weil ich nicht selber in der Lage war, die LIB-Datei auf die neue
Belegung anzupassen habe ich die EA DIP204.LIB von Sepp verwendet und
mir eine eigene bas-Datei geschrieben.

Nun habe ich das Problem, dass auf dem LCD eigentlich der Wert "100"
ausgegeben werden müsste. Stattdessen erscheint aber immer nur das
erste Zeichen.

Woran kann das liegen?

Ich hab schon einen 4MHz-Quarz ausprobiert, aber da ist es genauso.

Kann jemand mal die LIB-Datei überprüfen oder eine frische erstellen?

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

versuchs mal damit, sollte eigentlich funktionieren.


Viele Grüße Sepp

Autor: TheME (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.
Ich habe damit immernoch Probleme:

Wenn ich die Ausgabe auf dem LCD in eine Schleife reinschreibe, also
locate 1,1: Print X
Dann zeigt er auf dem LCD zwar die Zahl 100 an, aber die mittlere 0
flimmert.
Woran kann das liegen?

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

normalerweise ist diese Seite für Source-Code gedacht und nicht als
Hilfe.
Aber wenn Du eine LCD-Ausgabe in eine Schleife schreibst,wird die
Anzeige beim übernehmen des neuen Wertes(auch wenn er sich nicht
geändert hat)immer Flimmern.
Ich vergleiche z.B. den momentanen Messwert eines AD-Wandlers mit
einer Messung vorher,und schreibe auf das Lcd-Display nur wenn der
Wert sich geändert hat.


Viele Grüße Sepp

Autor: TheME (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorher (mit der alten LIB-Datei) hatte ich dieses Flimmern aber nicht,
obwohl es auch in einer Schleife stand.

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig doch mal deinen Sorce-Code,
bei deinem alten Programm stand es nicht in einer Schleife :-)

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

Bewertung
0 lesenswert
nicht lesenswert
Die Datei lcd_menu.bas öffnen.
darin wird dann auf die anderen Dateien verwiesen.

Mit dem Programm möchte ich den PC starten/beenden und den Status (CPU,
LAN, ...) abfragen. Die Kommunikation soll über UART hergestellt werden
(noch nicht fertig!)

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt ist alles klar,
Deine Subroutinen die auf das LCD Display zugreifen haben am
Anfang immer den Clear Screen Befehl (CLS) und damit flackert Deine
Anzeige.
Am einfachsten den alten Wert durch den neuen Wert überschreiben.
Wenn dieser Wert verschieden lange Zeichen enthält,dann die
Betreffende Zeile mit z.B.Locate 1,1 auswählen und dann einfach
"                     "mit 20 Leerzeichen überschreiben.
Es gibt bestimmt noch viele andere Möglichkeiten....
Übrigens Config Lcd 20 x 4a verwenden, dann stimmen auch die
Zeilen.
So das muss aber jetzt als Starthilfe reichen.


Viele Grüße Sepp

Autor: TheME (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also dass mit dem CLS ist nicht wahr.
Mit der alten LIB-Datei hatte es ja funktioniert, da hat nichts
geflackert, abst stattdessen zeigte er nur das erste Zeichen bei
Variablen dar.

Erst seit der neuen Lib flimmert das LCD.

Was mir auch noch aufgefallen ist:
Unter Verwendung der neuen Lib musste ich auch die Belegung des LCDs am
µC ändern.

Könntest du mir eine neue Lib schreiben mit folgender Belegung (so
hatte es auch mit der alten LIB funktioniert):
RS:   PC.5
R/W:  GND
E:    PC.4
D4:   PC.3
D5:   PC.2
D6:   PC.1
D7:   PC.0

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei aller Freundschaft oder so..
Ich habe Dir jetzt einige Tips gegeben und wenn Du Sie nicht
glaubst dann musst Du eben selber draufkommen.
Ich hatte auch keinen "Helfer" und wenn ma es dann schafft,
freut man sich um so mehr.

Das ist nicht böse gemeint, aber manche Dinge muss man sich
einfach selber erarbeiten.
Und ein "Dankeschön" schreibt sich auch nicht schwer oder?

Viele Grüße Sepp

Autor: TheME (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.

Bist du in der Lage ein kleines Programm für Windows zu erstellen,
indem man einfach angibt, welcher Pin wo am LCD angeschlossen wird, und
die Software generiert dann daraus die LIB-Datei.

Hast du die Möglichkeit sowas zu machen?

Vielen Dank für deine bisherige Hilfe.

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider Nein :-(


Viel Erfolg Sepp

Autor: TheME (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es mittlerweile selbst hinbekommen, die Lib umzuschreiben.

Danke für deine Bemühungen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo miteinander,

habe nach dem Vorbild von Atmega8tester auch mal eine Programmierung
für große Zahlen vorgenommen. Die einzelnen Zahlen sind fertig und
erscheinen auch korrekt auf dem Display.

Ich habe die einzelnen Buchstaben so programmiert, das ich nur die
Anfangs- "X"- Koordinate eingebe, das heißt, der Buchstabe beginnt
immer bei y=1, und dem dementsprechenden X- Punkt (Spalte auf dem
Display). Das ist aber alles nur Randbedingung. Das eigentliche Problem
ist, das die Darstellung eines Buchstaben in einer SUB abläuft, und nur
der X- Parameter übergeben wird, die Berechnung der weiteren
Koordinaten erfolgt in der Sub. X1=X+1 wäre somit die Berechnung für
die 2. Spalte.

Als Testprogramm soll die Zahl über eine FOR- Schleife über den
Bildschirm wandern, d.h. bei jedem Schleifenduchlauf wird x um 1
erhöht, der Inhalt von X wird übergeben, und müsste somit der
Grundparameter für die Berechnung in der SUB sein. Problem ist jetzt
folgendes: NUR der Teil der Zahl läuft durch den Bildschirm, der das
"Grund"- X in seinem Locate- Befehl hat, der Rest der Zahl bleibt
stehen.
Fakt ist: Er berechnet das X1 und das X2 in der Sub nicht, das X kommt
aber korrekt an! Meine Frage ist, wieso macht er das?

Ich schreib hier mal den entscheidenden Teil des Programms hin, der
Rest des Programms ist erstmal uninteressant, und läuft auch korrekt
ab.


*****************************************************
Dim I as byte

do

for i = 1 to 10 step 1
cls
x= x + 1
locate 1, 12: lcd X            !!! Nur Testzeile ob x berechnet wird
call zahl2(x)
waitms 200
if x= 10 then x= 0
next i

loop
.
.
.
sub zahl2(x as byte)
local x1 as byte: x1 = x + 1        !!!Interessante Zeile!!!
local x2 as byte: x2 = x + 1        !!!Interessante Zeile!!!
local y1 as byte: y1 = y + 1
local y2 as byte: y2 = y + 1
local y3 as byte: y3 = y + 1

 locate 2,12: lcd x1           !!! Nur Testzeile ob x1 berechnet wird
 locate 3,12: lcd x2           !!! Nur Testzeile ob x2 berechnet wird
 locate 4,12: lcd x    !!! Nur Testzeile ob x überhaupt übergeben wird

locate y,x : lcd chr(3)
locate y,x1: lcd chr(0)
locate y,x2: lcd chr(4)
locate y1,x: lcd chr(3)
locate y1,x1: lcd chr(0)
     u.s.w.

end sub

wie bereits erwähnt, das ist nur ein Auszug des Programms, der Rest
funktioniert einwandfrei, die Sub ist auch irgendwo mal entsprechend
deklariert. Ich hoffe es gibt eine einfache Lösung dafür, danke
schonmal für eure Mithilfe.

Autor: Ronny Schmiedel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
brauche dringend Hilfe. Habe die Lib für auf meine Anschlüsse
umgeschrieben, aber es erscheinen nur 2 blinkende schwarze Kästchen
(1.Zeile, 16.Spalte und 2.Zeile, 4.Spalte) nach einem "CLS". Was habe
ich falsch gemacht. Benutze das EA DIP204-4.

Vielen Dank für Eure Hilfe.

Autor: Ronny Schmiedel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uuups vergessen, benutze einen AT90S2313...

Autor: Ronny Schmiedel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt, habe es selbst hinbekommen.

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

bin neu in der uC Materie und hab da mal ne Frage zur HomeCon_1.2.lib.

Zunächst mal ein Lob, find ich SUPER was hier läuft mit open source

und so.

Nun meine Frage: Ich arbeite mit einem Mega16 und hab nach einigen

Fehlversuchen mit der HomeCOn Lib mein LCD zum laufen bekommen.

Der Pferdefuß dabei ist, dass ich mit maximal 6MHz takten kann.

Darüber gibt das Disp nur noch kauderwelsch aus.

Habt Ihr evtl. nen Tip? Es schein sich um ein Timing Problem zu

handeln, aber ich komm nicht drauf wie ich dsa in den Griff bekommen

kann, damit ich die vollen 16MHz ausreizen kann.

Autor: Josef Bartl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Marko,

schau doch mal am Ende der Lib dort solltest Du dieses finden:
*********************************************************************
LCD_Delay_5ms:
                   ldi   R24, 100          ; R24 Register mit Delaywert
100 * 50us vorbelegen
LCD_Delay_5ms2:
                   rcall LCD_Delay_50us    ; 50us Pause
                   dec   R24               ; R24 Registerinhalt um 1
runterzählen
                   brne  LCD_Delay_5ms2    ; Springe bei ungleich
zurück zu LCD_Delay_5ms2
                   ret                     ; Funktionsende

LCD_Delay_50us:
                   ldi   R25, 65           ; R25 Register mit Delaywert
vorbelegen
LCD_Delay_50us2:
                   dec   R25               ; R25 Registerinhalt um 1
runterzählen
                   brne  LCD_Delay_50us2   ; Springe bei ungleich
zurück zu LCD_Delay_50us2
                   ret                     ; 1 Takt (Befehlszyklus) bei
3,6864Mhz dauert ca. 271ns
                                           ; 50us / 271ns * 3 Takte in
der Schleife = 61,5

*********************************************************************

ldi   R24, 100 ;kannst Du mit max. 255 vorbelegen
ldi   R25, 65  ;kannst Du mit max. 255 vorbelegen

Wenn es dann immer noch zu schnell ist, dann kannst Du ja die schleife
doppelt aufrufen.


Viel Erfolg Sepp

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super Danke, für die flotte Antwort Sepp!

Manchmal sieht man den Wald vor lauter Bäumen nicht!

Hab etwas gespielt mit den Werten und hab für den Mega 16 bzw. 32

auf 16MHz als stabil lauffähig beide Werte auf 200 rausbekommen.

Nur so als Anmerkung für andere mit gleichem Problem.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen!

Also meine Lib funktioniert und auch die Darstellung von großen Zahlen
geht. - Eigentlich. Wenn ich z.B. die Zahl "100" anzeigen lassen
will, kann ich das über diese Funktion:
  Lcdbigspalte = 12 : Lcdbigzahl = 1 : Lcdbig
  Lcdbigspalte = 15 : Lcdbigzahl = 0 : Lcdbig
  Lcdbigspalte = 18 : Lcdbigzahl = 0 : Lcdbig 

Jetzt habe ich aber das Problem, daß sich diese Zahl permanent ändert,
wie bei einer Uhr oder einem Thermometer z.B.

Was muß ich tun (Beispielcode?), damit meine Zahlen als ganzes
angeziegt werden und nicht nur ziffernweise? Oder, falls das nicht
geht, wie zerlege ich meine 3-stellig Zahl in die einzelnen Ziffern?

Für Eure Hilfe wäre ich sehr dankbar!

Frohe Weihnachten!
Stefan

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!? :-(
Kann mir denn niemand einen Tip geben?

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus dem Bauch herraus würde ich sagen in String umwandeln und mit left
oder so Zahl für Zahl auslesen.

Autor: Arrow (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!
Funktioniert auch noch bei 2.0.7.5! :D

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.