MartinO schrieb:> LCD-Ansteuerung
versuch mal Deinen Link :-((
Aber unabhängig davon: es geht nicht um den "gleichen Code", sondern um
genau Deinen. Ich nehme mal an, dass da doch einige winzige Details
anders sind - und wenn es nur Schreibfehler sind.
Außerdem ist ein Schaltplan sehr sinnvoll.
Gruß Dietrich
abgesehn vom Schaltplan und Code. Hast du mal mit dem Displaykontrast
gespielt? Ich erinner mich noch an meine ersten Gehversuche mit LCDs als
der vermeintliche Fehler eine falsche Kontrasteinstellung war
Nun, da ich den rest des codes nicht sehen kann, kann ich leider nicht
nachvollziehen wie der Mega8 den 44780 in den 4-Bit mode schalten soll -
denn dass muss er machen.
Ich nutze die LCD-Support Routinen von Peter Fleury. ( $Id: lcd.c,v
1.14.2.1 2006/01/29 12:16:41 peter Exp $) Die funktionieren im 4-Bit
Mode bei mir sehr gut.
Mein Init sieht so aus:
lcd_init ( LCD_DISP_ON );
lcd_clrscr ();
lcd_gotoxy ( 0, 0 );
lcd_puts ( " Antennenkoppler Controller " );
sprintf(cpa, " Version
%d.%d.%d%d",version[0],version[1],version[2],version[3]);
lcd_gotoxy (0, 2);
lcd_puts (cpa);
Es ist wichtig dass die richtigen 4 Bit's des I/O-Ports der Displays
benutzt werden.
Ich finde bei deinem Code nicht die Stelle wo der 4/8 Bit Mode
initialisiert wird.
init(); <--- ??????????
Sehe mal da rein - ob noch was übergeben werden muss.
Kontrolliere die Anschlüsse des Displays an den ATMEGA8.
>Habe meine Beschaltung gemäß der Anleitung:>http://www.mikrocontroller.net/articles/AVR-GCC-Tu...>geändert und @holger dein .hex eingespielt... leider nix!
Dann funktionieren schon mal zwei komplett unterschiedliche
Programme bei dir nicht.
Jetzt will ich ein Bild von deinem Aufbau sehen.
Nachtrag:
>Habe meine Beschaltung gemäß der Anleitung:>http://www.mikrocontroller.net/articles/AVR-GCC-Tu...>geändert und @holger dein .hex eingespielt... leider nix!
Meine HEX Datei war für deine Anschlussbelegung und nicht die
aus dem Tutorial;)
holger schrieb:> Nachtrag:>>>Habe meine Beschaltung gemäß der Anleitung:>>http://www.mikrocontroller.net/articles/AVR-GCC-Tu...>>geändert und @holger dein .hex eingespielt... leider nix!>> Meine HEX Datei war für deine Anschlussbelegung und nicht die> aus dem Tutorial;)
habe ich mir schon gedacht und zuerst probiert, dann umgebaut!
holger schrieb:> Ab in die Tonne damit. Man sieht nichts.
Das kannst du so nicht sagen!
Man kann ein Steckbrett erkennen, ein LCD und einen Quarz auf der
Flucht.
>Das kannst du so nicht sagen!>>Man kann ein Steckbrett erkennen, ein LCD und einen Quarz auf der>Flucht.
Zwei Kerkos und ein Widerstand scheinen auch zu flüchten.
Kommt nur mir das so vor oder hat er die Datenleitungen
zum Teil auf die VCC GND Schiene gelegt?
@holger: kommt dir nur so vor
Habe nun nochmal versucht einen sauberen Aufbau zu starten:
Die LCD Pins sind von oben bis unten K, A, DB7 ... VSS
Hoffe es sieht besser aus :/
>>Habe nun nochmal versucht einen sauberen Aufbau zu starten:>>Und warum schliesst du das Display immer noch nicht richtig an?
Ach Shit vergiss es;) Jetzt nach Tutorial.
MartinO schrieb:> Die Kontrastspannung geht direkt über einen 10kOhm an VCC.
Ich kenne das eher über nen Widerstand an GND.
Im Datenblatt steht auch
Supply Voltage For LCD: VDD-V0 typ: 4.7V
Nach V0 umstellen müsste dann eher 0,3V als Kontrastspannung angelegt
werden, also kommt 10kOhm gegen GND eher hin als 10kOhm gegen VCC ;)
Gruß Benny
Benjamin R. schrieb:> MartinO schrieb:>> Die Kontrastspannung geht direkt über einen 10kOhm an VCC.>> Ich kenne das eher über nen Widerstand an GND.>> Im Datenblatt steht auch> Supply Voltage For LCD: VDD-V0 typ: 4.7V> Nach V0 umstellen müsste dann eher 0,3V als Kontrastspannung angelegt> werden, also kommt 10kOhm gegen GND eher hin als 10kOhm gegen VCC ;)>> Gruß Benny
Ne, dass geht nicht!
Hi
>Ne, dass geht nicht!
Und dein unsinniger Widerstand nach VCC geht noch weniger.
Die richtige Beschaltung von Vo steht sogar groß und breit in den
Datenblatt.
MfG Spess
genau solche "Sparmaßnahmen" sind echt mist wenn man das erste Mal mit
nem LCD spielt. Nimm ein Poti dann kannst du den Kontrast vernünftig
einstellen bzw. weißt dass es nicht am Kontrast liegt das nix angezeigt
wird.
Glaub mir ich sprech da aus Erfahrung. Du kannst das Poti ja später
gegen nen Festwiderstand austauschen wenn alles funktioniert.
Wechselt die Spannung an PortB? Evtl. mit LED kontrollieren, ob der µC
überhaupt läuft.
> ich würde gern meinen Atmega8 und mein Display von Pollin zum Laufen
bekommen.
Bei Pollin TC1602E kommen sofort die Alarmglocken:
Beitrag "Vorsicht unübliche Pinbelegung beim LCD TC1602E (Pollin 120420): Pin1=VDD=+5V Pin2=VSS=Gnd"
Du hast ja das TC1602A und es hat schonmal die Balken angezeigt, dann
ist es richtig gepolt.
Ist Dein Steckbrett zuverlässig? Es genügt eine Unterbrechung, dass es
nicht läuft. Ich löte lieber. Da weiß man, was man hat (na zu 99%).
Hallo,
habe heute nochmal alles verlötet! Nun auch mit Poti.
Leider sehe ich nur die Striche auf meinem LCD. :/
Ebenfalls habe ich mein Prog nochmal angepasst um zu sehen, ob der
Mikrocontroller überhaupt läuft und habe dazu eine LED über einen 1kOhm
an VCC gehangen. Leider blinkt die nicht auf.. Auf meinem STK500 funzt
es.
Hier das Programm:
1
#include<avr/io.h>
2
#include"lcd-routines.h"
3
#include<util/delay.h>
4
5
intmain(void)
6
{
7
lcd_init();
8
9
lcd_data('T');
10
lcd_data('e');
11
lcd_data('s');
12
lcd_data('t');
13
14
lcd_setcursor(0,2);
15
16
lcd_string("Hello World!");
17
18
DDRB=0x01;
19
while(1)
20
{
21
PORTB=0x01;
22
_delay_loop_2(100000);
23
PORTB=0x00;
24
_delay_loop_2(100000);
25
}
26
27
return0;
28
}
habe die LED an PB0 gehangen!
Ich weiß langsam nicht mehr weiter :?
es blinkt es blinkt es blinkt :)
leider noch nicht außer dicke unterstriche auf dem lcd :?
Was kann das sein =? DatenKabel sind ordnungsgemäß angeschlossen
Datenleitungen richtig angeschlossen?
Ansonsten bevor hier noch Mannjahre verschwendet werden: nimm für ein
paar Euro mal ein neues und probiere das.
Ein zweites kann eh nicht schaden auf Dauer.
Haben die unbeschalteten LCD Pins D0...D3 auch definiert Masse. Man kann
sie ja gewöhnlich offen lassen aber ich selbst hab sie immer mit GND
verbunden und es noch nie offen probiert.
Hast du die Wartezeiten erhöht?
>DDRB=0x01; // LCD_Init Einstellungen werden wieder überschrieben!
Schreib das mal lieber so: DDRB |= 0x01;
Gruß
Benny
Benjamin R. schrieb:> Haben die unbeschalteten LCD Pins D0...D3 auch definiert Masse. Man kann> sie ja gewöhnlich offen lassen aber ich selbst hab sie immer mit GND> verbunden und es noch nie offen probiert.
Sie offen zu lassen, schadet definitiv nicht.
Sie auf Masse zu legen, geht schief, wenn man versehentlich das LCD dazu
bewegt, etwas auszugeben - dann ziehen zwei an einer Leitung, einer nach
GND und einer nach VCC.
Nachdem hier nicht klar ist, was eigentlich passiert, würde ich alles
tun, aber nicht Leitungen unnötig auf Masse legen.
Ja ok macht natürlich Sinn kein weiteres Risiko einzugehen.
Btw: Wenn wirklich R/W mit GND verbunden ist, befindet sich das Display
immer im Daten-Empfangmodus und sollt die DBx Pins nicht beschreiben.
Gruß
Benny
Hi
>Haben die unbeschalteten LCD Pins D0...D3 auch definiert Masse. Man kann>sie ja gewöhnlich offen lassen aber ich selbst hab sie immer mit GND>verbunden und es noch nie offen probiert.
Dieser Irrglaube hält sich sehr hartnäckig.
Hast du eigentlich schon mal das Datenblatt eines Displaycontrollers
(z.B. HD44780) gelesen? Die Dinger haben interne Pull-Up-Widerstände .
Also ist GND für unbenutzte Pins bei Displays der falsche Weg. Entweder
offen lassen oder externe Pull-Ups.
MfG Spess
Benjamin R. schrieb:> Btw: Wenn wirklich R/W mit GND verbunden ist, befindet sich das Display> immer im Daten-Empfangmodus und sollt die DBx Pins nicht beschreiben.
Wenn...
Alles scheint jedenfalls nicht richtig gemacht zu sein, sonst würde es
ja gehen.
MartinO schrieb:> auf meinem Display sieht es übrigens mittlerweile so aus: siehe Anhang!
.. für mich sieht es so aus, als wenn das Ding überhaupt keine
Initialisierung bekommt.
Das ist doch ein zweizeiliges Display oder ?
Gruss Ingo
spess53 schrieb:> Dieser Irrglaube hält sich sehr hartnäckig.> Hast du eigentlich schon mal das Datenblatt eines Displaycontrollers> (z.B. HD44780) gelesen?
Ja, allerdings nur die Abschnitte mit den Daten zur Ansteuerung.
"Meinen" typischen Aufbau habe ich damals auch aus einem Tutorial 1:1
nachgebaut und ihn seitdem nicht mehr verändert, da es auf Anhieb
funktioniert hatte.
Aber danke für den Tipp, unnötig Strom verschwenden braucht man ja auch
nicht. Zukünftig werd ich das berücksichtigen.
Wieder Back2Topic:
Ich möchte nochmal explizit auf die Wartezeit hinweisen, da es bei mir
in der Vergangenheit öfters ein Fehler war und man ließt auch immer
wieder das die kompatiblem Kontroller sich nicht 1:1 an das
Timingverhalten des HD44780 halten.
EDIT:
Wie lange braucht denn ein AVR bis der interne Quarz eingeschwungen ist?
Die LCD_init wird ja sofort aufgerufen. Vielleicht ist das Display nach
dem Spannungseinschalten noch nicht bereit.
Fügt doch mal vor der Init ein _delay_ms ein.
Gruß
Benny
Stimmt das denn jetzt zu 100% mit deiner Verkabelung überein?
MartinO schrieb:> // LCD DB4-DB7 <--> PORTD Bit PD0-PD3 <--- !!!!!!!!!!!> #define LCD_PORT PORTD> #define LCD_DDR DDRD> #define LCD_DB PD0>> // LCD RS <--> PORTD Bit PD4 (RS: 1=Data, 0=Command)> #define LCD_RS PD4>> // LCD EN <--> PORTD Bit PD5 (EN: 1-Impuls für Daten)> #define LCD_EN PD5
Falls nicht, frag lieber ruhig - sonst kommen wir nie zum Ziel ;-)
Hier nochmal die Pinbelegung des Atmega8 mit dem LCD 1602A-09 von
Pollin!
Pinbelegung Atmega8:
Reset --> via 10kOhm zu VCC
PD0 --> DB4 vom LCD
PD1 --> DB5 vom LCD
PD2 --> DB6 vom LCD
PD3 --> DB7 vom LCD
PD4 --> RS vom LCD
VCC --> VCC
GND --> GND
PB6 -->
PB7 -->
PD5 --> E vom LCD
PD6 -->
PD7 -->
PB0 --> via 1kOhm und LED zu VCC
PC5 -->
PC4 -->
PC3 -->
PC2 -->
PC1 -->
PC0 -->
GND --> GND
AREF -->
AVCC --> VCC
PB5 -->
PB4 -->
PB3 -->
PB2 -->
PB1 -->
Pinbelegeung LCD:
Vss --> GND
Vdd --> VCC
V0 --> Schleifer 10kOhm Poti(Poti zwischen GND und VCC)
RS --> PD4 vom AVR
R/W --> GND
E --> PD5 vom AVR
DB0 -->
DB1 -->
DB2 -->
DB3 -->
DB4 --> PD0 vom AVR
DB5 --> PD1 vom AVR
DB6 --> PD2 vom AVR
DB7 --> PD3 vom AVR
A --> via 1kOhm an VCC
K --> GND
Der AVR läuft auch, da die LED blinkt!
So, noch mal ein Versuch von mir.
Nimm mal die HEX im Anhang. Wurde für 16MHz compiliert,
also bitte ein wenig warten. Kann etwas dauern bevor was kommt.
Dann kannst du noch mal folgendes tun falls noch nicht geschehen:
BODLEVEL und BODEN Fuse aktivieren.
Den Watchdog abschalten falls aktiviert.
Pass auf das du dir dabei den Resetpin nicht wegfused.
Wenn das alles nichts bringt ist entweder dein
Display hinüber oder etwas nicht richtig angeschlossen.
Also auf Kurzschlüsse oder falsche Verbindungen testen:
Dieses Miniprogramm flashen und messen ob nur ein Pin auf High
ist, und kontrollieren ob es der richtige Pin ist.
void main(void)
{
DDRD = 0xFF;
// Jeweils immer nur eine dieser Zeilen aktivieren, flashen
// und dann messen
PORTD = 0x01; // DB4
// PORTD = 0x02; //DB5
// PORTD = 0x04; //DB6
// PORTD = 0x08; //DB7
// PORTD = 0x10; //RS
// PORTD = 0x20; //E
while(1)
{
}
}
hab deine .hex mal geflasht, aber nix zu sehen.
Nun habe ich alle PINs geprüft und es sah gut aus, immer nur der
entsprechende PIN auf HIGH.
Nun habe ich das LCD mal an mein STK500 via Flachbandkabel an PORTD
geklemmt, also das gleiche wie vorher, nur über das STK500.
Nun ist die gestrichelte Linie in der Mitte des Displays.. hm..
Aber mehr hats auch nicht gebracht!
Die Fuses hab ich auch mal gesetzt! - keine Auswirkung!
Hallo,
nun ist das neue Display da!
Ebenfalls ähnlich wie bei dem Alten!
Hier sind aber im Gegenteil zum alten alle Pixel in der oberen Zeile =
1! :?
Langsam versteh ich das nicht mehr!
Gruß,
irgendwie scheinen deine Timings nicht zu stimmen...
ich habe nur #include <util/delay.h> gesehen...
wenn du mal in der delay.h nachschaust wirst du sehen
"delay.h" wird nur richtig ausgeführt, wenn du optimization
einschaltest...
also setzt die mal auf level3.
du benutzt doch avr studio oder?
habe jetzt avr studio nicht da aber unter einstellungen müsste da
irgendwo compiler und debugger stehen da durchklicken und dann müste ein
dropdownmenue mit optim kommen standart auf none eingestellt... du
stellst dann da o3 ein....
Hallo MartinO,
habe auch einen Atmega8 mit einem LCD 1602. Ebenfalls sind bei mir nur
alle Pixel beider Zeilen auf 1. Komme da auch irgendwie nicht weiter.
???
Falls du eine Lösung hast, sag mal Bescheid!
LG pete
@ Mike, pete
>habe auch einen Atmega8 mit einem LCD 1602. Ebenfalls sind bei mir nur>alle Pixel beider Zeilen auf 1. Komme da auch irgendwie nicht weiter.
Dein Kontrast stimmt nicht. Den musst du mit einem Poti einstellen.
Häng dich hier bitte nicht dran. Mach einen neuen Thread auf.
Dann beschreibst du wo und wie du das Display angeschlossen hast.
Taktrate des AVR angeben, Schaltplan, Foto vom Aufbau, Code
posten. Dann kann dir geholfen werden.
@MartinO
Für dich seh ich irgendwie schwarz. Da hilft ja gar nix.
Das ist wohl der längste erfolgloseste LCD Thread bisher.
Entweder du machst deine Displays beim ersten einschalten kaputt
oder deine Schaltung ist komplett von Arsch.
Wieso sollte mein Display kaputt sein ? Habe alle Anschlüsse 1000mal
geprüft. Diese sind zu 100% richtig verkabelt!
Leider halt wie seitdem ich das neue Display habe alle Pixel auf HIGH.
Irgendwie kann das doch nicht sein! ?
holger schrieb:>>Irgendwie kann das doch nicht sein! ?>> Miss mal die Spannung an VO wenn du am Poti drehst.
0 - 4,87V
bei 0,47V hat das Display den richtigen Kontrast!
> Miss mal die Spannung an VO wenn du am Poti drehst.>0 - 4,87V>bei 0,47V hat das Display den richtigen Kontrast!
Ach was.
>Dann dreh mal mal am Kontrast.>Hab ich schon, bringt nix!
Ich verabschiede mich jetzt hier einfach mal für immer.
MartinO schrieb:> was sollte das bringen ?> Ich habs gemacht, aber ohne Erfolg!
habe ich oben schon beschrieben, da du ja offensichtlich delay.h
benutzt, wird jetzt bei_delayms(200) auch 200ms und nicht 2 oder 1 sec
gewartet.
ich glaube du machst besser einen neuen threat auf....
oder gib mal deinen kompletten code...