Forum: Projekte & Code LCD über nur einen IO-Pin ansteuern


von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Oftmals möchte man ein LCD anschließen und hat aber nur wenige Pins 
frei.
Ein LCD braucht aber mindestens 6 IOs.

Die Lösung, man nimmt nen kleinen ATtiny und kann dann bequem per UART 
die Daten ans LCD senden.

Anbei mal der Schaltplan und ein vorläufiger Code mit fester Baudrate 
(9600Baud). Ich werds später auf Autobaud erweitern.

Der Code wurde auf nem ATtiny25 entwickelt, sollte mit kleinen 
Änderungen auch auf nem ATtiny13 laufen.

Für den UART-Empfang wird ein Pin des AVR doppelt verwendet. Daher der 
220R Widerstand, damit nicht 2 Ausgänge gegeneinander treiben.

Man kann aber auch nen RS232 Anschluß verwenden, dann muß der 4,7k 
Widerstand rein. Außerdem muß das Macro RX_INVERT definiert sein, damit 
die Polarität stimmt.

Da alle 6 IOs verwendet werden, empfiehlt es sich, vorher meinen 
Bootloader aufzuspielen, damit man auch in der Schaltung die Software 
neu flashen kann.


Peter

von zebrafalke (Gast)


Lesenswert?

Man könnte auch einen pcf8575 als portexpander nutzen.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Ist PCF8575 nicht TWI und braucht 2 Leitungen?

von Paul Baumann (Gast)


Lesenswert?

Prima Peter! Das kommt mir gerade recht, da ich eine Steuerung mit einem
Atmega8515 gebaut habe und für ein Display kein "Platz" mehr frei war.

Frage: Wärest Du so gut, die fertige .hex-Datei hierher zu posten? Ich
kenne mich mit C überhaupt ´nicht aus und weiß daher nicht, wie und 
womit ich das Programm kompilieren kann.

MfG Paul

von Stevko (Gast)


Lesenswert?

Hallo Peter,

auch ich habe schon mehrmals einen separaten Käfer für ein LCD verwendet 
um Pins zu sparen. Allerdings wird die Analyse Deines Codes bei meinen 
C-Kenntissen schon ein paar Tage daueren. Schade dass Du nicht in 
Assembler programmierst, da müsste ich nicht alles von C in asm 
umsetzen.

Aber 2 Fragen habe ich noch:

1. Auf dem Schaltplan legst Du die Kontrastspannung auf Masse. Ich habe 
auch schon das LCD EA DIP162 verbaut und es war bei mir immer ein 
Trimmer für VEE nötig. Schade das kein Pin mehr übrig ist, sonst könnte 
man die Hintergrundbeleuchtung mittels Transistor ausschalten.

2. Die Diode D2(wichtigste):
Für was ist sie da? Wenn an J2 eine Spannung anliegt dann leitet doch 
diese Diode nach Masse ab. Also nach meinem Verständnis eine Art 
Kurzschluß. Aber ich habe es schon in mehreren Schaltplänen gesehen nur 
leider verstehe ich den Sinn nicht. Ein paare kurze Erklärungen oder 
Stichpunkte wo ich suchen soll, würden mir schon helfen.

Gruß
  Stevko

von ABC (Gast)


Lesenswert?

@Stevko

>>2. Die Diode D2(wichtigste):<<

Meines Erachtens, sollte sie umgedreht eingebaut werden, damit sie die 
logische 1 einer RS232 Verbindung (zwischen -3V und -15V) nach quasi GND 
zieht.

siehe auch: http://de.wikipedia.org/wiki/EIA-232

von Peter D. (peda)


Lesenswert?

ABC wrote:
> @Stevko
>
>>>2. Die Diode D2(wichtigste):<<
>
> Meines Erachtens, sollte sie umgedreht eingebaut werden, damit sie die
> logische 1 einer RS232 Verbindung (zwischen -3V und -15V) nach quasi GND
> zieht.


Stimmt, es sind sogar beide Dioden falsch rum.

D1 verhindert Spannungen über VCC, funktioniert aber nur in Verbindung 
mit dem internen Pullup. D2 verhindert Spannungen unter GND.

Steuerst Du aber mit nem MC an, der an den gleichen 5V liegt, sind die 
Dioden überflüssig.


Peter

von Stevko (Gast)


Lesenswert?

@Peter:

Vielleicht stelle ich mich heute besonders blöd an aber wenn Du D1 
drehst
und mit TTL auf J2 gehst, sperrt die Diode doch immer. So wie D1 jetzt 
eingebaut ist kann PB3 nicht nach "drausen" senden und die ankommende 
TTL wird um ca. 0,6V abgeschwächt. Das fand ich bis jetzt in Ordnung.
Wenn Du D2 drehst, dann würde ich es verstehen aber auch D1?

