8X2 Zeichen LCD mit ATMEGA328P-AU

Gast #3115848
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?
Angehängte Dateien:
Gast #3115882
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(){
}
Angehängte Dateien:
Gast #3116086
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.
Gast #3116151
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.
Gast #3116301
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.
#3116576
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 ?

.
#3117872
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.
#3118067
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.

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