Forum: Mikrocontroller und Digitale Elektronik 8X2 Zeichen LCD mit ATMEGA328P-AU


von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe schon öfter Arduino kompatible Projekte mit der DIP-Version des 
328P als Stand-Alone µC gebaut und Lcds damit angesteuert. Jetzt wollte 
ich zum ersten mal die TQFP32 Version (ATMEGA328P-AU) benutzen und habe 
direkt einen kleinen Fehler auf der Platine aus China herstellen lassen. 
PORTB 2 ist nicht wie bei der DIP Version ein PWM Pin (Arduino Pin 10). 
Natürlich sollte der einzige in diesem Projekt genutzte PWM genau auf 
dem Pin liegen ;) Zum Glück war die PWM aber auch nur für den Lcd 
Kontrast zuständig, weshalb ich einfach einen in Reihe verbauten 
Widerstand aus dem gebauten Tiefpass entfernt habe um den Kontrastpin 
vom Rest der Schaltung zu trennen und ein 10kΩ Poti wie sonst auch immer 
mit dem Kontrastpin verbunden habe.

Leider zeigt das Lcd aber überhaupt nichts an. Nachdem die Schaltung mit 
Spannung versorgt wird, ist für kurze Zeit die obere Zeile mit einem 
"Fehler" im 2. Zeichen zu sehen (Bild). Diese verschwindet dann aber 
nach kurzer Zeit vollständig(ist ein Faden, als ob da irgendwie ein 
Kondensator involviert ist).

Ich nutze übrigens die LiquidCrystal Library zum Ansteuern.
Datenblatt vom Lcd: http://www.lcd-module.de/pdf/doma/dips082.pdf

Hat jemand schonmal was ähnliches gehabt oder kann mir Hinweise auf das 
Problem liefern?

von Uwe (de0508)


Lesenswert?

Hallo,

Üblich wäre es den gesamten Quellcode und einen Schaltplan, evtl, mit 
Bild an zu hängen.

So wächst nur der Aufwand, derer die Dir helfen könnten, aber es nun 
nicht machen.

von holger (Gast)


Lesenswert?

>Ich nutze übrigens die LiquidCrystal Library zum Ansteuern.

Ich nutze übrigends Messer und Gabel zum Essen;)

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Den Rest (und komplett funktionierenden Teil) der Schaltung habe ich mal 
aus dem Schaltplan rausgenommen.

Wie gesagt, der "contrast" Pin ist an dem mittleren Pin eines von VCC zu 
GND verbundenen 10k Poti

Quellcode:
#include <LiquidCrystal.h>

#define lcdRsPin 9
#define lcdEnPin 8
#define lcdD7Pin 7
#define lcdD6Pin 6
#define lcdD5Pin 5
#define lcdD4Pin 4

// initialize lcd( RS EN D4 D5 D6 D7)
LiquidCrystal lcd(lcdRsPin, lcdEnPin, lcdD4Pin, lcdD5Pin, lcdD6Pin, 
lcdD7Pin);


void setup()
{
  lcd.begin(8, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Hello");
  lcd.setCursor(0, 1);
  lcd.print("World!");
}

void loop(){
}

von Daniel (Gast)


Lesenswert?

holger schrieb:
> Ich nutze übrigends Messer und Gabel zum Essen;)

Ja gut, wenn es mal effizient sein soll benutze ich auch schonmal Code 
der die Ports direkt ansteuert oder einen 74HC595 mit SPI...Aber wenn 
Geschwindigkeit egal ist Messer und Gabel;)

von Daniel J. (theend)


Lesenswert?

Auf http://arduino.cc/en/Tutorial/LiquidCrystal wirds gut erklärt find 
ich.
Hast du dein LCD so verbunden wie auf deinem bild?

So wie das aussieht hast du GND mit VCC verbunden. Stimmt das :O?

von Daniel J. (theend)


Lesenswert?

Habs mir gerade angesehen, sollte eigentlich so funktionieren. Die 
includete datei wird gefunden?

Hast du eventuell einen attiny2313 zuhause? Damit könnte man mal testen 
ob das Display noch funktioniert.

von Fallobst (Gast)


Lesenswert?

Daniel schrieb:
> PORTB 2 ist nicht wie bei der DIP Version ein PWM Pin

Warum sollten µCs in unterschiedlichen Gehäuseformen nicht kompatibel 
sein? PB2 ist zu 100% ein PWM Pin. Sollte das aus irgendwelchen Gründen 
in den Arduino-Libs nicht funktionieren, so wäre wieder mal bewiesen was 
für ein Schrott das ist.

von Daniel J. (theend)


Lesenswert?

Hast du das Display mit einer externen Stromversorgung verbunden? In dem 
fall musst du, denk ich GND mit dem Arduino verbinden.

