Hallo,
ich bin es mal wieder.
Ich habe mir ein Display besorgt und das ansteuern klappt auch ganz gut,
habe das Tutorial benutzt.
jetzt würde ich gerne AD Werte auf dem Display ausgeben.
Ich habe dann mal hier im Forum gesucht und auch folgendes gefunden:
Beitrag "zweiter ADC-Wert auf LCD ausgeben"
Das was Thorsten machen will, will ich eigentlich auch, ich will beide
Werte auf dem LCd ausgeben.
Jetzt habe ich mir seinen Code besorgt, die letzte VErsion, weis nicht
ob die richtig funktioniert.
Dann habe ich mir die lcd.h/lcd.c von Peter Fleury gezogen. Weis aber
nicht so richtig, wie ich diese in AVR Studio einbinde.
Habe die lcd.h schon eingebunden, aber es funktioniert nicht.
Das sind die Fehlermeldungen:
C:\Dokumente und Einstellungen\...\Eigene
Dateien\AD_WERTE_LCD\default/../AD_WERTE_LCD.c:34: undefined reference
to `lcd_init'
C:\Dokumente und Einstellungen\...A\Eigene
Dateien\AD_WERTE_LCD\default/../AD_WERTE_LCD.c:63: undefined reference
to `lcd_gotoxy'
C:\Dokumente und Einstellungen\...A\Eigene
Dateien\AD_WERTE_LCD\default/../AD_WERTE_LCD.c:64: undefined reference
to `lcd_puts'
C:\Dokumente und Einstellungen\...\Eigene
Dateien\AD_WERTE_LCD\default/../AD_WERTE_LCD.c:81: undefined reference
to `lcd_gotoxy'
C:\Dokumente und Einstellungen\...\Eigene
Dateien\AD_WERTE_LCD\default/../AD_WERTE_LCD.c:82: undefined reference
to `lcd_puts'
kann mir da einer helfen.
In der zip Datei sind diese Files drin:
test_lcd.c
doxygen.css
doxygen.png
lcd.h
lcd.c
makefile
Brauche ich alle Dateien?
DANKE
Hallo,
ok, danke Karl heinz.
Dann habe ich unter Source Files zwei Dateien?
Ich habe ja da noch die Datei, die meine AD Wandlung anstösst.
Oder schriebe ich das in lcd.c?
LG
Hans Peter schrieb:
> Hallo,>> ok, danke Karl heinz.> Dann habe ich unter Source Files zwei Dateien?> Ich habe ja da noch die Datei, die meine AD Wandlung anstösst.> Oder schriebe ich das in lcd.c?
Die lcd.c lässt du in Ruhe!
Die muss nur mitcompiliert und mitgelinkt werden.
Die bringt die lcd-Basisroutinen in das Projekt mit ein.
Hallo,
mitcompilieren? Muss ich die Datei dafür extra anklicken, oder reicht es
wenn ich die andere Datei im Ordner Source Code anklicke und dann F7
drücke?
Wie mache ich das mit dem rüberschicken auf den mC?
Die ganze Zeit habe ich nur einen hex Datei gehabt, jett habe ich aber
zwei .c Dateien?
LG
Hans Peter schrieb:
> Hallo,>> mitcompilieren? Muss ich die Datei dafür extra anklicken, oder reicht es> wenn ich die andere Datei im Ordner Source Code anklicke und dann F7> drücke?> Wie mache ich das mit dem rüberschicken auf den mC?> Die ganze Zeit habe ich nur einen hex Datei gehabt, jett habe ich aber> zwei .c Dateien?
Füge einfach nur das lcd.c zum Projekt hinzu.
Mehr musst du nicht tun! Ist doch nicht so schwer.
Um den Rest kümmert sich AVR-Studio.
(Hast du den Link in die FAQ gelesen. Da ist in kurzen Worten
beschrieben, was beim compilieren und linken abgeht und warum das lcd.c
mit in das Projekt muss.
Ein C-Projekt kann durchaus aus mehreren *.c Dateien bestehen. Sie alle
zusammen ergeben das fertige Programm)
Hans Peter schrieb:
> Hallo,>> nein, das ist nicht so schwer, ja habe ich gelesen.> Das nächste Problem, mein Display zeigt nur in der ersten Zeile schwarze> Balken an.
Dann wurde es nicht korrekt initialisiert.
Hast du die Taktfrequenz des Prozessors bzw. die Pinzuordnung wie das
LCD angeschlossen ist, korrekt in lcd.h eingetragen?
> wie gesagt, habe den Code hier aus dem Forum.
Der ist momentan noch uninteressant.
Nach dem Aufruf von
lcd_init(LCD_DISP_ON);
muss der schwarze Balken am Display verschwinden und das Display leer
sein. Daran erkennst du, dass das LCD korrekt initialisiert wurde.
Hallo,
ja da hängt es. Die lcd.c ist nicht für den ATmega32.
Gibt es die irgendwo für den ATmega32?
Habbe jatzt den LCD Port mal von A auf D geändert. Muss ich sonst noch
auf irgendwas achten?
LG
Hans Peter schrieb:
> Hallo,>> ja da hängt es. Die lcd.c ist nicht für den ATmega32.> Gibt es die irgendwo für den ATmega32?
Das ist quatsch.
Die lcd.c geht für jeden AVR-Prozessor, solange er nur genug Pins hat.
> Habbe jatzt den LCD Port mal von A auf D geändert. Muss ich sonst noch> auf irgendwas achten?
Stell deine Konfiguration ein.
Quarzfrequenz und an welchen Pins dein LCD wie angeschlossen ist.
Ach ja. Die Fleury Lib erwartet ein vollständig angeschlossenes LCD.
Also:
4 Datenpins
R/W Leitung
R/S Leitung
E Leitung
Ohne R/W funktioniert sie nicht.
Du musst anpassen
Hier
1
#define XTAL 4000000 /**< clock frequency in Hz, used to calculate delay timer */
hier
1
#define LCD_LINES 2 /**< number of visible lines of the display */
2
#define LCD_DISP_LENGTH 16 /**< visibles characters per line of the display */
3
#define LCD_LINE_LENGTH 0x40 /**< internal line length of the display */
4
#define LCD_START_LINE1 0x00 /**< DDRAM address of first char of line 1 */
5
#define LCD_START_LINE2 0x40 /**< DDRAM address of first char of line 2 */
6
#define LCD_START_LINE3 0x14 /**< DDRAM address of first char of line 3 */
7
#define LCD_START_LINE4 0x54 /**< DDRAM address of first char of line 4 */
8
#define LCD_WRAP_LINES 0 /**< 0: no wrap, 1: wrap at end of visibile line */
(wobei da das meiste von Haus aus stimmen wird. Wenn dein LCD 4 Zeilen
hat, dann ändere LCD_LINES. Wenn dein LCD mehr als 16 Zeichen pro Zeile
anzeigen kann, dann schreib die Zahl bei LCD_DISP_LENGTH hin. Der Rest
wird ziemlich sicher passen)
und hier
1
#define LCD_PORT PORTA /**< port for the LCD lines */
2
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
3
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
4
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
5
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
6
#define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */
7
#define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */
8
#define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */
9
#define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */
10
#define LCD_RS_PORT LCD_PORT /**< port for RS line */
11
#define LCD_RS_PIN 4 /**< pin for RS line */
12
#define LCD_RW_PORT LCD_PORT /**< port for RW line */
13
#define LCD_RW_PIN 5 /**< pin for RW line */
14
#define LCD_E_PORT LCD_PORT /**< port for Enable line */
Das habe ich alles soweit geändert.
E swar nur PORT A falsch, die Belegung war i.O.
Habe es angeschlossen, wie es im Tutorium beschrieben ist.
Aber die 1. Zeile ist noch schwarz und das geht nicht weg.
Hans Peter schrieb:
> Das habe ich alles soweit geändert.> E swar nur PORT A falsch, die Belegung war i.O.> Habe es angeschlossen, wie es im Tutorium beschrieben ist.
In welchem?
Hier von der dieser Site?
Da wird R/W doch gar nicht benutzt.
Aber die Fleury Lib braucht R/W.
Hab ich doch alles schon geschrieben! Ein wenig besser aufpassen musst
du schon!
Also nimm Pin 5 vom LCD wieder weg von GND und hänge es an deinem Mega32
an. Den Pin an dem du das tust trägst du noch in lcd.h ein (und
kontrollierst nochmal die anderen beiden R/S und E. Speziell E! E ist im
Tutorium am AVR-Pin portD-5. In der Standardvorgabe der lcd.h ist es
aber portA-6. Wenn du also nur portA auf portD änderst und sonst nichts,
dann hast du die lcd.h falsch konfiguriert.
Hallo,
habe an XTAl nichts angeschlossen.
Die FUSE Bits stehen auf 1MHz, das habe ich angepasst. XTAl = 1000000
Aber das Display bleibt weiter schwarz.
Um noch mal auf den Link zurückzukommen, ich habe die lcd.c Datei nur in
den Source Ordner von AVR reingezogen. Da habe ich jetzt zwei Dateien
drin, und die lcd,h habe ich unter Header reingezogen. In dem Link
steht, wenn man fertige .c Dateien reinzieht, dann macht AVR den Rest.
Ich habe jetzt nirgends lcd.c aufgerufen, oder verlinkt.
Kann es daran liegen?
Hier noch mal der Code
Hans Peter schrieb:
> Hallo,>>> habe an XTAl nichts angeschlossen.
Darum gehst nicht.
Die lcd.c muss ein paar Warteschleifen am Anfang abwarten. Und um die zu
dimensionieren muss die init Funktion die Taktfrequenz kennen.
> Die FUSE Bits stehen auf 1MHz, das habe ich angepasst. XTAl = 1000000
Gut.
> Aber das Display bleibt weiter schwarz.
Schlecht.
Sagtest du nicht, dass die Tutoriumsfunktionen schon funktioniert
hätten?
> Um noch mal auf den Link zurückzukommen, ich habe die lcd.c Datei nur in> den Source Ordner von AVR reingezogen.
Gut.
> Da habe ich jetzt zwei Dateien> drin, und die lcd,h habe ich unter Header reingezogen. In dem Link> steht, wenn man fertige .c Dateien reinzieht, dann macht AVR den Rest.> Ich habe jetzt nirgends lcd.c aufgerufen
Doch, hast du.
Du hast die Funktion lcd_init aufgerufen.
Und die steckt in lcd.c
Was du meinst: Du hast sie nicht compiliert.
Doch hast du
Wenn lcd.c in den Projekt Sourcen im Projekt Baum vom AVR-Studio mit
drinnen ist, dann sorgt AVR Studio dafür, dass sie compiliert wird.
Achte doch mal auf die Ausgabemeldungen im Output Fenster. Da wirst du
sehen, dass lcd.c durch den Compiler geschickt wird (zur Not musst du
dafür sorgen, dass AVR Studio denkt, die lcd.c wäre verändert worden.
Also lcd.c aufmachen, ein Leerzeichen rein und gleich wieder
rauslöschen. Effektiv hat sich nichts geändert, aber AVR-Studio weiß das
nicht und lässt sie neu compilieren)
> oder verlinkt.
AUch dafür sorgt AVR Studio.
Wieder. Wenn du dir beim Build den Output, speziell die Command Line für
den Linker, genau ansiehst, dann wirst du dort lcd.o entdecken. Und die
lcd.o wird erzeugt, indem lcd.c compiliert wird.
> Kann es daran liegen?
Nein.
Entweder stimmen deine Zeiten nicht, oder deine Pin-Konfiguration ist
anders. Wenn das Display mit dem Code hier aus dem Tutorium funktioniert
hat, funktioniert es auch mit der Fleury Lib (wenn R/W tatsächlich
verbunden wurde und die restlichen Pins richtig verdrahtet/in die
Konfiguration eingetragen wurden)
> Hier noch mal der Code
Der ist im Moment zu 95% uninteressant.
Es geht um das LCD und dessen Initialisierung.
Im Grunde könntest du auch diesen Code zum Testen der Initialisierung
benutzen
1
#include<stdlib.h>
2
#include<avr/io.h>
3
#include<util/delay.h>
4
#include"lcd.h"
5
6
intmain(void)
7
{
8
_delay_ms(200);
9
10
lcd_init(LCD_DISP_ON);
11
lcd_puts("Hallo");
12
13
while(1)
14
;
15
}
Zum jetzigen Zeitpunkt ist alles was nach dem lcd_init kommt unwichtig.
Es interessiert kein ADC, es interessiert keine Auswertung.
Jetzt ist nur wichtig, dass lcd_init aufgerufen wird, druchläuft und
danach das LCD initialisiert ist (sprich die Balken verschwunden sind).
Im Grunde ist auch der lcd_puts nicht wirklich wichtig. Aber es ist
natürlich netter, wenn nach erfolgter Initialisierung etwas am LCD
steht.
Hallo,
habe jetzt schon alles versucht, aber die Balken gehen einfach nicht
weg.
Ich habe mal gemessen, am RS und am R/W Pin habe ich 5V anliegen.
Habe zuerst die Leitungen DB4-DB7 also PIN 11-14 vom LCD genommen.
Habe das aber auch wieder geändert, auf DB0-DB3 PIN 7-10 am LCD.
Aber leider ohne Erfolg.Vss und Vee habe ich auf GND, Vdd auf 5V.
Den Rest habe ich so angeschlossen wie im Quelltext.
LG
>#define LCD_DATA0_PIN 11 /**< pin for 4bit data bit 0 */>#define LCD_DATA1_PIN 12 /**< pin for 4bit data bit 1 */>#define LCD_DATA2_PIN 13 /**< pin for 4bit data bit 2 */>#define LCD_DATA3_PIN 14 /**< pin for 4bit data bit 3 */
Das kann unmöglich stimmen.
Es ist nicht die Pin-Nummer des Gehäuses gemeint (Wie kommt man auf so
eine Idee ?), sondern das Bit des Ports.
Hallo,
also ich verwende wie im Tutorial DB4-DB7, das sind dei Anschlüsse 11-14
vom LCD.
Ich schließe Sie so an:
DB4 an PD0
DB5 an PD1
DB6 an PD2
DB7 an PD3
an PD4 hängt RS
an PD5 R/W
und PD6 ist an E angeschlossen
Aber was trge ich jetzt unten ein?
[c]
#define LCD_PORT PORTD /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN ? /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN ? /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN ? /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN ? /**< pin for 4bit data bit 3 */
#define LCD_RS_PORT LCD_PORT /**< port for RS line */
#define LCD_RS_PIN 4 /**< pin for RS line */
#define LCD_RW_PORT LCD_PORT /**< port for RW line */
#define LCD_RW_PIN 5 /**< pin for RW line */
#define LCD_E_PORT LCD_PORT /**< port for Enable line */
#define LCD_E_PIN 6 /**< pin for Enable line */
> DB4 an PD0> DB5 an PD1> DB6 an PD2> DB7 an PD3
--->
#define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */
Im C Programm wird alles aus Sicht der Prozessors gesehen.
Der gibt an PD0 aus, wenn er den LCD Datenpin DB4 manipulieren will. Wie
das dann durch den Draht geht um letztendlich am LCD Pin 11 zu landen,
interessiert den Prozessor nicht.
Hast du den vorgeschlagenen delay schon probiert?
#define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */
Hallo,
danke für die Antworten, ich habe jetzt mal alles abgeklemmt und nur das
Display angeschlossen, aber ich bekomme nur den schwarzen Balken in der
ersten Zeile.
Aber die Zeile heißt doch
#define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */
ich verwende aber doch nicht DB0, sondern DB4, muss ich es da nicht
ändern.
Sorry, aber ich blicke da nicht durch.
Sorry zu spät gelesen.
Habe noch was, und zwar:
1
#define LCD_LINES 2 /**< number of visible lines of the display */
2
#define LCD_DISP_LENGTH 20 /**< visibles characters per line of the display */
3
#define LCD_LINE_LENGTH 0x40 /**< internal line length of the display */
4
#define LCD_START_LINE1 0x00 /**< DDRAM address of first char of line 1 */
5
#define LCD_START_LINE2 0x40 /**< DDRAM address of first char of line 2 */
6
#define LCD_START_LINE3 0x14 /**< DDRAM address of first char of line 3 */
7
#define LCD_START_LINE4 0x54 /**< DDRAM address of first char of line 4 */
8
#define LCD_WRAP_LINES 0 /**< 0: no wrap, 1: wrap at end of visibile line */
Ich habe aber 2 Zeilen, das habe ich ja auch eingetragen, aber es sind
ja 4 Zeilen definiert.
Kann ich die einfach löschen, oder macht das nichts?
Ich verwende nur deinne Programmcode, kein AD und nix.
Habe jetzt auch nur das LCD und die Stromversorgung am mC angeschlossen,
mehr nicht. Habe auch mal ein Poti angeschlossen, um den Kontrast zu
verstellen, aber das war es auch nicht.
Ich bekomme aber noch eine Warnung:
c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:85:3: warning:
#warning "F_CPU not defined for <util/delay.h>"
LG
>ich verwende aber doch nicht DB0, sondern DB4, muss ich es da nicht
ändern.
Nein, der Prozessor kennt deine Verdrahtung sowieso nicht - es ist hier
der Port des uc gemeint.
>Ich habe aber 2 Zeilen, das habe ich ja auch eingetragen, aber es sind>ja 4 Zeilen definiert.>Kann ich die einfach löschen, oder macht das nichts?
Das kannst du so lassen wie es ist (Wenn die Spaltenanzahl passt)
Dein Display ist also ein 2x20 ?
Schreib doch mal bitte die genaue Bezeichnung, oder noch besser ein Link
zum Datenblatt.
Hallo,
mein Display ist von Pollin.
Es ist ein Datavision DV-20208.
Datenblatt:
http://www.pollin.de/shop/dt/MDg0OTc4OTk-/Bauelemente/Aktiv/Displays/LCD_Modul_DATAVISION_DV_20208.html
unter Download
Ich habe es schonmal getestet, aber ohne die Library von Peter Fleury,
da hat es funktioniert.
Habe da alles so gemacht wie im Tutorium.
Es war ein makefile in der rar Datei von der Library dabei, aber wo
binde ich das ein, habe noch nie sowas eingebunden.
LG
Hans Peter schrieb:
> Hallo,>> mein Display ist von Pollin.> Es ist ein Datavision DV-20208.> Datenblatt:> http://www.pollin.de/shop/dt/MDg0OTc4OTk-/Bauelemente/Aktiv/Displays/LCD_Modul_DATAVISION_DV_20208.html> unter Download>> Ich habe es schonmal getestet, aber ohne die Library von Peter Fleury,> da hat es funktioniert.> Habe da alles so gemacht wie im Tutorium.> Es war ein makefile in der rar Datei von der Library dabei, aber wo> binde ich das ein, habe noch nie sowas eingebunden.
Wenn du AVR-Studio benutzt, brauchst du das makefile auch nicht.
AVR-Studio macht sich selber eines.
Einfach die lcd.c und die lcd.h zu deinem Projekt hinzufügen. In der
lcd.h die beschriebenen Dinge anpassen und gut ists.
> Ich bekomme aber noch eine Warnung:> c:/winavr-20090313/lib/gcc/../../avr/include/util/> delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"
Hast du jetzt endlich im AVR-Studio in den Project Configurations die
Taktfrequenz eingetragen?
Mach doch mal ein Photo von deinem Aufbau.
Aber bitte eines, auf dem man auch was erkennen kann und Kabelverläufe
nachvollziehen kann.
Hallo,
habe den Code von Karl heinz genommen und eine .c Datei daraus gemacht.
Dann die lcd.c von Peter Fleury eingefügt unter Source Files, danach die
lcd.h unter Header Files eingefügt.
Die Änderungen die ich gepostet habe vorgenommen, aber es funktioniert
einfach nicht.
Ich habe mir hier aus dem Forum den Programmcode für das auslesen der
AD-Eingänge genommen. Da werde dann die Werte direkt auf dem LCd
ausgegeben. Der Autor verwendet aber die Library von peter, deshalb habe
ich diese auch genommen.
LG
Hans Peter schrieb:
> Die Änderungen die ich gepostet habe vorgenommen, aber es funktioniert> einfach nicht.
Mach mal ein Photo vom Aufbau
Mitlerweile bin ich soweit, dass ich die Verkabelung gerne überprüfen
würde.
Die Fleury Lib hat bei mir eigentlich noch immer auf Anhieb
funktioniert. Wenn sie es nicht tat, dann war das immer ein
Verdrahtungsfehler.
Hallo,
das habe ich doch schon geschrieben.
Pin 1 vom LCd mit GND
Pin 2 vom lcd mit +5V
Pin3 mit GND (Vee)
Pin 4 (RS) mit PD4 vom mC
Pin 5 (R/W) mit PD5 vom mC
Pin 6 (E) mit PD6 des mC
dann die Datenleitungen:
Pin 11 vom LCd mit PD0
Pin 12 mit PD1
Pin 13 mit PD2
Pin 14 mit PD3
habe PD0-PD7 komplett belegt.
Hans Peter schrieb:
> Hallo,>> das habe ich doch schon geschrieben.
Weiß ich.
Ich würde es trotzdem gerne sehen.
Ich war mir auch 2 Stunden lang sicher, dass ich ein LCD völlig korrekt
angeschlossen habe und meine Freundin hat dann jedes Kabel einzeln
duchgesehen und in 10 Sekunden den Fehler gefunden :-)
> habe PD0-PD7 komplett belegt.
PD0 bis PD6
Du machst soviele Tippfehler und widersprüchliche Aussagen, dass ich
nichts mehr einfach so glaube ehe es nicht 3 mal kontrolliert wurde.
Noch was.
Kannst du mal an einem Port (B - Pin 0) eine Led anschliessen?
Portpin - 100 Ohm (in der Größenordnung) - Led - Masse
Ich würde gerne was kontrollieren.
Sorry, du hast recht.
Hier mal das Bild vom Display.
links ist Pin 1 und ganz rechts Nummer 20.
Die Kabel links von dem roten, sind Pin 1 - Pin6.
Ich habe die ersten 6 verwendet, wie geschrieben, und dann die Kabel ab
Pin 11 bis Pin 14.
..und bevor Karl Heinz an dir verzweifelt, stell doch bitte noch ein
Bild rein wo Display und uc ZUSAMMEN , also zusammen auf einem Bild zu
sehen sind.
Samt allen Kabeln natürlich.
Hallo,
ich verzweifel auch gleich.
Hier ist das Foto, aber es ist nicht so gut, habe ein ziemlich langes
Kabel genommen (Flachband) und das ist ein großes Durcheinander. Hoffe
ihr könnt doch was erkennen.
Ich habe einen 16 MHz Quarz hier.
Dann schliess mal den Querz an. Und stell dein Projekt auf 16Mhz um.
Und zusätzlich machst du einen Kondensator (ca. 100nf) zwischen plus und
minus.
Ist die Leuchtdiode richtig herum angeschlossen ?
Auf dem Foto erkennt man leider immer noch nicht, ob die Kabel richtig
ansgeschlossen sind.
Warum sind am LCD eigentlich alle Adern angelötet ?
Hans Peter schrieb:
> Halllo,>> es blinkt nix.> Habe den Code reinkopiert, und die LED mit Widerstand an PB0> angeschlossen.>> Ist der mC defekt?
Nein.
Die Fleury Lib wartet die ganze Zeit auf Rückmeldung vom LCD
doc schrieb:
> Auf dem Foto erkennt man leider immer noch nicht, ob die Kabel richtig> ansgeschlossen sind.
Schluchz, huh, huh, huh, schluchz
Es kann doch nicht so schwer sein, ein Photo zu produzieren, auf dem man
am LCD Pin anfängt, mit dem Finger dem Kabel nachfährt und nachsieht wo
man am µC landet.
Schluchz, huh, huh, huh, wein, heul
Hallo,
ja die LED ist richtig drin, ist das schlimm mit den ganzen kabeln am
LCD?
Was ist mit den 22pF Kondensatoren, brauche ich die auch?
Ist es egal wie herum der Quarz angeschlossen wird?
Kondensator zwischen Plus und Minus, also püarallel zum Quarz, oder wie?
> Ist die Leuchtdiode richtig herum angeschlossen ?
Wäre eine Möglichkeit.
Gegentest. alles so lassen wie es ist (auch die Diode nicht umdrehen),
aber anstelle von GND geht man nach Vcc
Hans Peter schrieb:
> Hallo,> ja die LED ist richtig drin, ist das schlimm mit den ganzen kabeln am> LCD?> Was ist mit den 22pF Kondensatoren, brauche ich die auch?> Ist es egal wie herum der Quarz angeschlossen wird?> Kondensator zwischen Plus und Minus, also püarallel zum Quarz, oder wie?
Machs jetzt nicht noch komplizierter.
Dein µC arbeitet genau genug mit 1Mhz.
Zur Not schreib überall 8Mhz rein.
Also in den Projekt-Configurations Options und beim XTAL in lcd.h
Dann lügen wir die Software zwar an, aber wir lügen auf der guten Seite.
Alle Zeiten sind dann viel zu lang, aber das ist bei einem LCD
unkritisch. Das Gegenteil ist kritischer. Zu langsam ist kein Problem,
zu schnell aber schon.
Das Kabel ist super lang, es ist fast unmöglich, ein Bild hinzubekommen,
auf dem man das Display und das Kabel in seiner vollen Länge sieht, um
mit dem Finger nachzufahren.
Nach der LED nicht auf GND sondern auf VCC?
Quraz jetzt rein oder nicht?
Hans Peter schrieb:
> Nach der LED nicht auf GND sondern auf VCC?
Nur um sicherzugehen, dass du die Led nicht verpolt hast.
Aber ehe du was umsteckst:
1
#define F_CPU 1000000
2
3
#include<stdlib.h>
4
#include<avr/io.h>
5
#include<util/delay.h>
6
#include"lcd.h"
7
8
intmain(void)
9
{
10
DDRB=0xFF;
11
12
_delay_ms(200);
13
14
// lcd_init( LCD_DISP_ON );
15
// lcd_puts( "Hallo" );
16
17
while(1){
18
PORTB=0xFF;
19
_delay_ms(500);
20
PORTB=0x00;
21
_delay_ms(500);
22
}
23
}
(LCD Behandlung auskommentiert).
Jetzt muss sie blinken.
(Damit wissen wir dann, dass die LED richtig rum drinnen ist)
Ich bin auch dämlich.
Du hast ja ein STeckbrett. Wenn sie nicht blinkt, dreh die LED einfach
um. In einer Stellung muss sie blinken, und so belässt du es dann.
Das es jetzt blinkt ist ja schonmal gut.
Sorry, noch ne kleine Zwischenfrage:
Was hast du denn mit den anderen Adern des Flachbandkabels die zum LCD
gehen gemacht ?
Wenn die in der Luft hängen -> schlecht.
Mach die doch mal sicherheitshalber an Masse. Wäre ein potentielle
Fehlerquelle weniger.
Gut.
Damit ist sichergestellt, dass der Testnachweis auf jeden Fall
funktioniert.
Wenn du die LCD Funktionen wieder einkommentierst, dann wartet die
Fleury Lib auf Rückmeldung vom LCD. Wenns hängt, dann ist das ein Indiz
dafür, dass
* die allererste Initialisirung nicht geklappt hat
* die Initialisierung zwar soweit durch ist, aber die Verbindung
R/W nicht korrekt hergestellt wurde.
Ich kann dir nicht helfen.
Du musst dir 100% absolut sicher sein, dass die 3 Kabeln
Pin 4 (RS) mit PD4 vom mC
Pin 5 (R/W) mit PD5 vom mC
Pin 6 (E) mit PD6 des mC
tatsächlich so verbunden sind, dass es nirgens einen Wackelkontakt gibt
(am besten mit einem Ohmmeter direkt vom LCD Pin zum µC-Pin messen, da
muss überall 0Ohm rauskommen)
Ich hätte mich von dieser Verkabelung gerne selbst überzeugt. Bei so
vielen Kabeln kann man schon mal durcheinander kommen.
Aber wenns auf einem Photo nicht geht, gehts eben nicht.
Habe mir jetzt nochmal die lcd_routine vom tutorial angeschaut und die
Schaltung so aufgebaut, und da klappt alles wunderbar.
Ich bekomme das auf dem Display ausgegeben was ich will.
Bei deiser Routine muss aber R/W gegen GND.
Genau darum verblüfft es mich, dass die Fleury Lib nicht gehen soll
Na ja, benutzt du halt die Tutoriumsfunktionen. Ist so schlimm auch
wieder nicht.
Aber interessieren würde es mich doch, was da los ist.
Mich auch, da der Programmcode den ich hier aus dem Forum haeb die AD
Werte einließt und direkt auf dem Display mit der Fleury Lib ausgibt,
deshalb bin ich ja den Weg gegangen, um mir unötig arbeit zu ersparen.
Aber das kann ch ja jetzt vergessen.
Hans Peter schrieb:
> Mich auch, da der Programmcode den ich hier aus dem Forum haeb die AD> Werte einließt und direkt auf dem Display mit der Fleury Lib ausgibt,
Ach komm.
Das ist das wenigste Problem.
Die eine Lib kann Strings ausgeben, die andere Lib kann Strings
ausgeben. Lediglich die Funktionen heißen anders und die Fleury Lib
kümmert sich auf Wunsch noch um einen Zeilenumbruch. Letztes Feature ist
zwar nett, aber so wichtig dann auch wieder nicht.
Ich habe es aber schonmal versucht und da hat es natürlich (wie sollte
es auch anders sein) nicht geklappt.
Ich hatte schonmal den ADC programmiert, so das er direkt Ausgänge
schaltet.
Das Prog kann ich ja einfach wieder hernehmen und die da abgespeicherten
Werte auf dem Display ausgeben lassen.
Aber ich muss die doch noch umwandeln, oder? Und itoa hat bei mir nicht
funktioniert.
LG
Hans Peter schrieb:
> Aber ich muss die doch noch umwandeln, oder? Und itoa hat bei mir nicht> funktioniert.
Dann hast du einen Fehler gemacht.
itoa funktioniert schon
Hallo,
danke für die Antwort, aber so richtig bekomme ich es nicht hin. Ich
habe mit dem Tutorial schon AD Werte eingelesen, und auch Daten wie z.B.
"Hallo Welt!" auf dem LCd ausgegeben. Jetzt will ich es ja miteinander
verbinden und das klappt nicht.
Ich habe die lcd-routines.h und die lcd-routines.c schon an die
richtigen Stellen eingefügt.
Jetzt habe ich noch eine andere Source Datei, in der ich die AD Werte
einlese. In der main, von der Datei rufe will ich alles aufrufen, das
wandeln und die Display Ausgabe.
Aber ich bekomme schon einen Fehler:
../LDR_vergleichen.c:4:26: error: lcd-routines.h: No such file or
directory
Habe die Datei so included:
#include "lcd-routines.h" in meiner anderen .c Datei
Hier mal der Ausschnitt der main
Hans Peter schrieb:
> Aber ich bekomme schon einen Fehler:> ../LDR_vergleichen.c:4:26: error: lcd-routines.h: No such file or> directory
Na ja.
Was heißt denn das auf Deutsch?
"Es gibt keine derartige Datei / Verzeichnis"
Den Fall Verzeichnis können wir wohl ausschliessen. Also lautet die
Fehlermeldung in normalem Deutsch:
Hey Programmierer! Die Datei die du angegeben hast, existiert nicht bzw.
ich finde sie nicht auf den Verzeichnissen auf denen ich suche. Sieh
bitte nach, ob du nicht einen Tippfehler im Dateinamen gemacht hast oder
ob du mir nicht auch noch eine Pfadangabe machen musst, damit ich sie
finden kann.
und jetzt gehst du mit dem Finger dein Programm durch, von oben nach
unten und siehst dir an was passiert. Und denk daran, dass dein µC
sauschnell ist.
Besonders interessant ist in diesem Zusammenhang, was eigentlich
passieren soll, nachdem die Messung das erste mal auf das Display
ausgegeben wurde. Oder willst du deinen µC laufend neu starten, nur
damit der 1 Messung macht?
Hallo,
er liest doch in einer Endlosschleife den ADC0 Kanal ein.
Initialisiert das lcd, wandelt mit itoa die variable um und gibt diese
aus.
Würde mir später gerne von zwei ADC Eingängen, die Werte (Digitalen
Werte) auf dem Display anzeigen lassen. Aber ich wollte es zuerst mal
mit einem versuchen.
Ich glaube das geht alles so schnell, das ich es nicht mitbekomme, oder?
Muss ich da noch ein delay reinbringen?
Bekomme nämlich 5 Warnungen beim compilieren. Eine davon ist:
c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:85:3: warning:
#warning "F_CPU not defined for <util/delay.h>"
LG
Hans Peter schrieb:
> Hallo,>> er liest doch in einer Endlosschleife den ADC0 Kanal ein.
Geh mit dem Finger durch und spiele µC!
Du lässt dich im Moment davon leiten, das das was du denkst das
passieren soll auch passiert.
Aber ein µC hat keinen DWIM (Do what I mean) Modus. Der µC hält sich an
das was dort steht! Und bei dir steht nicht das dort, was du denkst.
adcval0=ReadChannel(0);//speichert Wert von ADC0 in adcval0
12
13
14
lcd_init();//initialisiert lcd
15
charBuffer[20];//legt Variable an
16
itoa(adcval0,Buffer,10);//wandelt um
17
18
set_cursor(0,1);//setzt den Cursor
19
20
lcd_string(Buffer);//gibt den Wert aus
21
22
while(1)//Endlosscheleife
23
{
24
}
25
26
return0;
27
}
28
}
habe mal dahinter geschrieben, was ich denke was der Code macht. Aber
die Endlosschelife über return 0, da geht er ja eigentlich nicht mehr
raus.
Da bleibt er hängen und gibt nix aus, kann das sein?
> c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:85:3: warning:> #warning "F_CPU not defined for <util/delay.h>"
Geh im AVR Studio in die Projekt Einstellungen
und trage dort die Taktfrequenz ein
Hans Peter schrieb:
> habe mal dahinter geschrieben, was ich denke was der Code macht. Aber> die Endlosschelife über return 0, da geht er ja eigentlich nicht mehr> raus.
Bingo!
O.K., habe es selbst gemerkt, das Display hat nur geflackert.
Aber trotzdem bekomme ich nur die schwarzen Balken angezeigt.
Finde es aber seltsam, da ich heute morgen noch mit der lcd-routines.c
und der lcd-routines.h noch Wörter ausgeben gelassen habe.
Entscheide dich für ein Programm und bleib dabei!
Es bringt nichts, jetzt noch von einem Programm zum anderen zu wechseln.
Wenn dein Programm nicht das tut was du willst, dann musst du das
Programm ändern aber nicht laufend neue Programme im Web suchen.
So ist das nun mal.
Wenn man fremde Programme kopiert, dann übernimmt man in erser Linie
deren Idee und passt die auf seine Bedürfnisse an. Die
Wahrscheinlichkeit, dass du ein Programm findest, welches genau das tut
was du willst, ist nahe 0.
Wenn die innere Endlosschleife in deinem Zusammenhang nicht das ist was
du willst, dann schmeiss sie raus. Das nennt man programmieren! Genau
dazu hast du einen Textedior mit dem man Programmtext ändern kann.
> Aber trotzdem bekomme ich nur die schwarzen Balken angezeigt.> Finde es aber seltsam, da ich heute morgen noch mit der lcd-routines.c> und der lcd-routines.h noch Wörter ausgeben gelassen habe.
Dem musst du auf den Grund gehen!
Fang nochmal mit dem Programm an, mit dem du Wörter ausgeben lassen
konntest. Und dann erweiterst du dieses Programm mit den ADC Routinen.
Erweitern! Und nicht schon wieder Programm wechseln.
Hallo,
O.K. hast recht.
Hier jetzt noch mal von Anfang
1
intmain(void)
2
{
3
int16_tadcval0;
4
lcd_init();
5
lcd_string("Hello World!");
6
while(1)
7
{
8
}
9
10
return0;
11
}
Ausgabe klappt. Also gehe ich davon aus, das das LCD richtig
angeschlossen ist, und auch der Rest in der .h Datei stimmt.
Kann es sein, das sich ADC und LCD irgendwie in die Quere kommen können?
Brauchst du USART?
Nein, also ist das uninteressant.
Brauchst du ADC?
Ja
also holst du dir von dort die ADC Routine ReadChannel und kopierst sie
zu deinem Programm dazu.
Das hat ja was mit der UARt zu tun, ich schicke ja keine Daten an den
PC, sondern an das Display und deshalb brauche ich die doch nicht, oder
sehe ich das falsch?
Ds was ich für das Display brauche, steht ja in der lcd-routines.c und.h
drin.
Wenn ich jetzt starte, dann sind die balken weg, und im Display steht
nichts.
Sorry, habe deinen Beitrag erst jetzt gelesen.
>adcval0=ADC;//AD-Wandlungsergebnis aus dem ADC-Register
12
>
> das übernehemn kann.
NEIN!
Übernimm die ReadChannel!
Die ist fix und fertig und macht das was du willst!
Und zwar mit allem drum und drann.
Die stammt aus dem Tutorial und von der wissen wir, dass sie
funktioniert. Das obige da konfiguriert den ADC nicht!
Wann immer du auf deinem Mega irgendeine Funktionalität nutzt, gibt es 2
Fragen:
* was muss ich wo einstellen, damit der Chip bzw. die Teilfunktion des
Chips arbeitet.
So wie du einmal lcd_init aufrufen musst, damit das LCD initalisiert
und in die Arbeitskonfiguration versetzt wird, so muss für fast
alles irgendwann die Arbeitskonfiguration festgelegt werden
* wie benutze ich dann die entsprechende Funktionalität im laufenden
Betrieb.
Wann immer du also irgendwo Code klaust, achte darauf dass der geklaute
Code genau diese Fragestellungen beantwortet
* wird alles richtig initialisiert
* kriege ich meine Ergebnisse
Die ReadChannel hat alles in einer Funktion integriert. Sie konfiguriert
den ADC auf Arbeitsbedingungen und lässt ihn auch gleich arbeiten. Das
Registergrabsetzen da oben, macht das nicht.
Hallo,
@Karl heinz:
Ich muss dir wieder meinen DANK aussprechen, wie schon so oft, hast du
mich zum Ziel geführt. Das Display zeigt 504 an. Ich verwende die
externe Ref Spannung und habe an ADC0 eine Spannung von ca. 2,4.. kommt
also wie ich finde hin.
Ich habe jetzt an ADC0 einen LDR Spannungsteiler. Jetzt verändert sich
natürlich die Spannung je nach Lichteinfall und Widerstand des LDr.
Ich habe doch schon Alles in einer Schelife, aber warum ändert er mir
nicht, wenn ich z.B. den LDR zuhalte, den Wert auf dem Display? Ich muss
immer erst mein Netzteil aus und wieder anschalten.
LG
@Karl Heinz,
schon mal über Online Nachhilfestunden nachgedacht ??
Du solltest Kurse geben für die Copy and Paste Programmiermethode.
Dann lohnt sich Dein Aufwand wenigstens.
Karl heinz Buchegger schrieb:
> den ADC auf Arbeitsbedingungen und lässt ihn auch gleich arbeiten. Das> Registergrabsetzen da oben, macht das nicht.
Ganz abgesehen davon, dass das hier unlogisch ist
ADCSRA |= _BV(ADSC); /*ADC-Wandler neu "ansto?em*/
while (ADCSRA & _BV(ADSC) ) /*warten bis die AD-Wandlung
fertig ist*/
{
}//end while
ADMUX=ADC0; /*AD-Wandler Multiplexregister initialisieren
Ausgabe ADC0-Wert*/
adcval0 = ADC; /*AD-Wandlungsergebnis aus dem ADC-Register
abholen*/
Aha, zuerst wird also der ADC Wandler angestossen und erst danach wird
im ADMUX Register eingestellt welcher Kanal eigentlich gewandelt werden
soll. Das ist ungefähr so, wie wenn du zuerst die Hose anziehst und erst
danach machst du den Gürtel auf.
Daher auch der Rat: Geh mit dem Finger dein Programm durch! Eine Zeile
nach der anderen. Überlege ob die Reihenfolge logisch ist!
Hans Peter schrieb:
> Ich habe doch schon Alles in einer Schelife,
zeigen
> aber warum ändert er mir> nicht, wenn ich z.B. den LDR zuhalte, den Wert auf dem Display? Ich muss> immer erst mein Netzteil aus und wieder anschalten.
Und wieder.
Dein Finger ist der µC. Du arbeitest dein Programm ab, indem der Finger
von einer Zeile zur nächsten geht. Dabei immer die Fragestellungen
Was passiert?
Welche Werte werden errechnet?
Welche Variablen erhalten welchen Wert?
Wie (mit welchem Befehl) gehst weiter?
In Gedanken nicht das tun was du denkst, dass passieren soll, sondern
das tun, was am Papier (Monitor) steht.
Dazu muss man natürlich die C-'Befehle' kennen und wissen, was sie tun.
Daher: Kauf dir endlich ein C-Buch und arbeite zumindest die erste
Hälfte durch.
adcval0=ReadChannel(0);/* MUX-Bits auf 0b0000 -> Channel 0 */
9
charBuffer[20];
10
itoa(adcval0,Buffer,10);
11
set_cursor(0,1);
12
lcd_string(Buffer);
13
}
14
}
Habe die Endlosschleife mal weg gemacht.
Jetzt laufen die Zahlen auf dem Display durch, ist logisch.
Mit der Endlosschelife, hat sich nur nach dem einschalten was getan.
Welche Möglichkeit habe ich jetzt, um mir eine Änderung anzeigen zu
lassen?
Muss ich aus der Endlosschelife eine Schleife mit Bedingugn machen,
damit er diese verlässt und wieder von oben anfängt?
DANKE
Hallo,
habe jetzt eine delay Funktion eingebaut, von einer Sekunde.
Funktioniert, bin eigentlich zufrieden.
Aber ohne euch hätte ich es nicht geschafft.
Hat noch eventuell einer eine Idee wegen Verbesserungen?
LG und schönes WE
Hans Peter schrieb:
> Jetzt laufen die Zahlen auf dem Display durch, ist logisch.
Gut.
Genau das hast du ja auch programmiert
> Mit der Endlosschelife, hat sich nur nach dem einschalten was getan.
Auch logisch.
Denn nach der ersten Messung war er ja nach der Messung in der
Endlosschleife gefangen und hat nichts sinnvolles mehr getan
> Welche Möglichkeit habe ich jetzt, um mir eine Änderung anzeigen zu> lassen?
Indem du zunächst die Änderung feststellst :-)
> Muss ich aus der Endlosschelife eine Schleife mit Bedingugn machen,> damit er diese verlässt und wieder von oben anfängt?
Nein.
Die Endlosschleife ist dein Rahmen.
Das Programm bleibt immer innerhalb der Endlosschleife.
Überleg dir mal, was so ein Konstrukt wohl macht
Hallo,
ich würde mir jetzt gerne zwei Werte auf dem LCd ausgeben lassen, den
einen in der ersten Zeile, den anderen in der zweiten.
Ich will aber vor die Werte noch was schreiben, was immer da stehen
soll.
Hier ist der Code
1
intmain(void)
2
{
3
int16_tadcval0,adcval1;
4
lcd_init();
5
set_cursor(1,0);
6
lcd_string("Tagesachse: ");
7
while(1)
8
{
9
adcval0=ReadChannel(0);/* MUX-Bits auf 0b0000 -> Channel 0 */
10
//adcval1 = ReadChannel(1);
11
charBuffer0[20],Buffer1[20];
12
itoa(adcval0,Buffer0,10);
13
set_cursor(1,13);
14
lcd_string(Buffer0);
15
}
16
}
Tagesachse wird angeziegt, das ist kein Problem und der Wert nach dem
einschalten auch noch, aber dann beginnt der Wert zu wandern. Der 1.
Wert bleibt noch stehen, wird aber auch zum Teil überschrieben, dann
laufen die Werte aus dem Display heraus, und nach einiger Zeit wieder in
der Zeile drunter von links rein.
Verstehe es nciht, da ich doch in der Endlosschleife die Werte abfrage,
umwandele und die Position der Ausgabe angebe.
Ich hätte einfach nur gerne, dass Tagesachse stehen bleibt, was es ja
auch tut, und dann dahinter immer der neue Wert ausgegeben wird.
Kann ich die zwei Kanäle einfach so abfragen und dann abspeichern?
LG
ja ja, Display fortlaufend schreiben geht zwar, macht aber nicht viel
Sinn in diesem Fall. Also Cursor setzen und alles wird gut.
www.sprut.de hat ne gute Abhandlung zu Displays.
Ja, eigentlich sollte das den Cursor setzen.
Und eigtenlich wäre ja die Funktion selbst interessant gewesen, aber
egal..
Es scheint ja die aus dem Tutorial zu sein.
Sieht du irgendwelche Warnings beim Compilieren ?
Das oben heißt doch, dass ich in Zeile 1 (x=1) und Spalte 0 anfange.
Das wäre oben links.
das nächste set heißt doch, das ich in der gleichen Zeile (x=1), nur in
Spalte 13 anfange.
Verbesser mich bitte wenn ich total daneben liege.
LG & DANKE
switch (y) {
case 1: tmp=0x80+0x00+x; break; // 1. Zeile
case 2: tmp=0x80+0x40+x; break; // 2. Zeile
case 3: tmp=0x80+0x10+x; break; // 3. Zeile
case 4: tmp=0x80+0x50+x; break; // 4. Zeile
default: return; // für den Fall einer falschen
Zeile
wie es aussieht ist y aber die Zeile.
Also deklarierst Du offensichtlich 1. Spalte in Zeile 13 beim schreiben.
Ich habe jetzt doch Warnings:
c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:85:3: warning:
#warning "F_CPU not defined for <util/delay.h>"
In file included from ../LDR_vergleichen.c:5:
../lcd-routines.h:9:1: warning: "F_CPU" redefined
In file included from ../LDR_vergleichen.c:4:
c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:86:1: warning:
this is the location of the previous definition
../LDR_vergleichen.c:6:1: warning: "F_CPU" redefined
In file included from ../LDR_vergleichen.c:5:
../lcd-routines.h:9:1: warning: this is the location of the previous
definition
../LDR_vergleichen.c: In function 'main':
../LDR_vergleichen.c:71: warning: unused variable 'Buffer1'
Hier ist der Abgeänderte Text:
1
set_cursor(0,1);
2
lcd_string("Tagesachse: ");
3
.
4
.
5
.
6
set_cursor(13,0);
7
lcd_string(Buffer0);
Jetzt ist beim einschalten alles i.O., so wie es sein soll, aber wenn er
dann den nächsten Wert schreibt, schreibt er ihn hinter den alten. Und
das geht dann soweit, dass das Display voll geschrieben wird.
LG
Wenn du x und y vertauscht sollte es gehen.
Und kommentiere mal die Defines für F_CPU bitte aus (in allen Dateien).
Du benutzt scheinbar Avr-studio, da sind diese Zeilen überflüssug, und
können zu Verwirrung führen.
Du musst natürlich in AVR-Studio die passende Frequenz einstellen, falls
nicht schon geschehen.
>Jetzt ist beim einschalten alles i.O., so wie es sein soll, aber wenn er>dann den nächsten Wert schreibt, schreibt er ihn hinter den alten. Und
Dann weiss ich auch nicht weiter.
Hallo,
irgendwie reagiert er nicht auf meine Änderungen.
Ich ändere was im Prog, dann drücke ich F7, danach will ich flashen, das
klappt auch, aber die Änderungen werden nicht übernommen,.
LG
entweder stimmt das setzen des Cursors nicht oder Du gibst auf einer
Zeile mehr aus als rauf geht. Deswegen schiebt das Display weiter. Du
hast nen Überlauf.
Hallo,
ich habe ein 2x20 LCD.
Ich habe mal das erste setzen des Cursors
1
set_cursor(0,1);
mal weggelassen.
Dann wird das Ergebnis an den ersten Stellen ausgegeben.
Wenn der AD Wert am Anfang des Displays ausgegeben wird, dann gibt es
keinen Überlauf, dann wird immer die Zahl an dieser Stelle erneuert, das
finde ich komisch.
Wo fängt das LCD denn an, bei der 0 oder bei 1 ?
Ist das bei Zeile oder Spalte unterschiedlich?
LG
>#warning "F_CPU not defined for <util/delay.h>"
Sorry, ich frag nochmal:
Ist die Warnung jetzt weg ?
Es könnte sonst Probleme bei der Initialisierung des Displays geben.
Hallo,
das sind jetzt noch meine Warnings:
- c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:85:3:
warning: #warning "F_CPU not defined for <util/delay.h>"
- In file included from ../LDR_vergleichen.c:5:
../lcd-routines.h:9:1: warning: "F_CPU" redefined
- In file included from ../LDR_vergleichen.c:4:
c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:86:1: warning:
this is the location of the previous definition
LG
Hans Peter schrieb:
> Hallo,>> das sind jetzt noch meine Warnings:>> - c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:85:3:> warning: #warning "F_CPU not defined for <util/delay.h>"
Wie oft wurde dir jetzt schon gesagt:
Definier die Taktfrequenz in den Projekt-Einstellungen im AVR-Studio ...
> - In file included from ../LDR_vergleichen.c:5:> ../lcd-routines.h:9:1: warning: "F_CPU" redefined
und schmeiss alle anderen
#define F_CPU ....
aus dem Code raus.
Jeder muss einmal wo anfangen, das ist schon klar. Aber irgendwie habe
ich das Gefühl, du drehst dich im Kreis und lernst nichts dazu. Schön
langsam musst du die (eh fast immer gleichen) Fehlermeldungen schon
erkennen und in etwa wissen, was das Problem ist.