RS323 ist doch:
 1 = -3V .. -25V
 0 = +3V .. +25V

Dann wäre doch eine "0" gleich 4.4V und im Soft-UART drehst Du es wieder 
um.

Gruß
 Stevko

von Paul Baumann (Gast)


Lesenswert?

Hier:
http://elmicro.com/de/seriallcd.html

habe ich industriell hergestellte serielle Display's gefunden. Die sind 
ganz anständig teuer. Da ist die Lösung von Peter einfacher.

MfG Paul

von ABC (Gast)


Lesenswert?

Die EA DOGM's sind dagegen mit ca. 10Euronen fuer ein 2x16 Display recht 
preisguenstig. Sie laufen mit 4Bit, 8Bit oder SPI Interface und 
ausserdem direkt an 3.3V. Nur ein Backlight muss man sich noch dazu 
besorgen.

von Andreas K. (a-k)


Lesenswert?


von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

So, ich habs endlich mal fertig gestellt.

Die Baudrate wird von 1000 .. 60000 Baud erkannt.

Obwohl das Programm nur 1k groß ist, muß man den ATtiny25 verwenden.
Das Problem ist ja, daß die Timer nur 8bittig sind, aber möglichst ein 
Zählwert >100 für 1% Fehler eingestellt werden sollte.
Das ist bei beliebigen Baudraten nicht mit dem ATtiny13 machbar. Erst 
der ATtiny25 kann den Prescaler in 2-er Potenzen einstellen.

Auch hat der ATtiny25 dann Platz für den Bootloader, den man besser 
verwenden sollte, wenn man alle 6 IOs benötigt.

Man könnte auch den ATtiny24 nehmen, der hat ja nen 16Bit Timer. Da muß 
man dann nicht am Prescaler spielen.


Das Kommandointerface ist ganz einfach, nach 'c' kann man ein Kommando 
senden, nach 'd' Daten.

Außerdem kann man nach 'C' bzw. 'D' alles als 2 Hex-Digits senden.
Das ist insbesondere für PC-Modder interessant, die ein LCD einfach über 
die UART ansprechen wollen.


Peter

von Tobi (Gast)


Lesenswert?

Hallo Peter,

nun habe ich schon das genze Forum durchsucht,
finde aber leider nur dieses hier.

Mit diesem Code kann man nur über das 1wire empfangen, aber nicht 
senden,
wie bei deinem Bootloader.

Könntest Du mir da mal etwas auf die Sprünge helfen?

Gruß Tobi

von Christian. (Gast)


Lesenswert?

Hi Peter,
tolles Projekt! Ist denn der Schaltplan jetzt so, wie er sein soll. Ich 
habe das hin und her mit den Dioden nicht ganz verstanden. Wenn der 
Schaltplan nicht korrekt ist, wurde ich mich über eine Aktualisierung 
freuen.
Grüße
Christian

von Peter D. (peda)


Lesenswert?

Christian. wrote:
> tolles Projekt! Ist denn der Schaltplan jetzt so, wie er sein soll. Ich
> habe das hin und her mit den Dioden nicht ganz verstanden. Wenn der
> Schaltplan nicht korrekt ist, wurde ich mich über eine Aktualisierung
> freuen.

Ja, editieren von Projekten geht hier nicht.

Das aktuelle Projekt findest du hier:

http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_type=project&item_id=1367


Peter

von Klaus (Gast)


Lesenswert?

@Peter
Kann man mit der AutoBaud-Funktion in anderen Kontexten auch ohne 
externen Oszillator bei guter Qualität über RS232 senden, nachdem der 
UART eingestellt ist?

von Uwe S. (de0508)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe den Quellcode mal auf avr-gcc mit einem Makefile angepasst.

Sind diese Fuse-Bits ok:
1
# 8MHz, mit Bootloader von Peter und RESET ist noch enabled.
2
-U lfuse:w:0xe2:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m
3
4
# 8MHz, mit Bootloader von Peter und RESET ist disabled.
5
-U lfuse:w:0xe2:m -U hfuse:w:0x5d:m -U efuse:w:0xfe:m

Orginal Code stammt von hier:

http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_type=project&item_id=1367

von Uwe S. (de0508)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

nach einigen Anpassungen läuft nun die 1-Wire LCD Anzeige mit dem 1-Wire 
Bootloader "fastboot-2.9" von Peter_Danneggers.
Danke Peter.

Hier noch alle nötige Quelldateien, Ergänzungen und Beschreibung zum 
Bootloader "fastboot-2.9".

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.