von Daniel (Gast)


Lesenswert?

Fallobst schrieb:
> Daniel schrieb:
>> PORTB 2 ist nicht wie bei der DIP Version ein PWM Pin
>
> Warum sollten µCs in unterschiedlichen Gehäuseformen nicht kompatibel
> sein? PB2 ist zu 100% ein PWM Pin. Sollte das aus irgendwelchen Gründen
> in den Arduino-Libs nicht funktionieren, so wäre wieder mal bewiesen was
> für ein Schrott das ist.

Hi,

ich hatte ursprünglich die im Schaltplan zu sehende Pinbelegung aus dem 
Datenblatt "kopiert", dann aber das hier gefunden 
http://www.hobbytronics.co.uk/arduino-atmega328-pinout wo PORTB2 kein 
PWM hat. Könnte sein, dass das Bild in dem Link einfach falsch ist was 
gut wäre, weil ich dann die existierende Platine ohne Mods nutzen 
könnte.

Langsam habe ich den Eindruck, dass auch einfach das Lcd defekt sein 
könnte.

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Die PWM sah ursprünglich mal so aus

von Peter D. (peda)


Lesenswert?

Daniel schrieb:
> #define lcdRsPin 9
> #define lcdEnPin 8
> #define lcdD7Pin 7
> #define lcdD6Pin 6
> #define lcdD5Pin 5
> #define lcdD4Pin 4

Ich würde mal sagen, da stimmt garnichts.

von Peter D. (peda)


Lesenswert?

Probier mal diese Lib:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296

Der Vorteil ist, man braucht keine merkwürdigen Pin-Nummern, sondern 
gibt die richtigen Portbezeichnungen aus dem Datenblatt an.

von Daniel (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Daniel schrieb:
>> #define lcdRsPin 9
>> #define lcdEnPin 8
>> #define lcdD7Pin 7
>> #define lcdD6Pin 6
>> #define lcdD5Pin 5
>> #define lcdD4Pin 4
>
> Ich würde mal sagen, da stimmt garnichts.

Ihr wolltet den Code ja haben ;) Das sind die Pins der Arduino IDE und 
ich habe eben auf der Arbeit die Signale mit einem Oszi gecheckt. Es 
kommen die richtigen Signale am Display an.

Also, die Pins stimmen und die Leiterbahnen auf der Platine sind auch 
i.O.

von Uwe (de0508)


Lesenswert?

Hallo,

man könnte einfach mit Peters LCD Lib ein Testprogramm mit avr gcc 
schreiben, um die LCD zu testen.

Ich habe die LCD Lib auch im Einsatz und sie funktioniert.

Tipp:
Schreibe dir ein Testprogramm ohne Arduino Code.

Frage:

auf welchen CRam Adressen liegen die Zeile 1 und 2 ?

.

von Peter D. (peda)


Lesenswert?

Daniel schrieb:
> Also, die Pins stimmen und die Leiterbahnen auf der Platine sind auch
> i.O.

Na wenn Du meinst.
Mit Deinem geposteten Schaltplan besteht jedenfalls keinerlei 
Übereinstimmung.
Und warum funktioniert es dann nicht.

von Hubert G. (hubertg)


Lesenswert?

Daniel schrieb:
> Jetzt wollte
> ich zum ersten mal die TQFP32 Version (ATMEGA328P-AU) benutzen und habe
> direkt einen kleinen Fehler auf der Platine aus China herstellen lassen.
> PORTB 2 ist nicht wie bei der DIP Version ein PWM Pin (Arduino Pin 10).

Was du hier schreibst ist nicht ganz klar. Egal ob TQPF oder DIL, OC1B 
ist in beiden Versionen auf PB2.
Es gibt auch einen Arduino UNO in SMD, auch bei diesem ist der PWM-Pin, 
OC1B auf den Arduino Pin 10.
Die Pin-Nummerierung und daher auch die Port-Zuordnung der TQPF-Version, 
32 Pin, stimmt allerdings mit der Pin-Nummerierung der DIL-Version, 28 
Pin, nicht überein.

von Peter D. (peda)


Lesenswert?

Den Arduino Pinzugriff über Nummern halte ich generell für eine 
sauschlechte Idee.
Dem Chaos sind damit Tür und Tor geöffnet, da je nach Typ und Bauform 
alles anders ist.
Und für das Zurück-Mappen in die echten Pinbezeichnungen muß die 
Arduino-Lib einen riesen Overhead an Code und Laufzeit erzeugen.

Würde man gleich die Pinbezeichnungen verwenden, ist der Zugriff kein 
schnarchlahmer Funktionsaufruf, sondern nur ein einziger Befehl.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.